]> granicus.if.org Git - postgresql/blob - doc/src/sgml/release.sgml
45fe82f4004916594fb64a200f7fc6db2d5ec91c
[postgresql] / doc / src / sgml / release.sgml
1 <!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.573 2008/01/01 19:36:20 momjian 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-introduction">
39   <title>Introduction</title>
40
41   <para>
42    The release notes contain the significant changes in each PostgreSQL
43    release, with major features and migration issues often listed at the
44    top.  The release notes do not contain changes that affect only a few
45    users or changes that are internal and therefore not user-visible.  For
46    example, the optimizer is improved in almost every release, but the
47    improvements are usually observed by users as simply faster queries.
48   </para>
49
50   <para>
51    A complete list of changes for each release can be obtained by
52    viewing the <link linkend="cvs">CVS</link> logs for each release.  The <ulink
53    url="http://archives.postgresql.org/pgsql-committers/">committers email
54    list</ulink> contains all source code changes as well.   There is also
55    a <ulink url="http://developer.postgresql.org/cvsweb.cgi/pgsql/">web
56    interface</ulink> that shows changes to specific files.
57    <!-- we need a file containing the CVS logs for each release, and something
58    like the SVN web interface that groups commits but has branches -->
59   </para>
60
61   <para>
62    The name appearing next to each item represents the major developer for
63    that item.  Of course all changes involve community discussion and patch
64    review so each item is truly a community effort.
65   </para>
66
67  </sect1>
68
69  <sect1 id="release-8-3">
70   <title>Release 8.3</title>
71
72   <note>
73    <title>Release date</title>
74    <simpara>2008-01-??</simpara>
75    <para>CURRENT AS OF 2008-01-01</>
76   </note>
77
78   <sect2>
79    <title>Overview</title>
80
81    <para>
82     With significant new functionality and performance enhancements,
83     this release represents a major leap forward for
84     <productname>PostgreSQL</>. This was made possible by a growing
85     community that has dramatically accelerated the pace of
86     development. This release adds the following major features:
87    </para>
88
89    <itemizedlist>
90
91     <listitem>
92      <para>
93       Full text search is integrated into the core database system
94      </para>
95     </listitem>
96
97     <listitem>
98      <para>
99       Support for the SQL/XML standard, including new operators and an
100       <type>XML</type> data type
101      </para>
102     </listitem>
103
104     <listitem>
105      <para>
106       Enumerated data types (<type>ENUM</type>)
107      </para>
108     </listitem>
109
110     <listitem>
111      <para>
112       Arrays of composite types
113      </para>
114     </listitem>
115
116     <listitem>
117      <para>
118       Universally Unique Identifier (<type>UUID</>) data type
119      </para>
120     </listitem>
121
122     <listitem>
123      <para>
124       Add control over whether <literal>NULL</>s sort first or last
125      </para>
126     </listitem>
127
128     <listitem>
129      <para>
130       Updatable cursors
131      </para>
132     </listitem>
133
134     <listitem>
135      <para>
136       Server configuration parameters can now be set on a per-function
137       basis
138      </para>
139     </listitem>
140
141     <listitem>
142      <para>
143       User-defined types can now have type modifiers
144      </para>
145     </listitem>
146
147     <listitem>
148      <para>
149       Automatically re-plan cached queries when table
150       definitions change or statistics are updated
151      </para>
152     </listitem>
153
154     <listitem>
155      <para>
156       Numerous improvements in logging and statistics collection
157      </para>
158     </listitem>
159
160     <listitem>
161      <para>
162       Support Security Service Provider Interface (<acronym>SSPI</>) for
163       authentication on Windows
164      </para>
165     </listitem>
166
167     <listitem>
168      <para>
169       Support multiple concurrent autovacuum processes, and other
170       autovacuum improvements
171      </para>
172     </listitem>
173
174     <listitem>
175      <para>
176       Allow the whole <productname>PostgreSQL</> distribution to be compiled
177       with <productname>Microsoft Visual C++</>
178      </para>
179     </listitem>
180
181    </itemizedlist>
182
183    <para>
184     Major performance improvements are listed below.  Most of
185     these enhancements are automatic and do not require user changes or
186     tuning:
187    </para>
188
189   <itemizedlist>
190
191     <listitem>
192      <para>
193       Asynchronous commit delays writes to WAL during transaction commit
194      </para>
195     </listitem>
196
197     <listitem>
198      <para>
199       Checkpoint writes can be spread over a longer time period to smooth
200       the I/O spike during each checkpoint
201      </para>
202     </listitem>
203
204     <listitem>
205      <para>
206       Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for
207       most <command>UPDATE</>s and <command>DELETE</>s
208      </para>
209     </listitem>
210
211     <listitem>
212      <para>
213       Just-in-time background writer strategy improves disk write
214       efficiency
215      </para>
216     </listitem>
217
218     <listitem>
219      <para>
220       Using non-persistent transaction IDs for read-only transactions
221       reduces overhead and <command>VACUUM</> requirements
222      </para>
223     </listitem>
224
225     <listitem>
226      <para>
227       Per-field and per-row storage overhead has been reduced
228      </para>
229     </listitem>
230
231     <listitem>
232      <para>
233       Large sequential scans no longer force out frequently used
234       cached pages
235      </para>
236     </listitem>
237
238     <listitem>
239      <para>
240       Concurrent large sequential scans can now share disk reads
241      </para>
242     </listitem>
243
244     <listitem>
245      <para>
246       <literal>ORDER BY ... LIMIT</> can be done without sorting
247      </para>
248     </listitem>
249
250    </itemizedlist>
251
252    <para>
253     The above items are explained in more detail in the sections below.
254    </para>
255
256   </sect2>
257
258   <sect2>
259    <title>Migration to Version 8.3</title>
260
261    <para>
262     A dump/restore using <application>pg_dump</application> is
263     required for those wishing to migrate data from any previous
264     release.
265    </para>
266
267    <para>
268     Observe the following incompatibilities:
269    </para>
270
271    <sect3>
272     <title>General</title>
273     <itemizedlist>
274
275      <listitem>
276       <para>
277        Non-character data types are no longer automatically cast to
278        <type>TEXT</> (Peter, Tom)
279       </para>
280
281       <para>
282        Previously, if a non-character value was supplied to an operator or
283        function that requires <type>text</> input, it was automatically
284        cast to <type>text</>, for most (though not all) built-in data types.
285        This no longer happens: an explicit cast to <type>text</> is now
286        required for all non-character-string types.  For example, these
287        expressions formerly worked:
288
289 <programlisting>
290 substr(current_date, 1, 4)
291 23 LIKE '2%'
292 </programlisting>
293
294        but will now draw <quote>function does not exist</> and <quote>operator
295        does not exist</> errors respectively.  Use an explicit cast instead:
296
297 <programlisting>
298 substr(current_date::text, 1, 4)
299 23::text LIKE '2%'
300 </programlisting>
301
302        (Of course, you can use the more verbose <literal>CAST()</> syntax too.)
303        The reason for the change is that these automatic casts too often caused
304        surprising behavior.  An example is that in previous releases, this
305        expression was accepted but did not do what was expected:
306
307 <programlisting>
308 current_date &lt; 2017-11-17
309 </programlisting>
310
311        This is actually comparing a date to an integer, which should be
312        (and now is) rejected &mdash; but in the presence of automatic
313        casts both sides were cast to <type>text</> and a textual comparison
314        was done, because the <literal>text &lt; text</> operator was able
315        to match the expression when no other <literal>&lt;</> operator could.
316       </para>
317
318       <para>
319        Types <type>char(<replaceable>n</>)</type> and
320        <type>varchar(<replaceable>n</>)</type> still cast to <type>text</>
321        automatically.  Also, automatic casting to <type>text</> still works for
322        inputs to the concatenation (<literal>||</>) operator, so long as least
323        one input is a character-string type.
324       </para>
325      </listitem>
326
327      <listitem>
328       <para>
329         Full text search features from <filename>contrib/tsearch2</> have
330         been moved into the core server, with some minor syntax changes
331       </para>
332
333       <para>
334        <filename>contrib/tsearch2</> now contains a compatibility
335        interface.
336       </para>
337      </listitem>
338
339      <listitem>
340       <para>
341        <literal>ARRAY(SELECT ...)</literal>, where the <command>SELECT</>
342        returns no rows, now returns an empty array, rather than NULL
343        (Tom)
344       </para>
345      </listitem>
346
347      <listitem>
348       <para>
349        The array type name for a base data type is no longer always the base
350        type's name with an underscore prefix
351       </para>
352
353       <para>
354        The old naming convention is still honored when possible, but
355        application code should no longer depend on it. Instead
356        use the new <literal>pg_type.typarray</literal> column to
357        identify the array data type associated with a given type.
358       </para>
359      </listitem>
360
361      <listitem>
362       <para>
363        <literal>ORDER BY ... USING</> <replaceable>operator</> must now
364        use a less-than or greater-than <replaceable>operator</> that is
365        defined in a btree operator class
366       </para>
367
368       <para>
369        This restriction was added to prevent inconsistent results.
370       </para>
371      </listitem>
372
373      <listitem>
374       <para>
375        <command>SET LOCAL</command> changes now persist until
376        the end of the outermost transaction, unless rolled back (Tom)
377       </para>
378
379       <para>
380        Previously <command>SET LOCAL</command>'s effects were lost
381        after subtransaction commit (<command>RELEASE SAVEPOINT</>
382        or exit from a PL/pgSQL exception block).
383       </para>
384      </listitem>
385
386      <listitem>
387       <para>
388        Commands rejected in transaction blocks are now also rejected in
389        multiple-statement query strings (Tom)
390       </para>
391
392       <para>
393        For example, <literal>"BEGIN; DROP DATABASE; COMMIT"</> will now be
394        rejected even if submitted as a single query message.
395       </para>
396      </listitem>
397
398      <listitem>
399       <para>
400        <command>ROLLBACK</> outside a transaction block now
401        issues <literal>NOTICE</> instead of <literal>WARNING</> (Bruce)
402       </para>
403      </listitem>
404
405      <listitem>
406       <para>
407        Prevent <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command>
408        from accepting schema-qualified names (Bruce)
409       </para>
410
411       <para>
412        Formerly, these commands accepted <literal>schema.relation</> but
413        ignored the schema part, which was confusing.
414       </para>
415      </listitem>
416
417      <listitem>
418       <para>
419        <command>ALTER SEQUENCE</> no longer affects the sequence's
420        <function>currval()</> state (Tom)
421       </para>
422      </listitem>
423
424      <listitem>
425       <para>
426        Foreign keys now must match indexable conditions for
427        cross-data-type references (Tom)
428       </para>
429
430       <para>
431        This improves semantic consistency and helps avoid
432        performance problems.
433       </para>
434      </listitem>
435
436      <listitem>
437       <para>
438        Restrict object size functions to users who have reasonable
439        permissions to view such information (Tom)
440       </para>
441
442       <para>
443        For example, <function>pg_database_size()</function> now requires
444        <literal>CONNECT</> permission, which is granted to everyone by
445        default. <function>pg_tablespace_size()</function> requires
446        <literal>CREATE</> permission in the tablespace, or is allowed if
447        the tablespace is the default tablespace for the database.
448       </para>
449      </listitem>
450
451      <listitem>
452       <para>
453        Remove the undocumented <literal>!!=</> (not in) operator (Tom)
454       </para>
455
456       <para>
457        <literal>NOT IN (SELECT ...)</literal> is the proper way to
458        perform this operation.
459       </para>
460      </listitem>
461
462      <listitem>
463       <para>
464        Internal hashing functions are now more uniformly-distributed (Tom)
465       </para>
466
467       <para>
468        If application code was computing and storing hash values using
469        internal <productname>PostgreSQL</> hashing functions, the hash
470        values must be regenerated.
471       </para>
472      </listitem>
473
474      <listitem>
475       <para>
476        C-code conventions for handling variable-length data values
477        have changed (Greg Stark, Tom)
478       </para>
479
480       <para>
481        The new <function>SET_VARSIZE()</> macro <emphasis>must</> be used
482        to set the length of generated <type>varlena</> values. Also, it
483        might be necessary to expand (<quote>de-TOAST</quote>) input values
484        in more cases.
485       </para>
486      </listitem>
487
488      <listitem>
489       <para>
490        Continuous archiving no longer reports each successful archive
491        operation to the server logs unless <literal>DEBUG</> level is used
492        (Simon)
493       </para>
494      </listitem>
495
496     </itemizedlist>
497
498     </sect3>
499
500     <sect3>
501      <title>Configuration Parameters</title>
502
503     <itemizedlist>
504
505      <listitem>
506       <para>
507        Numerous changes in administrative server parameters
508       </para>
509
510       <para>
511        <varname>bgwriter_lru_percent</>,
512        <varname>bgwriter_all_percent</>,
513        <varname>bgwriter_all_maxpages</>,
514        <varname>stats_start_collector</>, and
515        <varname>stats_reset_on_server_start</> are removed.
516        <varname>redirect_stderr</> is renamed to
517        <varname>logging_collector</>. 
518        <varname>stats_command_string</> is renamed to
519        <varname>track_activities</>.
520        <varname>stats_block_level</> and <varname>stats_row_level</>
521        are merged into <varname>track_counts</>.
522        A new boolean configuration parameter, <varname>archive_mode</>,
523        controls archiving. Autovacuum's default settings have changed.
524       </para>
525      </listitem>
526
527      <listitem>
528       <para>
529        Remove <varname>stats_start_collector</varname> parameter (Tom)
530       </para>
531
532       <para>
533        We now always start the collector process, unless <acronym>UDP</>
534        socket creation fails.
535       </para>
536      </listitem>
537
538      <listitem>
539       <para>
540        Remove <varname>stats_reset_on_server_start</varname> parameter (Tom)
541       </para>
542
543       <para>
544        This was removed because <function>pg_stat_reset()</function>
545        can be used for this purpose.
546       </para>
547      </listitem>
548
549      <listitem>
550       <para>
551        Commenting out a parameter in <filename>postgresql.conf</> now
552        causes it to revert to its default value (Joachim Wieland)
553       </para>
554
555       <para>
556        Previously, commenting out an entry left the parameter's value unchanged
557        until the next server restart.
558       </para>
559      </listitem>
560
561     </itemizedlist>
562
563     </sect3>
564
565
566     <sect3>
567      <title>Character Encodings</title>
568
569     <itemizedlist>
570
571      <listitem>
572       <para>
573        Add more checks for invalidly-encoded data (Andrew)
574       </para>
575
576       <para>
577        This change plugs some holes that existed in literal backslash
578        escape string processing and <command>COPY</command> escape
579        processing. Now the de-escaped string is rechecked to see if the
580        result created an invalid multi-byte character.
581       </para>
582      </listitem>
583
584      <listitem>
585       <para>
586        Disallow database encodings that are inconsistent with the server's
587        locale setting (Tom)
588       </para>
589
590       <para>
591        On most platforms, <literal>C</> locale is the only locale that
592        will work with any database encoding.  Other locale settings imply
593        a specific encoding and will misbehave if the database encoding
594        is something different.  (Typical symptoms include bogus textual
595        sort order and wrong results from <function>upper()</> or
596        <function>lower()</>.)  The server now rejects attempts to create
597        databases that have an incompatible encoding.
598       </para>
599      </listitem>
600
601      <listitem>
602       <para>
603        Ensure that <function>chr()</function> cannot create
604        invalidly-encoded values (Andrew)
605       </para>
606
607       <para>
608        In UTF8-encoded databases the argument of <function>chr()</function> is
609        now treated as a Unicode code point. In other multi-byte encodings
610        <function>chr()</function>'s argument must designate a 7-bit ASCII
611        character.  Zero is no longer accepted.
612        <function>ascii()</function> has been adjusted to match.
613       </para>
614      </listitem>
615
616      <listitem>
617       <para>
618        Adjust <function>convert()</function> behavior to ensure encoding
619        validity (Andrew)
620       </para>
621
622       <para>
623        The two argument form of <function>convert()</function> has been
624        removed. The three argument form now takes a <type>bytea</type>
625        first argument and returns a <type>bytea</type>. To cover the
626        loss of functionality, three new functions have been added:
627       </para>
628
629       <itemizedlist>
630        <listitem>
631         <para>
632          <function>convert_from(bytea, name)</function> returns
633          <type>text</> &mdash; converts the first argument from the named
634          encoding to the database encoding
635         </para>
636        </listitem>
637
638        <listitem>
639         <para>
640          <function>convert_to(text, name)</function> returns
641          <type>bytea</> &mdash; converts the first argument from the
642          database encoding to the named encoding
643         </para>
644        </listitem>
645
646        <listitem>
647         <para>
648          <function>length(bytea, name)</function> returns
649          <type>integer</> &mdash; gives the length of the first
650          argument in characters in the named encoding
651         </para>
652        </listitem>
653       </itemizedlist>
654      </listitem>
655
656      <listitem>
657       <para>
658        Remove <literal>convert(argument USING conversion_name)</literal>
659        (Andrew)
660       </para>
661
662       <para>
663        Its behavior did not match the SQL standard.
664       </para>
665      </listitem>
666
667      <listitem>
668       <para>
669        Make JOHAB encoding client-only (Tatsuo)
670       </para>
671
672       <para>
673        JOHAB is not safe as a server-side encoding.
674       </para>
675      </listitem>
676
677     </itemizedlist>
678
679    </sect3>
680
681   </sect2>
682
683   <sect2>
684    <title>Changes</title>
685
686    <para>
687     Below you will find a detailed account of the
688     changes between <productname>PostgreSQL</productname> 8.3 and
689     the previous major release.
690    </para>
691
692    <sect3>
693     <title>Performance</title>
694     <itemizedlist>
695
696      <listitem>
697       <para>
698        Asynchronous commit delays writes to WAL during transaction commit
699        (Simon)
700       </para>
701
702       <para>
703        This feature dramatically increases performance for short data-modifying
704        transactions. The disadvantage is that because disk writes are
705        delayed, if the operating system crashes before data is written to
706        the disk, committed data will be lost. This feature is useful for
707        applications that can accept some data loss.  Unlike turning off
708        <varname>fsync</varname>, asynchronous commit does not put database
709        consistency at risk; the worst case is that after a database or system
710        crash the last few reportedly-committed transactions might be missing.
711        This feature is enabled by turning off <varname>synchronous_commit</>
712        (which can be done per-session or per-transaction, if some transactions
713        are critical and others are not).
714        <varname>wal_writer_delay</> can be adjusted to control the maximum
715        delay before transactions actually reach disk.
716       </para>
717      </listitem>
718
719      <listitem>
720       <para>
721        Checkpoint writes can be spread over a longer time period to smooth
722        the I/O spike during each checkpoint (Itagaki Takahiro and Heikki
723        Linnakangas)
724       </para>
725
726       <para>
727        Previously all modified buffers were forced to disk as quickly as
728        possible during a
729        checkpoint, causing an I/O spike that decreased server performance.
730        This new approach spreads out disk writes during checkpoints,
731        reducing peak I/O usage. (User-requested and shutdown checkpoints
732        are still written as quickly as possible.)
733       </para>
734      </listitem>
735
736      <listitem>
737       <para>
738        Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for most
739        <command>UPDATE</>s and <command>DELETE</>s (Pavan Deolasee, with
740        ideas from many others)
741       </para>
742
743       <para>
744        <command>UPDATE</>s and <command>DELETE</>s leave dead tuples
745        behind, as do failed <command>INSERT</>s.  Previously only
746        <command>VACUUM</> could reclaim space taken by dead tuples. With
747        <acronym>HOT</> dead tuple space can be reclaimed at the time of
748        <command>INSERT</> or <command>UPDATE</> if no changes are made to
749        indexed columns.  This allows for more consistent performance.
750        Also, <acronym>HOT</> avoids adding duplicate index entries.
751       </para>
752      </listitem>
753
754      <listitem>
755       <para>
756        Just-in-time background writer strategy improves disk write
757        efficiency (Greg Smith, Itagaki Takahiro)
758       </para>
759
760       <para>
761        This greatly reduces the need for manual tuning of the background
762        writer.
763       </para>
764      </listitem>
765
766      <listitem>
767       <para>
768        Per-field and per-row storage overhead have been reduced
769        (Greg Stark, Heikki Linnakangas)
770       </para>
771
772       <para>
773        Variable-length data types with data values less than 128 bytes long
774        will see a storage decrease of 3 to 6 bytes. For example, two adjacent
775        <type>char(1)</type> fields now use 4 bytes instead of 16. Row headers
776        are also 4 bytes shorter than before.
777       </para>
778      </listitem>
779
780      <listitem>
781       <para>
782        Using non-persistent transaction IDs for read-only transactions
783        reduces overhead and <command>VACUUM</> requirements (Florian Pflug)
784       </para>
785
786       <para>
787        Non-persistent transaction IDs do not increment the global
788        transaction counter. Therefore, they reduce the load on
789        <structname>pg_clog</> and increase the time between forced
790        vacuums to prevent transaction ID wraparound.
791        Other performance
792        improvements were also made that should improve concurrency.
793       </para>
794      </listitem>
795
796      <listitem>
797       <para>
798        Avoid incrementing the command counter after a read-only command (Tom)
799       </para>
800
801       <para>
802        There was formerly a hard limit of 2<superscript>32</>
803        (4 billion) commands per transaction.  Now only commands that
804        actually changed the database count, so while this limit still
805        exists, it should be significantly less annoying.
806       </para>
807      </listitem>
808
809      <listitem>
810       <para>
811        Create a dedicated <acronym>WAL</> writer process to off-load
812        work from backends (Simon)
813       </para>
814      </listitem>
815
816      <listitem>
817       <para>
818        Skip unnecessary WAL writes for <command>CLUSTER</command> and
819        <command>COPY</command> (Simon)
820       </para>
821
822       <para>
823        Unless WAL archiving is enabled, the system now avoids WAL writes
824        for <command>CLUSTER</command> and just <function>fsync()</>s the
825        table at the end of the command.  It also does the same for
826        <command>COPY</command> if the table was created in the same
827        transaction.
828       </para>
829      </listitem>
830
831      <listitem>
832       <para>
833        Large sequential scans no longer force out frequently used
834        cached pages (Simon, Heikki, Tom)
835       </para>
836      </listitem>
837
838      <listitem>
839       <para>
840        Concurrent large sequential scans can now share disk reads (Jeff Davis)
841       </para>
842
843       <para>
844        This is accomplished by starting the new sequential scan in the
845        middle of the table (where another sequential scan is already
846        in-progress) and wrapping around to the beginning to finish.  This
847        can affect the order of returned rows in a query that does not
848        specify <literal>ORDER BY</>.
849       </para>
850      </listitem>
851
852      <listitem>
853       <para>
854        <literal>ORDER BY ... LIMIT</> can be done without sorting
855        (Greg Stark)
856       </para>
857
858       <para>
859        This is done by sequentially scanning the table and tracking just
860        the <quote>top N</> candidate rows, rather than performing a
861        full sort of the entire table.  This is useful when there is no
862        matching index and the <literal>LIMIT</> is not large.
863       </para>
864      </listitem>
865
866      <listitem>
867       <para>
868        Put a rate limit on messages sent to the statistics
869        collector by backends
870        (Tom)
871       </para>
872
873       <para>
874        This reduces overhead for short transactions, but might sometimes
875        increase the delay before statistics are tallied.
876       </para>
877      </listitem>
878
879      <listitem>
880       <para>
881        Improve hash join performance for cases with many NULLs (Tom)
882       </para>
883      </listitem>
884
885      <listitem>
886       <para>
887        Speed up operator lookup for cases with non-exact datatype matches (Tom)
888       </para>
889      </listitem>
890
891     </itemizedlist>
892
893    </sect3>
894
895    <sect3>
896     <title>Server</title>
897     <itemizedlist>
898
899      <listitem>
900       <para>
901        Autovacuum is now enabled by default (Alvaro)
902       </para>
903
904       <para>
905        Several changes were made to eliminate disadvantages of having
906        autovacuum enabled, thereby justifying the change in default.
907        Several other autovacuum parameter defaults were also modified.
908       </para>
909      </listitem>
910
911      <listitem>
912       <para>
913        Support multiple concurrent autovacuum processes (Alvaro, Itagaki
914        Takahiro)
915       </para>
916
917       <para>
918        This allows multiple vacuums to run concurrently.  This prevents
919        vacuuming of a large table from delaying vacuuming of smaller tables.
920       </para>
921      </listitem>
922
923      <listitem>
924       <para>
925        Automatically re-plan cached queries when table
926        definitions change or statistics are updated (Tom)
927       </para>
928
929       <para>
930        Previously PL/PgSQL functions that referenced temporary tables
931        would fail if the temporary table was dropped and recreated
932        between function invocations, unless <literal>EXECUTE</> was
933        used.  This improvement fixes that problem and many related issues.
934       </para>
935      </listitem>
936
937      <listitem>
938       <para>
939        Add a <varname>temp_tablespaces</varname> parameter to control
940        the tablespaces for temporary tables and files (Jaime Casanova,
941        Albert Cervera, Bernd Helmle)
942       </para>
943
944       <para>
945        This parameter defines a list of tablespaces to be used.  This
946        enables spreading the I/O load across multiple tablespaces. A random
947        tablespace is chosen each time a temporary object is created.
948        Temporary files are no longer stored in per-database
949        <filename>pgsql_tmp/</filename> directories but in per-tablespace
950        directories.
951       </para>
952      </listitem>
953
954      <listitem>
955       <para>
956        Place temporary tables' TOAST tables in special schemas named
957        <literal>pg_toast_temp_<replaceable>nnn</></literal> (Tom)
958       </para>
959
960       <para>
961        This allows low-level code to recognize these tables as temporary,
962        which enables various optimizations such as not WAL-logging changes
963        and using local rather than shared buffers for access. This also
964        fixes a bug wherein backends unexpectedly held open file references
965        to temporary TOAST tables.
966       </para>
967      </listitem>
968
969      <listitem>
970       <para>
971        Fix problem that a constant flow of new connection requests could
972        indefinitely delay the postmaster from completing a shutdown or
973        a crash restart (Tom)
974       </para>
975      </listitem>
976
977      <listitem>
978       <para>
979        Guard against a very-low-probability data loss scenario by preventing
980        re-use of a deleted table's relfilenode until after the next
981        checkpoint (Heikki)
982       </para>
983      </listitem>
984
985      <listitem>
986       <para>
987        Fix <command>CREATE CONSTRAINT TRIGGER</>
988        to convert old-style foreign key trigger definitions into regular
989        foreign key constraints (Tom)
990       </para>
991
992       <para>
993        This will ease porting of foreign key constraints carried forward from
994        pre-7.3 databases, if they were never converted using
995        <filename>contrib/adddepend</>.
996       </para>
997      </listitem>
998
999      <listitem>
1000       <para>
1001        Fix <literal>DEFAULT NULL</> to override inherited defaults (Tom)
1002       </para>
1003
1004       <para>
1005        <literal>DEFAULT NULL</> was formerly considered a noise phrase, but it
1006        should (and now does) override non-null defaults that would otherwise
1007        be inherited from a parent table or domain.
1008       </para>
1009      </listitem>
1010
1011      <listitem>
1012       <para>
1013        Add new encodings EUC_JIS_2004 and SHIFT_JIS_2004 (Tatsuo)
1014       </para>
1015
1016       <para>
1017        These new encodings can be converted to and from UTF-8.
1018       </para>
1019      </listitem>
1020
1021      <listitem>
1022       <para>
1023        Change server startup log message from <quote>database system is
1024        ready</quote> to <quote>database system is ready to accept
1025        connections</quote>, and adjust its timing
1026       </para>
1027
1028       <para>
1029        The message now appears only when the postmaster is really ready
1030        to accept connections.
1031       </para>
1032      </listitem>
1033
1034     </itemizedlist>
1035
1036    </sect3>
1037
1038    <sect3>
1039     <title>Monitoring</title>
1040     <itemizedlist>
1041
1042      <listitem>
1043       <para>
1044        Add <varname>log_autovacuum_min_duration</varname> parameter to
1045        support configurable logging of autovacuum activity (Simon, Alvaro)
1046       </para>
1047      </listitem>
1048
1049      <listitem>
1050       <para>
1051        Add <varname>log_lock_waits</varname> parameter to log lock waiting
1052        (Simon)
1053       </para>
1054      </listitem>
1055
1056      <listitem>
1057       <para>
1058        Add <varname>log_temp_files</varname> parameter to log temporary
1059        file usage (Bill Moran)
1060       </para>
1061      </listitem>
1062
1063      <listitem>
1064       <para>
1065        Add <varname>log_checkpoints</varname> parameter to improve logging
1066        of checkpoints (Greg Smith, Heikki)
1067       </para>
1068      </listitem>
1069
1070      <listitem>
1071       <para>
1072        <varname>log_line_prefix</varname> now supports
1073        <literal>%s</literal> and <literal>%c</literal> escapes in all
1074        processes (Andrew)
1075       </para>
1076
1077       <para>
1078        Previously these escapes worked only for user sessions, not for
1079        background database processes.
1080       </para>
1081      </listitem>
1082
1083      <listitem>
1084       <para>
1085        Add <varname>log_restartpoints</varname> to control logging of
1086        point-in-time recovery restart points (Simon)
1087       </para>
1088      </listitem>
1089
1090      <listitem>
1091       <para>
1092        Last transaction end time is now logged at end of recovery and at
1093        each logged restart point (Simon)
1094       </para>
1095      </listitem>
1096
1097      <listitem>
1098       <para>
1099        Autovacuum now reports its activity start time in
1100        <literal>pg_stat_activity</literal> (Tom)
1101       </para>
1102      </listitem>
1103
1104      <listitem>
1105       <para>
1106        Allow server log output in comma-separated value (CSV) format (Arul
1107        Shaji, Greg Smith, Andrew Dunstan)
1108       </para>
1109
1110       <para>
1111        CSV-format log files can easily be loaded into a database table for
1112        subsequent analysis.
1113       </para>
1114      </listitem>
1115
1116      <listitem>
1117       <para>
1118        Use PostgreSQL-supplied timezone support for formatting timestamps
1119        displayed in the server log (Tom)
1120       </para>
1121
1122       <para>
1123        This avoids Windows-specific problems with localized time zone
1124        names that are in the wrong encoding. There is a new
1125        <varname>log_timezone</> parameter that controls the timezone
1126        used in log messages, independently of the client-visible
1127        <varname>timezone</> parameter.
1128       </para>
1129      </listitem>
1130
1131      <listitem>
1132       <para>
1133        New system view <literal>pg_stat_bgwriter</literal> displays
1134        statistics about background writer activity (Magnus)
1135       </para>
1136      </listitem>
1137
1138      <listitem>
1139       <para>
1140        Add new columns for database-wide tuple statistics to
1141        <literal>pg_stat_database</literal> (Magnus)
1142       </para>
1143      </listitem>
1144
1145      <listitem>
1146       <para>
1147        Add an <literal>xact_start</literal> (transaction start time) column to
1148        <literal>pg_stat_activity</literal> (Neil)
1149       </para>
1150
1151       <para>
1152        This makes it easier to identify long-running transactions.
1153       </para>
1154      </listitem>
1155
1156      <listitem>
1157       <para>
1158        Add <literal>n_live_tuples</> and <literal>n_dead_tuples</> columns
1159        to <literal>pg_stat_all_tables</literal> and related views (Glen
1160        Parker)
1161       </para>
1162      </listitem>
1163
1164      <listitem>
1165       <para>
1166        Merge <varname>stats_block_level</> and <varname>stats_row_level</>
1167        parameters into a single parameter <varname>track_counts</>, which
1168        controls all messages sent to the statistics collector process
1169        (Tom)
1170       </para>
1171      </listitem>
1172
1173      <listitem>
1174       <para>
1175        Rename <varname>stats_command_string</varname> parameter to
1176        <varname>track_activities</varname> (Tom)
1177       </para>
1178      </listitem>
1179
1180      <listitem>
1181       <para>
1182        Fix statistical counting of live and dead tuples to recognize that
1183        committed and aborted transactions have different effects (Tom)
1184       </para>
1185      </listitem>
1186
1187     </itemizedlist>
1188
1189    </sect3>
1190
1191    <sect3>
1192     <title>Authentication</title>
1193     <itemizedlist>
1194
1195      <listitem>
1196       <para>
1197        Support Security Service Provider Interface (<acronym>SSPI</>) for
1198        authentication on Windows (Magnus)
1199       </para>
1200      </listitem>
1201
1202      <listitem>
1203       <para>
1204        Support GSSAPI authentication (Henry Hotz, Magnus)
1205       </para>
1206
1207       <para>
1208        This should be preferred to native Kerberos authentication because
1209        GSSAPI is an industry standard.
1210       </para>
1211      </listitem>
1212
1213      <listitem>
1214       <para>
1215        Support a global SSL configuration file (Victor Wagner)
1216       </para>
1217      </listitem>
1218
1219      <listitem>
1220       <para>
1221        Add <varname>ssl_ciphers</> parameter to control accepted SSL ciphers
1222        (Victor Wagner)
1223       </para>
1224      </listitem>
1225
1226      <listitem>
1227       <para>
1228        Add a Kerberos realm parameter, <varname>krb_realm</> (Magnus)
1229       </para>
1230      </listitem>
1231
1232     </itemizedlist>
1233
1234    </sect3>
1235
1236    <sect3>
1237     <title>Write-Ahead Log (<acronym>WAL</>) and Continuous Archiving</title>
1238     <itemizedlist>
1239
1240      <listitem>
1241       <para>
1242        Change the timestamps recorded in transaction WAL records from
1243        time_t to TimestampTz representation (Tom)
1244       </para>
1245
1246       <para>
1247        This provides sub-second resolution in WAL, which can be useful for
1248        point-in-time recovery.
1249       </para>
1250      </listitem>
1251
1252      <listitem>
1253       <para>
1254        Reduce WAL disk space needed by warm standby servers (Simon)
1255       </para>
1256      
1257       <para>
1258        This change allows a warm standby server to pass the name of the earliest
1259        still-needed WAL file to the recovery script, allowing automatic removal
1260        of no-longer-needed WAL files.  This is done using <literal>%r</> in
1261        the <varname>restore_command</varname> parameter of
1262        <filename>recovery.conf</filename>.
1263       </para>
1264      </listitem>
1265
1266      <listitem>
1267       <para>
1268        New boolean configuration parameter, <varname>archive_mode</>,
1269        controls archiving (Simon)
1270       </para>
1271
1272       <para>
1273        Previously setting <varname>archive_command</> to an empty string
1274        turned off archiving. Now <varname>archive_mode</> turns archiving
1275        on and off, independently of <varname>archive_command</>. This is
1276        useful for stopping archiving temporarily.
1277       </para>
1278      </listitem>
1279
1280     </itemizedlist>
1281
1282    </sect3>
1283
1284    <sect3>
1285     <title>Queries</title>
1286     <itemizedlist>
1287
1288      <listitem>
1289       <para>
1290        Full text search is integrated into the core database
1291        system (Teodor, Oleg)
1292       </para>
1293
1294       <para>
1295        Text search has been improved, moved into the core code, and is now
1296        installed by default.  <filename>contrib/tsearch2</> now contains
1297        a compatibility interface.
1298       </para>
1299      </listitem>
1300
1301      <listitem>
1302       <para>
1303        Add control over whether <literal>NULL</>s sort first or last (Teodor, Tom)
1304       </para>
1305
1306       <para>
1307        The syntax is <literal>ORDER BY ... NULLS FIRST/LAST</>.
1308       </para>
1309      </listitem>
1310
1311      <listitem>
1312       <para>
1313        Allow per-column ascending/descending (<literal>ASC</>/<literal>DESC</>)
1314        ordering options for indexes (Teodor, Tom)
1315       </para>
1316
1317       <para>
1318        Previously a query using <literal>ORDER BY</> with mixed
1319        <literal>ASC</>/<literal>DESC</> specifiers could not fully use
1320        an index. Now an index can be fully used in such cases if the
1321        index was created with matching
1322        <literal>ASC</>/<literal>DESC</> specifications.
1323        <literal>NULL</> sort order within an index can be controlled, too.
1324       </para>
1325      </listitem>
1326
1327      <listitem>
1328       <para>
1329        Allow <literal>col IS NULL</> to use an index (Teodor)
1330       </para>
1331      </listitem>
1332
1333      <listitem>
1334       <para>
1335        Updatable cursors (Arul Shaji, Tom)
1336       </para>
1337
1338       <para>
1339        This eliminates the need to reference a primary key to
1340        <command>UPDATE</> or <command>DELETE</> rows returned by a cursor.
1341        The syntax is <literal>UPDATE/DELETE WHERE CURRENT OF</>.
1342       </para>
1343      </listitem>
1344
1345      <listitem>
1346       <para>
1347        Allow <literal>FOR UPDATE</literal> in cursors (Arul Shaji, Tom)
1348       </para>
1349      </listitem>
1350
1351      <listitem>
1352       <para>
1353        Create a general mechanism that supports casts to and from the
1354        standard string types (<type>TEXT</type>, <type>VARCHAR</type>,
1355        <type>CHAR</type>) for <emphasis>every</emphasis> datatype, by
1356        invoking the datatype's I/O functions (Tom)
1357       </para>
1358
1359       <para>
1360        Previously, such casts were available only for types that had
1361        specialized function(s) for the purpose.
1362        These new casts are assignment-only in the to-string direction,
1363        explicit-only in the other direction, and therefore should create no
1364        surprising behavior.
1365       </para>
1366      </listitem>
1367
1368      <listitem>
1369       <para>
1370        Allow <literal>UNION</> and related constructs to return a domain
1371        type, when all inputs are of that domain type (Tom)
1372       </para>
1373
1374       <para>
1375        Formerly, the output would be considered to be of the domain's base
1376        type.
1377       </para>
1378      </listitem>
1379
1380      <listitem>
1381       <para>
1382        Allow limited hashing when using two different data types (Tom)
1383       </para>
1384
1385       <para>
1386        This allows hash joins, hash indexes, hashed subplans, and hash
1387        aggregation to be used in situations involving cross-data-type
1388        comparisons, if the data types have compatible hash functions.
1389        Currently, cross-data-type hashing support exists for
1390        <type>smallint</type>/<type>integer</type>/<type>bigint</type>,
1391        and for <type>float4</type>/<type>float8</type>.
1392       </para>
1393      </listitem>
1394
1395      <listitem>
1396       <para>
1397        Improve optimizer logic for detecting when variables are equal
1398        in a <literal>WHERE</> clause (Tom)
1399       </para>
1400
1401       <para>
1402        This allows mergejoins to work with descending sort orders, and
1403        improves recognition of redundant sort columns.
1404       </para>
1405      </listitem>
1406
1407      <listitem>
1408       <para>
1409        Improve performance when planning large inheritance trees in
1410        cases where most tables are excluded by constraints (Tom)
1411       </para>
1412      </listitem>
1413
1414     </itemizedlist>
1415
1416    </sect3>
1417
1418    <sect3>
1419     <title>Object Manipulation</title>
1420     <itemizedlist>
1421
1422      <listitem>
1423
1424       <para>
1425        Arrays of composite types (David Fetter, Andrew, Tom)
1426       </para>
1427
1428       <para>
1429        In addition to arrays of explicitly-declared composite types,
1430        arrays of the rowtypes of regular tables and views are now
1431        supported, except for rowtypes of system catalogs, sequences, and TOAST
1432        tables.
1433       </para>
1434
1435      </listitem>
1436
1437      <listitem>
1438       <para>
1439        Server configuration parameters can now be set on a per-function
1440        basis (Tom)
1441       </para>
1442
1443       <para>
1444        For example, functions can now set their own
1445        <varname>search_path</> to prevent unexpected behavior if a
1446        different <varname>search_path</> exists at run-time.  Security
1447        definer functions should set <varname>search_path</varname> to
1448        avoid security loopholes.
1449       </para>
1450      </listitem>
1451
1452      <listitem>
1453       <para>
1454        <command>CREATE/ALTER FUNCTION</command> now supports
1455        <literal>COST</literal> and <literal>ROWS</literal> options (Tom)
1456       </para>
1457
1458       <para>
1459        <literal>COST</literal> allows specification of the cost of a
1460        function call.  <literal>ROWS</literal> allows specification of
1461        the average number or rows returned by a set-returning function.
1462        These values are used by the optimizer in choosing the best plan.
1463       </para>
1464      </listitem>
1465
1466      <listitem>
1467       <para>
1468        Allow triggers and rules to be deactivated in groups using a
1469        configuration parameter, for replication purposes (Jan)
1470       </para>
1471
1472       <para>
1473        This allows replication systems to disable triggers and rewrite
1474        rules as a group without modifying the system catalogs directly.
1475        The behavior is controlled by <command>ALTER TABLE</> and a new
1476        parameter <varname>session_replication_role</varname>.
1477       </para>
1478      </listitem>
1479
1480      <listitem>
1481       <para>
1482        User-defined types can now have type modifiers (Teodor, Tom)
1483       </para>
1484
1485       <para>
1486        This allows a user-defined type to take a modifier, like
1487        <type>ssnum(7)</>.  Previously only built-in
1488        data types could have modifiers.
1489       </para>
1490      </listitem>
1491
1492     </itemizedlist>
1493
1494    </sect3>
1495
1496    <sect3>
1497     <title>Utility Commands</title>
1498     <itemizedlist>
1499
1500      <listitem>
1501       <para>
1502        Non-superuser database owners now are able to add trusted procedural
1503        languages to their databases by default (Jeremy Drake)
1504       </para>
1505
1506       <para>
1507        While this is reasonably safe, some administrators might wish to
1508        revoke the privilege. It is controlled by
1509        <structname>pg_pltemplate</>.<structfield>tmpldbacreate</>.
1510       </para>
1511      </listitem>
1512
1513      <listitem>
1514       <para>
1515        Allow a session's current parameter setting to be used as the
1516        default for future sessions (Tom)
1517       </para>
1518
1519       <para>
1520        This is done with <literal>SET ... FROM CURRENT</literal> in
1521        <command>CREATE/ALTER FUNCTION</command>, <command>ALTER
1522        DATABASE</command>, or <command>ALTER ROLE</command>.
1523       </para>
1524      </listitem>
1525
1526      <listitem>
1527       <para>
1528        Implement new commands <command>DISCARD ALL</command>,
1529        <command>DISCARD PLANS</command>, <command>DISCARD
1530        TEMPORARY</command>, <command>CLOSE ALL</command>, and
1531        <command>DEALLOCATE ALL</command> (Marko Kreen, Neil)
1532       </para>
1533
1534       <para>
1535        These commands simplify resetting a database session to its initial
1536        state, and are particularly useful for connection-pooling software.
1537       </para>
1538      </listitem>
1539
1540      <listitem>
1541       <para>
1542        Add <command>ALTER VIEW ... RENAME TO</command> and <command>ALTER
1543        SEQUENCE ... RENAME TO</command> (David Fetter, Neil)
1544       </para>
1545
1546       <para>
1547        Previously this could only be done via <command>ALTER TABLE ...
1548        RENAME TO</command>.
1549       </para>
1550      </listitem>
1551
1552      <listitem>
1553       <para>
1554        Implement <command>CREATE TABLE LIKE ...  INCLUDING
1555        INDEXES</command> (Trevor Hardcastle, Nikhil Sontakke, Neil)
1556       </para>
1557      </listitem>
1558
1559      <listitem>
1560       <para>
1561        Allow <command>CREATE INDEX CONCURRENTLY</command> to ignore
1562        transactions in other databases (Simon)
1563       </para>
1564      </listitem>
1565
1566      <listitem>
1567       <para>
1568        Make <command>CLUSTER</command> MVCC-safe (Heikki Linnakangas)
1569       </para>
1570
1571       <para>
1572        Formerly, <command>CLUSTER</command> would discard all tuples
1573        that were committed dead, even if there were still transactions
1574        that should be able to see them under MVCC visibility rules.
1575       </para>
1576      </listitem>
1577
1578      <listitem>
1579       <para>
1580        Add new <command>CLUSTER</command> syntax: <literal>CLUSTER
1581        <replaceable>table</> USING <replaceable>index</></literal>
1582        (Holger Schurig)
1583      </para>
1584
1585       <para>
1586        The old <command>CLUSTER</command> syntax is still supported, but
1587        the new form is considered more logical.
1588       </para>
1589      </listitem>
1590
1591      <listitem>
1592       <para>
1593        Fix <command>EXPLAIN</command> so it can show complex plans
1594        more accurately (Tom)
1595       </para>
1596
1597       <para>
1598        References to subplan outputs are now always shown correctly,
1599        instead of using <literal>?column<replaceable>N</>?</literal>
1600        for complicated cases.
1601       </para>
1602      </listitem>
1603
1604      <listitem>
1605       <para>
1606        Make <command>CREATE/DROP/RENAME DATABASE</> wait briefly for
1607        conflicting backends to exit before failing (Tom)
1608       </para>
1609
1610       <para>
1611        This increases the likelihood that these commands will succeed.
1612       </para>
1613      </listitem>
1614
1615      <listitem>
1616       <para>
1617        Limit the amount of information reported when a user is dropped
1618        (Alvaro)
1619       </para>
1620
1621       <para>
1622        Previously, dropping (or attempting to drop) a user who owned many
1623        objects could result in large <literal>NOTICE</literal> or
1624        <literal>ERROR</literal> messages listing all these objects; this
1625        caused problems for some client applications.  The length of the
1626        message is now limited, although a full list is still sent to the
1627        server log.
1628       </para>
1629      </listitem>
1630
1631     </itemizedlist>
1632
1633    </sect3>
1634
1635    <sect3>
1636     <title>Data Types</title>
1637     <itemizedlist>
1638
1639      <listitem>
1640       <para>
1641        Support for the SQL/XML standard, including new operators and an
1642        <type>XML</type> data type (Nikolay Samokhvalov, Pavel Stehule, Peter)
1643       </para>
1644      </listitem>
1645
1646      <listitem>
1647       <para>
1648        Enumerated data types (<type>ENUM</type>) (Tom Dunstan)
1649       </para>
1650
1651       <para>
1652        This feature provides convenient support for fields that have a
1653        small, fixed set of allowed values.  An example of creating an
1654        <literal>ENUM</> type is
1655        <literal>CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy')</>.
1656       </para>
1657      </listitem>
1658
1659      <listitem>
1660       <para>
1661        Universally Unique Identifier (<type>UUID</>) data type (Gevik
1662        Babakhani, Neil)
1663       </para>
1664
1665       <para>
1666        This closely matches <acronym>RFC</> 4122.
1667       </para>
1668      </listitem>
1669
1670      <listitem>
1671       <para>
1672        Widen the <type>MONEY</type> data type to 64 bits (D'Arcy Cain)
1673       </para>
1674
1675       <para>
1676        This greatly increases the range of supported <type>MONEY</>
1677        values.
1678       </para>
1679      </listitem>
1680
1681      <listitem>
1682       <para>
1683        Fix <type>float4</type>/<type>float8</type> to handle
1684        <literal>Infinity</> and <literal>NAN</> (Not A Number)
1685        consistently (Bruce)
1686       </para>
1687
1688       <para>
1689        The code formerly was not consistent about distinguishing
1690        <literal>Infinity</> from overflow conditions.
1691       </para>
1692      </listitem>
1693
1694      <listitem>
1695       <para>
1696        Allow leading and trailing whitespace during input of
1697        <type>boolean</type> values (Neil)
1698       </para>
1699      </listitem>
1700
1701      <listitem>
1702       <para>
1703        Prevent <command>COPY</> from using digits and lowercase letters as
1704        delimiters (Tom)
1705       </para>
1706      </listitem>
1707
1708     </itemizedlist>
1709
1710    </sect3>
1711
1712    <sect3>
1713     <title>Functions</title>
1714     <itemizedlist>
1715
1716      <listitem>
1717       <para>
1718        Add new regular expression functions
1719        <function>regexp_matches()</function>,
1720        <function>regexp_split_to_array()</function>, and
1721        <function>regexp_split_to_table()</function> (Jeremy Drake, Neil)
1722       </para>
1723
1724       <para>
1725        These functions provide extraction of regular expression
1726        subexpressions and allow splitting a string using a POSIX regular
1727        expression.
1728       </para>
1729      </listitem>
1730
1731      <listitem>
1732       <para>
1733        Add <function>lo_truncate()</function> for large object truncation
1734        (Kris Jurka)
1735       </para>
1736      </listitem>
1737
1738      <listitem>
1739       <para>
1740        Implement <function>width_bucket()</function> for the <type>float8</>
1741        data type (Neil)
1742       </para>
1743      </listitem>
1744
1745      <listitem>
1746       <para>
1747        Add <function>pg_stat_clear_snapshot()</function> to discard
1748        statistics snapshots collected during the current transaction
1749        (Tom)
1750       </para>
1751
1752       <para>
1753        The first request for statistics in a transaction takes a statistics
1754        snapshot that does not change during the transaction.  This function
1755        allows the snapshot to be discarded and a new snapshot loaded during
1756        the next statistics query. This is particularly useful for PL/PgSQL
1757        functions, which are confined to a single transaction.
1758       </para>
1759      </listitem>
1760
1761      <listitem>
1762       <para>
1763        Add <literal>isodow</> option to <function>EXTRACT()</> and
1764        <function>date_part()</> (Bruce)
1765       </para>
1766
1767       <para>
1768        This returns the day of the week, with Sunday as seven.
1769        (<literal>dow</> returns Sunday as zero.)
1770       </para>
1771      </listitem>
1772
1773      <listitem>
1774       <para>
1775        Add <literal>ID</> (ISO day of week) and <literal>IDDD</> (ISO
1776        day of year) format codes for <function>to_char()</>,
1777        <function>to_date()</>, and <function>to_timestamp()</> (Brendan
1778        Jurd)
1779       </para>
1780      </listitem>
1781
1782      <listitem>
1783       <para>
1784        Make <function>to_timestamp()</> and <function>to_date()</>
1785        assume <literal>TM</literal> (trim) option for potentially
1786        variable-width fields (Bruce)
1787       </para>
1788
1789       <para>
1790        This matches <productname>Oracle</>'s behavior.
1791       </para>
1792      </listitem>
1793
1794      <listitem>
1795       <para>
1796        Fix off-by-one conversion error in
1797        <function>to_date()</function>/<function>to_timestamp()</function>
1798        <literal>D</> (non-ISO day of week) fields (Bruce)
1799       </para>
1800      </listitem>
1801
1802      <listitem>
1803       <para>
1804        Make <function>setseed()</function> return void, rather than a
1805        useless integer value (Neil)
1806       </para>
1807      </listitem>
1808
1809      <listitem>
1810       <para>
1811        Add a hash function for <type>NUMERIC</type> (Neil)
1812       </para>
1813
1814       <para>
1815        This allows hash indexes and hash-based plans to be used with
1816        <type>NUMERIC</type> columns.
1817       </para>
1818      </listitem>
1819
1820      <listitem>
1821       <para>
1822        Improve efficiency of
1823        <literal>LIKE</literal>/<literal>ILIKE</literal>, especially for
1824        multi-byte character sets like UTF-8 (Andrew, Itagaki Takahiro)
1825       </para>
1826      </listitem>
1827
1828      <listitem>
1829       <para>
1830        Make <function>currtid()</function> functions require
1831        <literal>SELECT</literal> privileges on the target table (Tom)
1832       </para>
1833      </listitem>
1834
1835      <listitem>
1836       <para>
1837        Add several <function>txid_*()</function> functions to query
1838        active transaction IDs (Jan)
1839       </para>
1840
1841       <para>
1842        This is useful for various replication solutions.
1843       </para>
1844      </listitem>
1845
1846     </itemizedlist>
1847
1848    </sect3>
1849
1850    <sect3>
1851     <title>PL/PgSQL Server-Side Language</title>
1852     <itemizedlist>
1853
1854      <listitem>
1855       <para>
1856        Add scrollable cursor support, including directional control in
1857        <command>FETCH</command> (Pavel Stehule)
1858       </para>
1859      </listitem>
1860
1861      <listitem>
1862       <para>
1863        Allow <literal>IN</literal> as an alternative to
1864        <literal>FROM</literal> in PL/PgSQL's <command>FETCH</command>
1865        statement, for consistency with the backend's
1866        <command>FETCH</command> command (Pavel Stehule)
1867       </para>
1868      </listitem>
1869
1870      <listitem>
1871       <para>
1872        Add <command>MOVE</command> to PL/PgSQL (Magnus, Pavel Stehule,
1873        Neil)
1874       </para>
1875      </listitem>
1876
1877      <listitem>
1878       <para>
1879        Implement <command>RETURN QUERY</command> (Pavel Stehule, Neil)
1880       </para>
1881
1882       <para>
1883        This adds convenient syntax for PL/PgSQL set-returning functions
1884        that want to return the result of a query.  <command>RETURN QUERY</>
1885        is easier and more efficient than a loop
1886        around <command>RETURN NEXT</command>. 
1887       </para>
1888      </listitem>
1889
1890      <listitem>
1891       <para>
1892        Allow function parameter names to be qualified with the
1893        function's name (Tom)
1894       </para>
1895
1896       <para>
1897        For example, <literal>myfunc.myvar</>. This is particularly
1898        useful for specifying variables in a query where the variable
1899        name might match a column name.
1900       </para>
1901      </listitem>
1902
1903      <listitem>
1904       <para>
1905        Make qualification of variables with block labels work properly (Tom)
1906       </para>
1907
1908       <para>
1909        Formerly, outer-level block labels could unexpectedly interfere with
1910        recognition of inner-level record or row references.
1911       </para>
1912      </listitem>
1913
1914      <listitem>
1915       <para>
1916        Tighten requirements for <literal>FOR</literal> loop
1917        <literal>STEP</> values (Tom)
1918       </para>
1919
1920       <para>
1921        Prevent non-positive <literal>STEP</> values, and handle
1922        loop overflows.
1923       </para>
1924      </listitem>
1925
1926      <listitem>
1927       <para>
1928        Improve accuracy when reporting syntax error locations (Tom)
1929       </para>
1930      </listitem>
1931
1932     </itemizedlist>
1933
1934    </sect3>
1935
1936    <sect3>
1937     <title>Other Server-Side Languages</title>
1938     <itemizedlist>
1939
1940      <listitem>
1941       <para>
1942        Allow type-name arguments to PL/Perl
1943        <function>spi_prepare()</function> to be data type aliases in
1944        addition to names found in <literal>pg_type</literal> (Andrew)
1945       </para>
1946      </listitem>
1947
1948      <listitem>
1949       <para>
1950        Allow type-name arguments to PL/Python 
1951        <function>plpy.prepare()</function> to be data type aliases in
1952        addition to names found in <literal>pg_type</literal> (Andrew)
1953       </para>
1954      </listitem>
1955
1956      <listitem>
1957       <para>
1958        Allow type-name arguments to PL/Tcl <function>spi_prepare</> to 
1959        be data type aliases in addition to names found in
1960        <literal>pg_type</literal> (Andrew)
1961       </para>
1962      </listitem>
1963
1964      <listitem>
1965       <para>
1966        Enable PL/PythonU to compile on Python 2.5 (Marko Kreen)
1967       </para>
1968      </listitem>
1969
1970      <listitem>
1971       <para>
1972        Support a true PL/Python boolean type in compatible Python versions
1973        (Python 2.3 and later) (Marko Kreen)
1974       </para>
1975      </listitem>
1976
1977      <listitem>
1978       <para>
1979        Fix PL/Tcl problems with thread-enabled <filename>libtcl</> spawning
1980        multiple threads within the backend (Steve Marshall, Paul Bayer,
1981        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></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        In <literal>\d</literal> patterns, always match <literal>$</literal>
2007        literally (Tom)
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 status to the output of
2021        <literal>\df+</literal> (Neil)
2022       </para>
2023      </listitem>
2024
2025      <listitem>
2026       <para>
2027        Add <literal>\prompt</literal> capability (Chad Wagner)
2028       </para>
2029      </listitem>
2030
2031      <listitem>
2032       <para>
2033        Allow <literal>\pset</literal>, <literal>\t</literal>, and
2034        <literal>\x</literal> to specify <literal>on</> or <literal>off</>,
2035        rather than just toggling (Chad Wagner)
2036       </para>
2037      </listitem>
2038
2039      <listitem>
2040       <para>
2041        Add <literal>\sleep</> capability (Jan)
2042       </para>
2043      </listitem>
2044
2045      <listitem>
2046       <para>
2047        Enable <literal>\timing</> output for <literal>\copy</> (Andrew)
2048       </para>
2049      </listitem>
2050
2051      <listitem>
2052       <para>
2053        Improve <literal>\timing</literal> resolution on Windows
2054        (Itagaki Takahiro)
2055       </para>
2056      </listitem>
2057
2058      <listitem>
2059       <para>
2060        Flush <literal>\o</> output after each backslash command (Tom)
2061       </para>
2062      </listitem>
2063
2064      <listitem>
2065       <para>
2066        Correctly detect and report errors while reading a <literal>-f</>
2067        input file (Peter)
2068       </para>
2069      </listitem>
2070
2071      <listitem>
2072       <para>
2073        Remove <literal>-u</> option (this option has long been depricated)
2074        (Tom)
2075       </para>
2076      </listitem>
2077
2078     </itemizedlist>
2079
2080    </sect3>
2081
2082    <sect3>
2083     <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
2084     <itemizedlist>
2085
2086      <listitem>
2087       <para>
2088        Add <literal>--tablespaces-only</> and <literal>--roles-only</>
2089        options to <application>pg_dumpall</application> (Dave Page)
2090       </para>
2091      </listitem>
2092
2093      <listitem>
2094       <para>
2095        Add an output file option to
2096        <application>pg_dumpall</application> (Dave Page)
2097       </para>
2098
2099       <para>
2100        This is primarily useful on Windows, where output redirection of
2101        child <application>pg_dump</application> processes does not work.
2102       </para>
2103      </listitem>
2104
2105      <listitem>
2106       <para>
2107        Allow <application>pg_dumpall</> to accept an initial-connection
2108        database name rather than the default
2109        <literal>template1</literal> (Dave Page)
2110       </para>
2111      </listitem>
2112
2113      <listitem>
2114       <para>
2115        In <literal>-n</> and <literal>-t</> switches, always match
2116        <literal>$</literal> literally (Tom)
2117       </para>
2118      </listitem>
2119
2120      <listitem>
2121       <para>
2122        Improve performance when a database has thousands of objects (Tom)
2123       </para>
2124      </listitem>
2125
2126      <listitem>
2127       <para>
2128        Remove <literal>-u</> option (this option has long been depricated)
2129        (Tom)
2130       </para>
2131      </listitem>
2132
2133     </itemizedlist>
2134
2135    </sect3>
2136
2137    <sect3>
2138     <title>Other Client Applications</title>
2139     <itemizedlist>
2140
2141      <listitem>
2142       <para>
2143        In <application>initdb</>, allow the location of the
2144        <filename>pg_xlog</filename> directory to be specified
2145        (Euler Taveira de Oliveira)
2146       </para>
2147      </listitem>
2148
2149      <listitem>
2150       <para>
2151        Enable server core dump generation in <application>pg_regress</>
2152        on supported operating systems (Andrew)
2153       </para>
2154      </listitem>
2155
2156      <listitem>
2157       <para>
2158        Add a <literal>-t</> (timeout) parameter to <application>pg_ctl</>
2159        (Bruce)
2160       </para>
2161
2162       <para>
2163        This controls how long <application>pg_ctl</> will wait when waiting
2164        for server startup or shutdown.  Formerly the timeout was hard-wired
2165        as 60 seconds.
2166       </para>
2167      </listitem>
2168
2169      <listitem>
2170       <para>
2171        Add a <application>pg_ctl</> option to control generation
2172        of server core dumps (Andrew)
2173       </para>
2174      </listitem>
2175
2176      <listitem>
2177       <para>
2178        Allow Control-C to cancel <application>clusterdb</>,
2179        <application>reindexdb</>, and <application>vacuumdb</> (Itagaki
2180        Takahiro, Magnus)
2181       </para>
2182      </listitem>
2183
2184      <listitem>
2185       <para>
2186        Suppress command tag output for <application>createdb</>,
2187        <application>createuser</>, <application>dropdb</>, and
2188        <application>dropuser</> (Peter)
2189       </para>
2190
2191       <para>
2192        The <literal>--quiet</> option is ignored and will be removed in 8.4.
2193        Progress messages when acting on all databases now go to stdout
2194        instead of stderr because they are not actually errors.
2195       </para>
2196      </listitem>
2197
2198     </itemizedlist>
2199
2200    </sect3>
2201
2202    <sect3>
2203     <title><link linkend="libpq"><application>libpq</></link></title>
2204     <itemizedlist>
2205
2206      <listitem>
2207       <para>
2208        Interpret the <literal>dbName</> parameter of
2209        <function>PQsetdbLogin()</> as a <literal>conninfo</> string if
2210        it contains an equals sign (Andrew)
2211       </para>
2212
2213       <para>
2214        This allows use of <literal>conninfo</> strings in client
2215        programs that still use <literal>PQsetdbLogin()</>.
2216       </para>
2217      </listitem>
2218
2219      <listitem>
2220       <para>
2221        Support a global <acronym>SSL</> configuration file (Victor
2222        Wagner)
2223       </para>
2224      </listitem>
2225
2226      <listitem>
2227       <para>
2228        Add environment variable <varname>PGSSLKEY</> to control
2229        <acronym>SSL</> hardware keys (Victor Wagner)
2230       </para>
2231      </listitem>
2232
2233      <listitem>
2234       <para>
2235        Add <function>lo_truncate()</function> for large object
2236        truncation (Kris Jurka)
2237       </para>
2238      </listitem>
2239
2240      <listitem>
2241       <para>
2242        Add <function>PQconnectionNeedsPassword()</function> that returns
2243        true if the server required a password but none was supplied
2244        (Joe Conway, Tom)
2245       </para>
2246
2247       <para>
2248        If this returns true after a failed connection attempt, a client
2249        application should prompt the user for a password.  In the past
2250        applications have had to check for a specific error message string to
2251        decide whether a password is needed; that approach is now
2252        deprecated.
2253       </para>
2254      </listitem>
2255
2256      <listitem>
2257       <para>
2258        Add <function>PQconnectionUsedPassword()</function> that returns
2259        true if the supplied password was actually used
2260        (Joe Conway, Tom)
2261       </para>
2262
2263       <para>
2264        This is useful in some security contexts where it is important
2265        to know whether a user-supplied password is actually valid.
2266       </para>
2267      </listitem>
2268
2269     </itemizedlist>
2270
2271    </sect3>
2272
2273    <sect3>
2274     <title><link linkend="ecpg"><application>ecpg</></link></title>
2275     <itemizedlist>
2276
2277      <listitem>
2278       <para>
2279        Use V3 frontend/backend protocol (Michael)
2280       </para>
2281
2282       <para>
2283        This adds support for server-side prepared statements.
2284       </para>
2285      </listitem>
2286
2287      <listitem>
2288       <para>
2289        Use native threads, instead of pthreads, on Windows (Magnus)
2290       </para>
2291      </listitem>
2292
2293      <listitem>
2294       <para>
2295        Improve thread-safety of ecpglib (Itagaki Takahiro)
2296       </para>
2297      </listitem>
2298
2299      <listitem>
2300       <para>
2301        Make the ecpg libraries export only necessary API symbols (Michael)
2302       </para>
2303      </listitem>
2304
2305     </itemizedlist>
2306
2307    </sect3>
2308
2309    <sect3>
2310     <title><application>Windows</> Port</title>
2311     <itemizedlist>
2312
2313      <listitem>
2314       <para>
2315        Allow the whole <productname>PostgreSQL</> distribution to be compiled
2316        with <productname>Microsoft Visual C++</> (Magnus and others)
2317       </para>
2318
2319       <para>
2320        This allows Windows-based developers to use familiar development
2321        and debugging tools.
2322        Windows executables made with Visual C++ might also have better
2323        stability and performance than those made with other tool sets.
2324        The client-only Visual C++ build scripts have been removed.
2325       </para>
2326      </listitem>
2327
2328      <listitem>
2329       <para>
2330        Drastically reduce postmaster's memory usage when it has many child
2331        processes (Magnus)
2332       </para>
2333      </listitem>
2334
2335      <listitem>
2336       <para>
2337        Allow regression tests to be started by an administrative
2338        user (Magnus)
2339       </para>
2340      </listitem>
2341
2342      <listitem>
2343       <para>
2344        Add native shared memory implementation (Magnus)
2345       </para>
2346      </listitem>
2347
2348     </itemizedlist>
2349
2350    </sect3>
2351
2352    <sect3>
2353     <title>Server Programming Interface (<acronym>SPI</>)</title>
2354     <itemizedlist>
2355
2356      <listitem>
2357       <para>
2358        Add cursor-related functionality in SPI (Pavel Stehule)
2359       </para>
2360
2361       <para>
2362        Allow access to the cursor-related planning options, and add
2363        <command>FETCH</>/<command>MOVE</> routines.
2364       </para>
2365      </listitem>
2366
2367      <listitem>
2368       <para>
2369        Allow execution of cursor commands through
2370        <function>SPI_execute</function> (Tom)
2371       </para>
2372
2373       <para>
2374        The macro <literal>SPI_ERROR_CURSOR</> still exists but will
2375        never be returned.
2376       </para>
2377      </listitem>
2378
2379      <listitem>
2380       <para>
2381        SPI plan pointers are now declared as <literal>SPIPlanPtr</> instead of
2382        <literal>void *</> (Tom)
2383       </para>
2384
2385       <para>
2386        This does not break application code, but switching is
2387        recommended to help catch simple programming mistakes.
2388       </para>
2389      </listitem>
2390
2391     </itemizedlist>
2392
2393    </sect3>
2394
2395    <sect3>
2396     <title>Build Options</title>
2397     <itemizedlist>
2398
2399      <listitem>
2400       <para>
2401        Add <application>configure</> option <literal>--enable-profiling</>
2402        to enable code profiling (works only with <application>gcc</>)
2403        (Korry Douglas and Nikhil Sontakke)
2404       </para>
2405      </listitem>
2406
2407      <listitem>
2408       <para>
2409        Add <application>configure</> option <literal>--with-system-tzdata</>
2410        to use the operating system's time zone database (Peter)
2411       </para>
2412      </listitem>
2413
2414      <listitem>
2415       <para>
2416        Fix <acronym>PGXS</> so extensions can be built against PostgreSQL
2417        installations whose <application>pg_config</> program does not
2418        appear first in the <varname>PATH</> (Tom)
2419       </para>
2420      </listitem>
2421
2422      <listitem>
2423       <para>
2424        Support <command>gmake draft</command> when building the
2425        <acronym>SGML</> documentation (Bruce)
2426       </para>
2427
2428       <para>
2429        Unless <literal>draft</> is used, the documentation build will
2430        now be repeated if necessary to ensure the index is up-to-date.
2431       </para>
2432      </listitem>
2433
2434     </itemizedlist>
2435
2436    </sect3>
2437
2438    <sect3>
2439     <title>Source Code</title>
2440     <itemizedlist>
2441
2442      <listitem>
2443       <para>
2444        Rename macro <literal>DLLIMPORT</> to <literal>PGDLLIMPORT</> to
2445        avoid conflicting with third party includes (like Tcl) that
2446        define <literal>DLLIMPORT</> (Magnus)
2447       </para>
2448      </listitem>
2449
2450      <listitem>
2451       <para>
2452        Create <quote>operator families</quote> to improve planning of
2453        queries involving cross-data-type comparisons (Tom)
2454       </para>
2455      </listitem>
2456
2457      <listitem>
2458       <para>
2459        Update GIN <function>extractQuery()</> API to allow signalling
2460        that nothing can satisfy the query (Teodor)
2461       </para>
2462      </listitem>
2463
2464      <listitem>
2465       <para>
2466        Move <literal>NAMEDATALEN</> definition from
2467        <filename>postgres_ext.h</> to <filename>pg_config_manual.h</>
2468        (Peter)
2469       </para>
2470      </listitem>
2471
2472      <listitem>
2473       <para>
2474        Provide <function>strlcpy()</function> and
2475        <function>strlcat()</function> on all platforms, and replace
2476        error-prone uses of <function>strncpy()</function>,
2477        <function>strncat()</function>, etc (Peter)
2478       </para>
2479      </listitem>
2480
2481      <listitem>
2482       <para>
2483        Create hooks to let an external plugin monitor (or even replace) the
2484        planner and create plans for hypothetical situations (Gurjeet
2485        Singh, Tom)
2486       </para>
2487      </listitem>
2488
2489      <listitem>
2490       <para>
2491        Create a function variable <literal>join_search_hook</> to let plugins
2492        override the join search order portion of the planner (Julius
2493        Stroffek)
2494       </para>
2495      </listitem>
2496
2497      <listitem>
2498       <para>
2499        Add <function>tas()</> support for Renesas' M32R processor
2500        (Kazuhiro Inaoka)
2501       </para>
2502      </listitem>
2503
2504      <listitem>
2505       <para>
2506        <function>quote_identifier()</function> and
2507        <application>pg_dump</application> no longer quote keywords that are
2508        unreserved according to the grammar (Tom)
2509       </para>
2510      </listitem>
2511
2512      <listitem>
2513       <para>
2514        Change the on-disk representation of the <type>NUMERIC</type>
2515        data type so that the <structfield>sign_dscale</> word comes
2516        before the weight (Tom)
2517       </para>
2518      </listitem>
2519
2520      <listitem>
2521       <para>
2522        Use <acronym>SYSV</> semaphores rather than POSIX on Darwin
2523        &gt;= 6.0, i.e., OS X 10.2 and up (Chris Marcellino)
2524       </para>
2525      </listitem>
2526
2527      <listitem>
2528       <para>
2529        Add <link linkend="acronyms">acronym</link> and <link
2530        linkend="creating-cluster-nfs">NFS</link> documentation
2531        sections (Bruce)
2532       </para>
2533      </listitem>
2534
2535      <listitem>
2536       <para>
2537        "Postgres" is now documented as an accepted alias for
2538        "PostgreSQL" (Peter)
2539       </para>
2540      </listitem>
2541
2542      <listitem>
2543       <para>
2544        Add documentation about preventing database server spoofing when
2545        the server is down (Bruce
2546       </para>
2547      </listitem>
2548
2549     </itemizedlist>
2550
2551    </sect3>
2552
2553    <sect3>
2554     <title>Contrib</title>
2555     <itemizedlist>
2556
2557      <listitem>
2558       <para>
2559        Move <filename>contrib</> <filename>README</> content into the
2560        main <productname>PostgreSQL</> documentation (Albert Cervera i
2561        Areny)
2562       </para>
2563      </listitem>
2564
2565      <listitem>
2566       <para>
2567        Add <filename>contrib/pageinspect</filename> module for low-level
2568        page inspection (Simon, Heikki)
2569       </para>
2570      </listitem>
2571
2572      <listitem>
2573       <para>
2574        Add <filename>contrib/pg_standby</filename> module for controlling
2575        warm standby operation (Simon)
2576       </para>
2577      </listitem>
2578
2579      <listitem>
2580       <para>
2581        Add <filename>contrib/uuid-ossp</filename> module for generating
2582        <type>UUID</> values using the OSSP UUID library (Peter)
2583       </para>
2584
2585       <para>
2586        Use <application>configure</>
2587        <literal>--with-ossp-uuid</literal> to activate. This takes
2588        advantage of the new <type>UUID</type> builtin type.
2589       </para>
2590      </listitem>
2591
2592      <listitem>
2593       <para>
2594        Add <filename>contrib/dict_int</filename>,
2595        <filename>contrib/dict_xsyn</filename>, and
2596        <filename>contrib/test_parser</filename> modules to provide
2597        sample add-on text search dictionary templates and parsers
2598        (Sergey Karpov)
2599       </para>
2600      </listitem>
2601
2602      <listitem>
2603       <para>
2604        Allow <application>contrib/pgbench</> to set the fillfactor (Pavan
2605        Deolasee)
2606       </para>
2607      </listitem>
2608
2609      <listitem>
2610       <para>
2611        Add timestamps to <application>contrib/pgbench</> <literal>-l</>
2612        (Greg Smith)
2613       </para>
2614      </listitem>
2615
2616      <listitem>
2617       <para>
2618        Add usage count statistics to
2619        <filename>contrib/pgbuffercache</filename> (Greg Smith)
2620       </para>
2621      </listitem>
2622
2623      <listitem>
2624       <para>
2625        Add GIN support for <filename>contrib/hstore</> (Teodor)
2626       </para>
2627      </listitem>
2628
2629      <listitem>
2630       <para>
2631        Add GIN support for <filename>contrib/pg_trgm</> (Guillaume Smet, Teodor)
2632       </para>
2633      </listitem>
2634
2635      <listitem>
2636       <para>
2637        Update OS/X startup scripts in
2638        <filename>contrib/start-scripts</filename> (Mark Cotner, David
2639        Fetter)
2640       </para>
2641      </listitem>
2642
2643      <listitem>
2644       <para>
2645        Restrict <function>pgrowlocks()</function> and
2646        <function>dblink_get_pkey()</function> to users who have
2647        <literal>SELECT</literal> privilege on the target table (Tom)
2648       </para>
2649      </listitem>
2650
2651      <listitem>
2652       <para>
2653        Restrict <filename>contrib/pgstattuple</filename> functions to
2654        superusers (Tom)
2655       </para>
2656      </listitem>
2657
2658      <listitem>
2659       <para>
2660        <filename>contrib/xml2</filename> is deprecated and planned for
2661        removal in 8.4 (Peter)
2662       </para>
2663
2664       <para>
2665        The new XML support in core PostgreSQL supersedes this module.
2666       </para>
2667      </listitem>
2668
2669     </itemizedlist>
2670
2671    </sect3>
2672   </sect2>
2673  </sect1>
2674
2675  <sect1 id="release-8-2-5">
2676   <title>Release 8.2.5</title>
2677
2678   <note>
2679   <title>Release date</title>
2680   <simpara>2007-09-17</simpara>
2681   </note>
2682
2683   <para>
2684    This release contains a variety of fixes from 8.2.4.
2685   </para>
2686
2687   <sect2>
2688    <title>Migration to Version 8.2.5</title>
2689
2690    <para>
2691     A dump/restore is not required for those running 8.2.X.
2692    </para>
2693
2694   </sect2>
2695
2696   <sect2>
2697    <title>Changes</title>
2698
2699    <itemizedlist>
2700
2701     <listitem>
2702      <para>
2703       Prevent index corruption when a transaction inserts rows and
2704       then aborts close to the end of a concurrent <command>VACUUM</>
2705       on the same table (Tom)
2706      </para>
2707     </listitem>
2708
2709     <listitem>
2710      <para>
2711       Fix <literal>ALTER DOMAIN ADD CONSTRAINT</> for cases involving
2712       domains over domains (Tom)
2713      </para>
2714     </listitem>
2715
2716     <listitem>
2717      <para>
2718       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
2719      </para>
2720     </listitem>
2721
2722     <listitem>
2723      <para>
2724       Fix some planner problems with outer joins, notably poor
2725       size estimation for <literal>t1 LEFT JOIN t2 WHERE t2.col IS NULL</>
2726       (Tom)
2727      </para>
2728     </listitem>
2729
2730     <listitem>
2731      <para>
2732       Allow the <type>interval</> data type to accept input consisting only of
2733       milliseconds or microseconds (Neil)
2734      </para>
2735     </listitem>
2736
2737     <listitem>
2738      <para>
2739       Allow timezone name to appear before the year in <type>timestamp</> input (Tom)
2740      </para>
2741     </listitem>
2742
2743     <listitem>
2744      <para>
2745       Fixes for <acronym>GIN</> indexes used by <filename>/contrib/tsearch2</> (Teodor)
2746      </para>
2747     </listitem>
2748
2749     <listitem>
2750      <para>
2751       Speed up rtree index insertion (Teodor)
2752      </para>
2753     </listitem>
2754
2755     <listitem>
2756      <para>
2757       Fix excessive logging of <acronym>SSL</> error messages (Tom)
2758      </para>
2759     </listitem>
2760
2761     <listitem>
2762      <para>
2763       Fix logging so that log messages are never interleaved when using
2764       the syslogger process (Andrew)
2765      </para>
2766     </listitem>
2767
2768     <listitem>
2769      <para>
2770       Fix crash when <varname>log_min_error_statement</> logging runs out
2771       of memory (Tom)
2772      </para>
2773     </listitem>
2774
2775     <listitem>
2776      <para>
2777       Fix incorrect handling of some foreign-key corner cases (Tom)
2778      </para>
2779     </listitem>
2780
2781     <listitem>
2782      <para>
2783       Fix <function>stddev_pop(numeric)</> and <function>var_pop(numeric)</> (Tom)
2784      </para>
2785     </listitem>
2786
2787     <listitem>
2788      <para>
2789       Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
2790       due to attempting to process temporary tables of other sessions (Alvaro)
2791      </para>
2792     </listitem>
2793
2794     <listitem>
2795      <para>
2796       Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
2797      </para>
2798     </listitem>
2799
2800     <listitem>
2801      <para>
2802       Windows socket and semaphore improvements (Magnus)
2803      </para>
2804     </listitem>
2805
2806     <listitem>
2807      <para>
2808       Make <command>pg_ctl -w</> work properly in Windows service mode (Dave Page)
2809      </para>
2810     </listitem>
2811
2812     <listitem>
2813      <para>
2814       Fix memory allocation bug when using <application>MIT Kerberos</> on Windows (Magnus)
2815      </para>
2816     </listitem>
2817
2818     <listitem>
2819      <para>
2820       Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
2821       because of possible encoding mismatches (Tom)
2822      </para>
2823     </listitem>
2824
2825     <listitem>
2826      <para>
2827       Require non-superusers who use <filename>/contrib/dblink</> to use only
2828       password authentication, as a security measure (Joe)
2829      </para>
2830     </listitem>
2831
2832     <listitem>
2833      <para>
2834       Restrict <filename>/contrib/pgstattuple</> functions to superusers, for security reasons (Tom)
2835      </para>
2836     </listitem>
2837
2838     <listitem>
2839      <para>
2840       Do not let <filename>/contrib/intarray</> try to make its GIN opclass
2841       the default (this caused problems at dump/restore) (Tom)
2842      </para>
2843     </listitem>
2844
2845    </itemizedlist>
2846
2847   </sect2>
2848  </sect1>
2849
2850  <sect1 id="release-8-2-4">
2851   <title>Release 8.2.4</title>
2852
2853   <note>
2854   <title>Release date</title>
2855   <simpara>2007-04-23</simpara>
2856   </note>
2857
2858   <para>
2859    This release contains a variety of fixes from 8.2.3,
2860    including a security fix.
2861   </para>
2862
2863   <sect2>
2864    <title>Migration to Version 8.2.4</title>
2865
2866    <para>
2867     A dump/restore is not required for those running 8.2.X.
2868    </para>
2869
2870   </sect2>
2871
2872   <sect2>
2873    <title>Changes</title>
2874
2875    <itemizedlist>
2876
2877     <listitem>
2878      <para>
2879       Support explicit placement of the temporary-table schema within
2880       <varname>search_path</>, and disable searching it for functions
2881       and operators (Tom)
2882      </para>
2883
2884      <para>
2885       This is needed to allow a security-definer function to set a
2886       truly secure value of <varname>search_path</>.  Without it,
2887       an unprivileged SQL user can use temporary objects to execute code
2888       with the privileges of the security-definer function (CVE-2007-2138).
2889       See <command>CREATE FUNCTION</> for more information.
2890      </para>
2891     </listitem>
2892
2893     <listitem>
2894      <para>
2895       Fix <varname>shared_preload_libraries</> for Windows
2896       by forcing reload in each backend (Korry Douglas)
2897      </para>
2898     </listitem>
2899
2900     <listitem>
2901      <para>
2902       Fix <function>to_char()</> so it properly upper/lower cases localized day or month
2903       names (Pavel Stehule)
2904      </para>
2905     </listitem>
2906
2907     <listitem>
2908      <para>
2909       <filename>/contrib/tsearch2</> crash fixes (Teodor)
2910      </para>
2911     </listitem>
2912
2913     <listitem>
2914      <para>
2915       Require <command>COMMIT PREPARED</> to be executed in the same
2916       database as the transaction was prepared in (Heikki)
2917      </para>
2918     </listitem>
2919
2920     <listitem>
2921      <para>
2922       Allow <command>pg_dump</> to do binary backups larger than two gigabytes
2923       on Windows (Magnus)
2924      </para>
2925     </listitem>
2926
2927     <listitem>
2928      <para>
2929       New traditional (Taiwan) Chinese <acronym>FAQ</> (Zhou Daojing)
2930      </para>
2931     </listitem>
2932
2933     <listitem>
2934      <para>
2935       Prevent the statistics collector from writing to disk too frequently (Tom)
2936      </para>
2937     </listitem>
2938
2939     <listitem>
2940      <para>
2941       Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
2942       <command>UPDATE</> chains (Tom, Pavan Deolasee)
2943      </para>
2944     </listitem>
2945
2946     <listitem>
2947      <para>
2948       Fix bug in domains that use array types (Tom)
2949      </para>
2950     </listitem>
2951
2952     <listitem>
2953      <para>
2954       Fix <command>pg_dump</> so it can dump a serial column's sequence
2955       using <option>-t</> when not also dumping the owning table
2956       (Tom)
2957      </para>
2958     </listitem>
2959
2960     <listitem>
2961      <para>
2962       Planner fixes, including improving outer join and bitmap scan
2963       selection logic (Tom)
2964      </para>
2965     </listitem>
2966
2967     <listitem>
2968      <para>
2969       Fix possible wrong answers or crash when a PL/pgSQL function tries
2970       to <literal>RETURN</> from within an <literal>EXCEPTION</> block
2971       (Tom)
2972      </para>
2973     </listitem>
2974
2975     <listitem>
2976      <para>
2977       Fix PANIC during enlargement of a hash index (Tom)
2978      </para>
2979     </listitem>
2980
2981     <listitem>
2982      <para>
2983       Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
2984      </para>
2985     </listitem>
2986
2987    </itemizedlist>
2988
2989   </sect2>
2990  </sect1>
2991
2992  <sect1 id="release-8-2-3">
2993   <title>Release 8.2.3</title>
2994
2995   <note>
2996   <title>Release date</title>
2997   <simpara>2007-02-07</simpara>
2998   </note>
2999
3000   <para>
3001    This release contains two fixes from 8.2.2.
3002   </para>
3003
3004   <sect2>
3005    <title>Migration to Version 8.2.3</title>
3006
3007    <para>
3008     A dump/restore is not required for those running 8.2.X.
3009    </para>
3010
3011   </sect2>
3012
3013   <sect2>
3014    <title>Changes</title>
3015
3016    <itemizedlist>
3017
3018     <listitem>
3019      <para>
3020       Remove overly-restrictive check for type length in constraints and
3021       functional indexes(Tom)
3022      </para>
3023     </listitem>
3024
3025     <listitem>
3026      <para>
3027       Fix optimization so MIN/MAX in subqueries can again use indexes (Tom)
3028      </para>
3029     </listitem>
3030
3031    </itemizedlist>
3032
3033   </sect2>
3034  </sect1>
3035
3036  <sect1 id="release-8-2-2">
3037   <title>Release 8.2.2</title>
3038
3039   <note>
3040   <title>Release date</title>
3041   <simpara>2007-02-05</simpara>
3042   </note>
3043
3044   <para>
3045    This release contains a variety of fixes from 8.2.1, including
3046    a security fix.
3047   </para>
3048
3049   <sect2>
3050    <title>Migration to Version 8.2.2</title>
3051
3052    <para>
3053     A dump/restore is not required for those running 8.2.X.
3054    </para>
3055
3056   </sect2>
3057
3058   <sect2>
3059    <title>Changes</title>
3060
3061    <itemizedlist>
3062
3063     <listitem>
3064      <para>
3065       Remove security vulnerabilities that allowed connected users
3066       to read backend memory (Tom)
3067      </para>
3068
3069      <para>
3070       The vulnerabilities involve suppressing the normal check that a SQL
3071       function returns the data type it's declared to, and changing the
3072       data type of a table column (CVE-2007-0555, CVE-2007-0556).  These
3073       errors can easily be exploited to cause a backend crash, and in
3074       principle might be used to read database content that the user
3075       should not be able to access.
3076      </para>
3077     </listitem>
3078
3079     <listitem>
3080      <para>
3081       Fix not-so-rare-anymore bug wherein btree index page splits could fail
3082       due to choosing an infeasible split point (Heikki Linnakangas)
3083      </para>
3084     </listitem>
3085
3086     <listitem>
3087      <para>
3088       Fix Borland C compile scripts (L Bayuk)
3089      </para>
3090     </listitem>
3091
3092     <listitem>
3093      <para>
3094       Properly handle <function>to_char('CC')</> for years ending in
3095       <literal>00</> (Tom)
3096      </para>
3097
3098      <para>
3099       Year 2000 is in the twentieth century, not the twenty-first.
3100      </para>
3101     </listitem>
3102
3103     <listitem>
3104      <para>
3105       <filename>/contrib/tsearch2</> localization improvements (Tatsuo, Teodor)
3106      </para>
3107     </listitem>
3108
3109     <listitem>
3110      <para>
3111       Fix incorrect permission check in
3112       <literal>information_schema.key_column_usage</> view (Tom)
3113      </para>
3114  
3115      <para>
3116       The symptom is <quote>relation with OID nnnnn does not exist</> errors.
3117       To get this fix without using <command>initdb</>, use <command>CREATE OR
3118       REPLACE VIEW</> to install the corrected definition found in
3119       <filename>share/information_schema.sql</>.  Note you will need to do
3120       this in each database.
3121      </para>
3122     </listitem>
3123
3124     <listitem>
3125      <para>
3126       Improve <command>VACUUM</> performance for databases with many tables (Tom)
3127      </para>
3128     </listitem>
3129
3130     <listitem>
3131      <para>
3132       Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
3133      </para>
3134     </listitem>
3135
3136     <listitem>
3137      <para>
3138       Fix potentially incorrect results from index searches using
3139       <literal>ROW</> inequality conditions (Tom)
3140      </para>
3141     </listitem>
3142
3143     <listitem>
3144      <para>
3145       Tighten security of multi-byte character processing for UTF8 sequences
3146       over three bytes long (Tom)
3147      </para>
3148     </listitem>
3149
3150     <listitem>
3151      <para>
3152       Fix bogus <quote>permission denied</> failures occurring on Windows
3153       due to attempts to fsync already-deleted files (Magnus, Tom)
3154      </para>
3155     </listitem>
3156
3157     <listitem>
3158      <para>
3159       Fix bug that could cause the statistics collector
3160       to hang on Windows (Magnus)
3161      </para>
3162
3163      <para>
3164       This would in turn lead to autovacuum not working.
3165      </para>
3166     </listitem>
3167
3168     <listitem>
3169      <para>
3170       Fix possible crashes when an already-in-use PL/pgSQL function is
3171       updated (Tom)
3172      </para>
3173     </listitem>
3174
3175     <listitem>
3176      <para>
3177       Improve PL/pgSQL handling of domain types (Sergiy Vyshnevetskiy, Tom)
3178      </para>
3179     </listitem>
3180
3181     <listitem>
3182      <para>
3183       Fix possible errors in processing PL/pgSQL exception blocks (Tom)
3184      </para>
3185     </listitem>
3186
3187    </itemizedlist>
3188
3189   </sect2>
3190  </sect1>
3191
3192  <sect1 id="release-8-2-1">
3193   <title>Release 8.2.1</title>
3194
3195   <note>
3196   <title>Release date</title>
3197   <simpara>2007-01-08</simpara>
3198   </note>
3199
3200   <para>
3201    This release contains a variety of fixes from 8.2.
3202   </para>
3203
3204   <sect2>
3205    <title>Migration to Version 8.2.1</title>
3206
3207    <para>
3208     A dump/restore is not required for those running 8.2.
3209    </para>
3210
3211   </sect2>
3212
3213   <sect2>
3214    <title>Changes</title>
3215
3216    <itemizedlist>
3217
3218     <listitem>
3219      <para>
3220       Fix crash with <literal>SELECT</> ... <literal>LIMIT ALL</> (also
3221       <literal>LIMIT NULL</>) (Tom)
3222      </para>
3223     </listitem>
3224
3225     <listitem>
3226      <para>
3227       <filename>Several /contrib/tsearch2</> fixes (Teodor)
3228      </para>
3229     </listitem>
3230
3231     <listitem>
3232      <para>
3233       On Windows, make log messages coming from the operating system use
3234       <acronym>ASCII</> encoding (Hiroshi Saito)
3235      </para>
3236
3237      <para>
3238       This fixes a conversion problem when there is a mismatch between
3239       the encoding of the operating system and database server.
3240      </para>
3241     </listitem>
3242
3243     <listitem>
3244      <para>
3245       Fix Windows linking of <application>pg_dump</> using
3246       <filename>win32.mak</>
3247       (Hiroshi Saito)
3248      </para>
3249     </listitem>
3250
3251     <listitem>
3252      <para>
3253       Fix planner mistakes for outer join queries (Tom)
3254      </para>
3255     </listitem>
3256
3257     <listitem>
3258      <para>
3259       Fix several problems in queries involving sub-SELECTs (Tom)
3260      </para>
3261     </listitem>
3262
3263     <listitem>
3264      <para>
3265       Fix potential crash in SPI during subtransaction abort (Tom)
3266      </para>
3267
3268      <para>
3269       This affects all PL functions since they all use SPI.
3270      </para>
3271     </listitem>
3272
3273     <listitem>
3274      <para>
3275       Improve build speed of <acronym>PDF</> documentation (Peter)
3276      </para>
3277     </listitem>
3278
3279     <listitem>
3280      <para>
3281       Re-add <acronym>JST</> (Japan) timezone abbreviation (Tom)
3282      </para>
3283     </listitem>
3284
3285     <listitem>
3286      <para>
3287       Improve optimization decisions related to index scans (Tom)
3288      </para>
3289     </listitem>
3290
3291     <listitem>
3292      <para>
3293       Have <application>psql</> print multi-byte combining characters as
3294       before, rather than output as <literal>\u</> (Tom)
3295      </para>
3296     </listitem>
3297
3298     <listitem>
3299      <para>
3300       Improve index usage of regular expressions that use parentheses (Tom)
3301      </para>
3302
3303      <para>
3304       This improves <application>psql</> <literal>\d</> performance also.
3305      </para>
3306     </listitem>
3307
3308     <listitem>
3309      <para>
3310       Make <application>pg_dumpall</> assume that databases have public
3311       <literal>CONNECT</> privilege, when dumping from a pre-8.2 server (Tom)
3312      </para>
3313
3314      <para>
3315       This preserves the previous behavior that anyone can connect to a
3316       database if allowed by <filename>pg_hba.conf</>.
3317      </para>
3318     </listitem>
3319
3320    </itemizedlist>
3321
3322   </sect2>
3323  </sect1>
3324
3325  <sect1 id="release-8-2">
3326   <title>Release 8.2</title>
3327
3328   <note>
3329    <title>Release date</title>
3330    <simpara>2006-12-05</simpara>
3331   </note>
3332
3333   <sect2>
3334    <title>Overview</title>
3335
3336    <para>
3337     This release adds many functionality and performance improvements that
3338     were requested by users, including:
3339
3340    <itemizedlist>
3341
3342      <listitem>
3343       <para>
3344        Query language enhancements including <command>INSERT/UPDATE/DELETE
3345        RETURNING</command>, multirow <literal>VALUES</literal> lists, and
3346        optional target-table alias in
3347        <command>UPDATE</>/<command>DELETE</command>
3348       </para>
3349      </listitem>
3350
3351      <listitem>
3352       <para>
3353        Index creation without blocking concurrent
3354        <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
3355        operations
3356       </para>
3357      </listitem>
3358
3359      <listitem>
3360       <para>
3361        Many query optimization improvements, including support for
3362        reordering outer joins
3363       </para>
3364      </listitem>
3365
3366      <listitem>
3367       <para>
3368        Improved sorting performance with lower memory usage
3369       </para>
3370      </listitem>
3371
3372      <listitem>
3373       <para>
3374        More efficient locking with better concurrency
3375       </para>
3376      </listitem>
3377
3378      <listitem>
3379       <para>
3380        More efficient vacuuming
3381       </para>
3382      </listitem>
3383
3384      <listitem>
3385       <para>
3386        Easier administration of warm standby servers
3387       </para>
3388      </listitem>
3389
3390      <listitem>
3391       <para>
3392        New <literal>FILLFACTOR</literal> support for tables and indexes
3393       </para>
3394      </listitem>
3395
3396      <listitem>
3397       <para>
3398        Monitoring, logging, and performance tuning additions
3399       </para>
3400      </listitem>
3401
3402      <listitem>
3403       <para>
3404        More control over creating and dropping objects
3405       </para>
3406      </listitem>
3407
3408      <listitem>
3409       <para>
3410        Table inheritance relationships can be defined
3411        for and removed from pre-existing tables
3412       </para>
3413      </listitem>
3414
3415      <listitem>
3416       <para>
3417        <command>COPY TO</command> can copy the output of an arbitrary
3418        <command>SELECT</command> statement
3419       </para>
3420      </listitem>
3421
3422      <listitem>
3423       <para>
3424        Array improvements, including nulls in arrays
3425       </para>
3426      </listitem>
3427
3428      <listitem>
3429       <para>
3430        Aggregate-function improvements, including multiple-input
3431        aggregates and SQL:2003 statistical functions
3432       </para>
3433      </listitem>
3434
3435      <listitem>
3436       <para>
3437        Many <filename>contrib/</filename> improvements
3438       </para>
3439      </listitem>
3440
3441     </itemizedlist>
3442
3443    </para>
3444
3445   </sect2>
3446
3447   <sect2>
3448    <title>Migration to Version 8.2</title>
3449
3450    <para>
3451     A dump/restore using <application>pg_dump</application> is
3452     required for those wishing to migrate data from any previous
3453     release.
3454    </para>
3455
3456    <para>
3457     Observe the following incompatibilities:
3458    </para>
3459
3460    <itemizedlist>
3461
3462      <listitem>
3463       <para>
3464        Set <link
3465        linkend="guc-escape-string-warning"><varname>escape_string_warning</></link>
3466        to <literal>on</> by default (Bruce)
3467       </para>
3468
3469       <para>
3470        This issues a warning if backslash escapes are used in
3471        <link linkend="sql-syntax-strings">non-escape (non-<literal>E''</>)
3472        strings</link>.
3473       </para>
3474      </listitem>
3475
3476      <listitem>
3477       <para>
3478        Change the <link linkend="sql-syntax-row-constructors">row
3479        constructor syntax</link> (<literal>ROW(...)</>) so that
3480        list elements <literal>foo.*</> will be expanded to a list
3481        of their member fields, rather than creating a nested
3482        row type field as formerly (Tom)
3483       </para>
3484
3485       <para>
3486        The new behavior is substantially more useful since it
3487        allows, for example, triggers to check for data changes
3488        with <literal>IF row(new.*) IS DISTINCT FROM row(old.*)</>.
3489        The old behavior is still available by omitting <literal>.*</>.
3490       </para>
3491      </listitem>
3492
3493      <listitem>
3494       <para>
3495        Make <link linkend="row-wise-comparison">row comparisons</link>
3496        follow <acronym>SQL</> standard semantics and allow them
3497        to be used in index scans (Tom)
3498       </para>
3499
3500       <para>
3501        Previously, row = and &lt;&gt; comparisons followed the
3502        standard but &lt; &lt;= &gt; &gt;= did not.  A row comparison
3503        can now be used as an index constraint for a multicolumn
3504        index matching the row value.
3505       </para>
3506      </listitem>
3507
3508      <listitem>
3509       <para>
3510        Make <link linkend="functions-comparison">row <literal>IS <optional>NOT</> NULL</literal></link>
3511        tests follow <acronym>SQL</> standard semantics (Tom)
3512       </para>
3513
3514       <para>
3515        The former behavior conformed to the standard for simple cases
3516        with <literal>IS NULL</>, but <literal>IS NOT NULL</> would return
3517        true if any row field was non-null, whereas the standard says it
3518        should return true only when all fields are non-null.
3519       </para>
3520      </listitem>
3521
3522      <listitem>
3523       <para>
3524        Make <link linkend="SQL-SET-CONSTRAINTS"><command>SET
3525        CONSTRAINT</></link> affect only one constraint (Kris Jurka)
3526       </para>
3527
3528       <para>
3529        In previous releases, <command>SET CONSTRAINT</> modified
3530        all constraints with a matching name.  In this release,
3531        the schema search path is used to modify only the first
3532        matching constraint.  A schema specification is also
3533        supported.  This more nearly conforms to the SQL standard.
3534       </para>
3535      </listitem>
3536
3537      <listitem>
3538       <para>
3539        Remove <literal>RULE</> permission for tables, for security reasons
3540        (Tom)
3541       </para>
3542
3543       <para>
3544        As of this release, only a table's owner can create or modify
3545        rules for the table.  For backwards compatibility,
3546        <command>GRANT</>/<command>REVOKE RULE</> is still accepted,
3547        but it does nothing.
3548       </para>
3549      </listitem>
3550
3551      <listitem>
3552       <para>
3553        Array comparison improvements (Tom)
3554       </para>
3555
3556       <para>
3557        Now array dimensions are also compared.
3558       </para>
3559      </listitem>
3560
3561      <listitem>
3562       <para>
3563        Change <link linkend="functions-array">array concatenation</link>
3564        to match documented behavior (Tom)
3565       </para>
3566
3567       <para>
3568        This changes the previous behavior where concatenation
3569        would modify the array lower bound.
3570       </para>
3571      </listitem>
3572
3573      <listitem>
3574       <para>
3575        Make command-line options of <application>postmaster</>
3576        and <link linkend="app-postgres"><application>postgres</></link>
3577        identical (Peter)
3578       </para>
3579
3580       <para>
3581        This allows the postmaster to pass arguments to each backend
3582        without using <literal>-o</>.  Note that some options are now
3583        only available as long-form options, because there were conflicting
3584        single-letter options.
3585       </para>
3586      </listitem>
3587
3588      <listitem>
3589       <para>
3590        Deprecate use of <application>postmaster</> symbolic link (Peter)
3591       </para>
3592
3593       <para>
3594        <application>postmaster</> and <application>postgres</>
3595        commands now act identically, with the behavior determined
3596        by command-line options.  The <application>postmaster</> symbolic link is
3597        kept for compatibility, but is not really needed.
3598       </para>
3599      </listitem>
3600
3601      <listitem>
3602       <para>
3603        Change <link
3604        linkend="guc-log-duration"><varname>log_duration</></link>
3605        to output even if the query is not output (Tom)
3606       </para>
3607
3608       <para>
3609        In prior releases, <varname>log_duration</> only printed if
3610        the query appeared earlier in the log.
3611       </para>
3612      </listitem>
3613
3614      <listitem>
3615       <para>
3616        Make <link
3617        linkend="functions-formatting"><function>to_char(time)</></link>
3618        and <link
3619        linkend="functions-formatting"><function>to_char(interval)</></link>
3620        treat <literal>HH</> and <literal>HH12</> as 12-hour
3621        intervals
3622       </para>
3623
3624       <para>
3625        Most applications should use <literal>HH24</> unless they
3626        want a 12-hour display.
3627       </para>
3628      </listitem>
3629
3630      <listitem>
3631       <para>
3632        Zero unmasked bits in conversion from <link
3633        linkend="datatype-inet"><type>INET</></link> to <link
3634        linkend="datatype-inet"><type>CIDR</></link> (Tom)
3635       </para>
3636
3637       <para>
3638        This ensures that the converted value is actually valid for
3639        <type>CIDR</>.
3640       </para>
3641      </listitem>
3642
3643      <listitem>
3644       <para>
3645        Remove <varname>australian_timezones</> configuration variable
3646        (Joachim Wieland)
3647       </para>
3648
3649       <para>
3650        This variable has been superseded by a more general facility
3651        for configuring timezone abbreviations.
3652       </para>
3653      </listitem>
3654
3655      <listitem>
3656       <para>
3657        Improve cost estimation for nested-loop index scans (Tom)
3658       </para>
3659
3660       <para>
3661        This might eliminate the need to set unrealistically small
3662        values of <link
3663        linkend="guc-random-page-cost"><varname>random_page_cost</></link>.
3664        If you have been using a very small <varname>random_page_cost</>,
3665        please recheck your test cases.
3666       </para>
3667      </listitem>
3668
3669      <listitem>
3670       <para>
3671        Change behavior of <command>pg_dump</> <literal>-n</> and
3672        <literal>-t</> options.  (Greg Sabino Mullane)
3673       </para>
3674       <para>
3675        See the <command>pg_dump</> manual page for details.
3676       </para>
3677      </listitem>
3678
3679      <listitem>
3680       <para>
3681        Change <link linkend="libpq"><application>libpq</></link>
3682        <function>PQdsplen()</> to return a useful value (Martijn
3683        van Oosterhout)
3684       </para>
3685      </listitem>
3686
3687      <listitem>
3688       <para>
3689        Declare <link linkend="libpq"><application>libpq</></link>
3690        <function>PQgetssl()</> as returning <literal>void *</>,
3691        rather than <literal>SSL *</> (Martijn van Oosterhout)
3692       </para>
3693
3694       <para>
3695        This allows applications to use the function without including
3696        the OpenSSL headers.
3697       </para>
3698      </listitem>
3699
3700      <listitem>
3701       <para>
3702        C-language loadable modules must now include a
3703        <link linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
3704        macro call for version compatibility checking
3705        (Martijn van Oosterhout)
3706       </para>
3707      </listitem>
3708
3709      <listitem>
3710       <para>
3711        For security's sake, modules used by a PL/PerlU function are no
3712        longer available to PL/Perl functions (Andrew)
3713       </para>
3714       <note>
3715        <para>
3716         This also implies that data can no longer be shared between a PL/Perl
3717         function and a PL/PerlU function.
3718         Some Perl installations have not been compiled with the correct flags
3719         to allow multiple interpreters to exist within a single process.
3720         In this situation PL/Perl and PL/PerlU cannot both be used in a
3721         single backend. The solution is to get a Perl installation which
3722         supports multiple interpreters.
3723        </para>
3724       </note>
3725      </listitem>
3726
3727      <listitem>
3728       <para>
3729        In <filename>contrib/xml2/</>, rename <function>xml_valid()</> to
3730        <function>xml_is_well_formed()</> (Tom)
3731       </para>
3732
3733       <para>
3734        <function>xml_valid()</> will remain for backward compatibility,
3735        but its behavior will change to do schema checking in a future
3736        release.
3737       </para>
3738      </listitem>
3739
3740      <listitem>
3741       <para>
3742        Remove <filename>contrib/ora2pg/</>, now at <ulink
3743        url="http://www.samse.fr/GPL/ora2pg"></ulink>
3744       </para>
3745      </listitem>
3746
3747      <listitem>
3748       <para>
3749        Remove contrib modules that have been migrated to PgFoundry:
3750        <filename>adddepend</>, <filename>dbase</>, <filename>dbmirror</>,
3751        <filename>fulltextindex</>, <filename>mac</>, <filename>userlock</>
3752       </para>
3753      </listitem>
3754
3755      <listitem>
3756       <para>
3757        Remove abandoned contrib modules:
3758        <filename>mSQL-interface</>, <filename>tips</>
3759       </para>
3760      </listitem>
3761
3762      <listitem>
3763       <para>
3764        Remove <acronym>QNX</> and <acronym>BEOS</> ports (Bruce)
3765       </para>
3766
3767       <para>
3768        These ports no longer had active maintainers.
3769       </para>
3770      </listitem>
3771
3772    </itemizedlist>
3773   </sect2>
3774
3775   <sect2>
3776    <title>Changes</title>
3777
3778    <para>
3779     Below you will find a detailed account of the
3780     changes between <productname>PostgreSQL</productname> 8.2 and
3781     the previous major release.
3782    </para>
3783
3784    <sect3>
3785     <title>Performance Improvements</title>
3786     <itemizedlist>
3787
3788      <listitem>
3789       <para>
3790        Allow the planner to reorder <link linkend="queries-join">outer
3791        joins</link> in some circumstances (Tom)
3792       </para>
3793
3794       <para>
3795        In previous releases, outer joins would always be evaluated in
3796        the order written in the query. This change allows the
3797        query optimizer to consider reordering outer joins, in cases where
3798        it can determine that the join order can be changed without
3799        altering the meaning of the query.  This can make a
3800        considerable performance difference for queries involving
3801        multiple outer joins or mixed inner and outer joins.
3802       </para>
3803      </listitem>
3804
3805      <listitem>
3806       <para>
3807        Improve efficiency of <link
3808        linkend="functions-comparisons"><literal>IN</>
3809        (list-of-expressions)</link> clauses (Tom)
3810       </para>
3811      </listitem>
3812
3813      <listitem>
3814       <para>
3815        Improve sorting speed and reduce memory usage (Simon, Tom)
3816       </para>
3817      </listitem>
3818
3819      <listitem>
3820       <para>
3821        Improve subtransaction performance (Alvaro, Itagaki Takahiro,
3822        Tom)
3823       </para>
3824      </listitem>
3825
3826      <listitem>
3827       <para>
3828        Add <literal>FILLFACTOR</> to <link
3829        linkend="SQL-CREATETABLE">table</link> and <link
3830        linkend="SQL-CREATEINDEX">index</link> creation (ITAGAKI
3831        Takahiro)
3832       </para>
3833
3834       <para>
3835        This leaves extra free space in each table or index page,
3836        allowing improved performance as the database grows.  This
3837        is particularly valuable to maintain clustering.
3838       </para>
3839      </listitem>
3840
3841      <listitem>
3842       <para>
3843        Increase default values for <link
3844        linkend="guc-shared-buffers"><varname>shared_buffers</></link>
3845        and <link
3846        linkend="guc-max-fsm-pages"><varname>max_fsm_pages</></link>
3847        (Andrew)
3848       </para>
3849      </listitem>
3850
3851      <listitem>
3852       <para>
3853        Improve locking performance by breaking the lock manager tables into
3854        sections
3855        (Tom)
3856       </para>
3857
3858       <para>
3859        This allows locking to be more fine-grained, reducing
3860        contention.
3861       </para>
3862      </listitem>
3863
3864      <listitem>
3865       <para>
3866        Reduce locking requirements of sequential scans (Qingqing
3867        Zhou)
3868       </para>
3869      </listitem>
3870
3871      <listitem>
3872       <para>
3873        Reduce locking required for database creation and destruction
3874        (Tom)
3875       </para>
3876      </listitem>
3877
3878      <listitem>
3879       <para>
3880        Improve the optimizer's selectivity estimates for <link
3881        linkend="functions-like"><literal>LIKE</></link>, <link
3882        linkend="functions-like"><literal>ILIKE</></link>, and
3883        <link linkend="functions-posix-regexp">regular expression</link>
3884        operations (Tom)
3885       </para>
3886      </listitem>
3887
3888      <listitem>
3889       <para>
3890        Improve planning of joins to <link linkend="ddl-inherit">inherited
3891        tables</link> and <link linkend="queries-union"><literal>UNION
3892        ALL</></link> views (Tom)
3893       </para>
3894      </listitem>
3895
3896      <listitem>
3897       <para>
3898        Allow <link linkend="guc-constraint-exclusion">constraint
3899        exclusion</link> to be applied to <link
3900        linkend="ddl-inherit">inherited</link> <command>UPDATE</> and
3901        <command>DELETE</> queries (Tom)
3902       </para>
3903
3904       <para>
3905        <command>SELECT</> already honored constraint exclusion.
3906       </para>
3907      </listitem>
3908
3909      <listitem>
3910       <para>
3911        Improve planning of constant <literal>WHERE</> clauses, such as
3912        a condition that depends only on variables inherited from an
3913        outer query level (Tom)
3914       </para>
3915      </listitem>
3916
3917      <listitem>
3918       <para>
3919        Protocol-level unnamed prepared statements are re-planned
3920        for each set of <literal>BIND</> values (Tom)
3921       </para>
3922
3923       <para>
3924        This improves performance because the exact parameter values
3925        can be used in the plan.
3926       </para>
3927      </listitem>
3928
3929      <listitem>
3930       <para>
3931        Speed up vacuuming of B-Tree indexes (Heikki Linnakangas,
3932        Tom)
3933       </para>
3934      </listitem>
3935
3936      <listitem>
3937       <para>
3938        Avoid extra scan of tables without indexes during <link
3939        linkend="SQL-VACUUM"><command>VACUUM</></link> (Greg Stark)
3940       </para>
3941      </listitem>
3942
3943      <listitem>
3944       <para>
3945        Improve multicolumn <link linkend="GiST"><acronym>GiST</></link>
3946        indexing (Oleg, Teodor)
3947       </para>
3948      </listitem>
3949
3950      <listitem>
3951       <para>
3952        Remove dead index entries before B-Tree page split (Junji
3953        Teramoto)
3954       </para>
3955      </listitem>
3956
3957     </itemizedlist>
3958
3959    </sect3>
3960
3961    <sect3>
3962     <title>Server Changes</title>
3963     <itemizedlist>
3964
3965      <listitem>
3966       <para>
3967        Allow a forced switch to a new transaction log file (Simon, Tom)
3968       </para>
3969
3970       <para>
3971        This is valuable for keeping warm standby slave servers
3972        in sync with the master.  Transaction log file switching now also happens
3973        automatically during <link
3974        linkend="functions-admin"><function>pg_stop_backup()</></link>.
3975        This ensures that all
3976        transaction log files needed for recovery can be archived immediately.
3977       </para>
3978      </listitem>
3979
3980      <listitem>
3981       <para>
3982        Add <acronym>WAL</> informational functions (Simon)
3983       </para>
3984
3985       <para>
3986        Add functions for interrogating the current transaction log insertion
3987        point and determining <acronym>WAL</> filenames from the
3988        hex <acronym>WAL</> locations displayed by <link
3989        linkend="functions-admin"><function>pg_stop_backup()</></link>
3990        and related functions.
3991       </para>
3992      </listitem>
3993
3994      <listitem>
3995       <para>
3996        Improve recovery from a crash during <acronym>WAL</> replay (Simon)
3997       </para>
3998
3999       <para>
4000        The server now does periodic checkpoints during <acronym>WAL</>
4001        recovery, so if there is a crash, future <acronym>WAL</>
4002        recovery is shortened.  This also eliminates the need for
4003        warm standby servers to replay the entire log since the
4004        base backup if they crash.
4005       </para>
4006      </listitem>
4007
4008      <listitem>
4009       <para>
4010        Improve reliability of long-term <acronym>WAL</> replay
4011        (Heikki, Simon, Tom)
4012       </para>
4013
4014       <para>
4015        Formerly, trying to roll forward through more than 2 billion
4016        transactions would not work due to XID wraparound.  This meant
4017        warm standby servers had to be reloaded
4018        from fresh base backups periodically.
4019       </para>
4020      </listitem>
4021
4022      <listitem>
4023       <para>
4024        Add <link
4025        linkend="guc-archive-timeout"><varname>archive_timeout</></link>
4026        to force transaction log file switches at a given interval (Simon)
4027       </para>
4028
4029       <para>
4030        This enforces a maximum replication delay for warm standby servers.
4031       </para>
4032      </listitem>
4033
4034      <listitem>
4035       <para>
4036        Add native <link linkend="auth-ldap"><acronym>LDAP</></link>
4037        authentication (Magnus Hagander)
4038       </para>
4039
4040       <para>
4041        This is particularly useful for platforms that do not
4042        support <acronym>PAM</>, such as Windows.
4043       </para>
4044      </listitem>
4045
4046      <listitem>
4047       <para>
4048        Add <link linkend="sql-grant-description-objects"><literal>GRANT
4049        CONNECT ON DATABASE</></link> (Gevik Babakhani)
4050       </para>
4051
4052       <para>
4053        This gives SQL-level control over database access.  It works as
4054        an additional filter on top of the existing
4055        <link linkend="auth-pg-hba-conf"><filename>pg_hba.conf</></link>
4056        controls.
4057       </para>
4058      </listitem>
4059
4060      <listitem>
4061       <para>
4062        Add support for <link linkend="ssl-tcp"><acronym>SSL</>
4063        Certificate Revocation List</link> (<acronym>CRL</>) files
4064        (Libor Hoho&scaron;)
4065       </para>
4066
4067       <para>
4068        The server and <application>libpq</> both recognize <acronym>CRL</>
4069        files now.
4070       </para>
4071      </listitem>
4072
4073      <listitem>
4074       <para>
4075        <link linkend="GiST"><acronym>GiST</></link> indexes are
4076        now clusterable (Teodor)
4077       </para>
4078      </listitem>
4079
4080      <listitem>
4081       <para>
4082        Remove routine autovacuum server log entries (Bruce)
4083       </para>
4084
4085       <para>
4086        <link
4087        linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
4088        now shows autovacuum activity.
4089       </para>
4090      </listitem>
4091
4092      <listitem>
4093       <para>
4094        Track maximum XID age within individual tables, instead of whole databases (Alvaro)
4095       </para>
4096
4097       <para>
4098        This reduces the overhead involved in preventing transaction
4099        ID wraparound, by avoiding unnecessary VACUUMs.
4100       </para>
4101      </listitem>
4102
4103      <listitem>
4104       <para>
4105        Add last vacuum and analyze timestamp columns to the stats
4106        collector (Larry Rosenman)
4107       </para>
4108
4109       <para>
4110        These values now appear in the <link
4111        linkend="monitoring-stats-views-table"><literal>pg_stat_*_tables</></link>
4112        system views.
4113       </para>
4114      </listitem>
4115
4116      <listitem>
4117       <para>
4118        Improve performance of statistics monitoring, especially
4119        <varname>stats_command_string</>
4120        (Tom, Bruce)
4121       </para>
4122
4123       <para>
4124        This release enables <varname>stats_command_string</> by
4125        default, now that its overhead is minimal.  This means
4126        <link
4127        linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
4128        will now show all active queries by default.
4129       </para>
4130      </listitem>
4131
4132      <listitem>
4133       <para>
4134        Add a <literal>waiting</> column to <link
4135        linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
4136        (Tom)
4137       </para>
4138
4139       <para>
4140        This allows <structname>pg_stat_activity</> to show all the
4141        information included in the <application>ps</> display.
4142       </para>
4143      </listitem>
4144
4145      <listitem>
4146       <para>
4147        Add configuration parameter <link
4148        linkend="guc-update-process-title"><varname>update_process_title</></link>
4149        to control whether the <application>ps</> display is updated
4150        for every command (Bruce)
4151       </para>
4152
4153       <para>
4154        On platforms where it is expensive to update the <application>ps</>
4155        display, it might be worthwhile to turn this off and rely solely on
4156        <structname>pg_stat_activity</> for status information.
4157       </para>
4158      </listitem>
4159
4160      <listitem>
4161       <para>
4162        Allow units to be specified in configuration settings
4163        (Peter)
4164       </para>
4165
4166       <para>
4167        For example, you can now set <link
4168        linkend="guc-shared-buffers"><varname>shared_buffers</></link>
4169        to <literal>32MB</> rather than mentally converting sizes.
4170       </para>
4171      </listitem>
4172
4173      <listitem>
4174       <para>
4175        Add support for <link linkend="config-setting">include
4176        directives</link> in <filename>postgresql.conf</> (Joachim
4177        Wieland)
4178       </para>
4179      </listitem>
4180
4181      <listitem>
4182       <para>
4183        Improve logging of protocol-level prepare/bind/execute
4184        messages (Bruce, Tom)
4185       </para>
4186
4187       <para>
4188        Such logging now shows statement names, bind parameter
4189        values, and the text of the query being executed.  Also,
4190        the query text is properly included in logged error messages
4191        when enabled by <varname>log_min_error_statement</>.
4192       </para>
4193      </listitem>
4194
4195      <listitem>
4196       <para>
4197        Prevent <link
4198        linkend="guc-max-stack-depth"><varname>max_stack_depth</></link>
4199        from being set to unsafe values
4200       </para>
4201
4202       <para>
4203        On platforms where we can determine the actual kernel stack depth
4204        limit (which is most), make sure that the initial default value of
4205        <varname>max_stack_depth</> is safe, and reject attempts to set it
4206        to unsafely large values.
4207       </para>
4208      </listitem>
4209
4210      <listitem>
4211       <para>
4212        Enable highlighting of error location in query in more
4213        cases (Tom)
4214       </para>
4215
4216       <para>
4217        The server is now able to report a specific error location for
4218        some semantic errors (such as unrecognized column name), rather
4219        than just for basic syntax errors as before.
4220       </para>
4221      </listitem>
4222
4223      <listitem>
4224       <para>
4225        Fix <quote>failed to re-find parent key</> errors in
4226        <command>VACUUM</> (Tom)
4227       </para>
4228      </listitem>
4229
4230      <listitem>
4231       <para>
4232        Clean out <filename>pg_internal.init</> cache files during server
4233        restart (Simon)
4234       </para>
4235
4236       <para>
4237        This avoids a hazard that the cache files might contain stale
4238        data after PITR recovery.
4239       </para>
4240      </listitem>
4241
4242      <listitem>
4243       <para>
4244        Fix race condition for truncation of a large relation across a
4245        gigabyte boundary by <command>VACUUM</> (Tom)
4246       </para>
4247      </listitem>
4248
4249      <listitem>
4250       <para>
4251        Fix bug causing needless deadlock errors on row-level locks (Tom)
4252       </para>
4253      </listitem>
4254
4255      <listitem>
4256       <para>
4257        Fix bugs affecting multi-gigabyte hash indexes (Tom)
4258       </para>
4259      </listitem>
4260
4261      <listitem>
4262       <para>
4263        Each backend process is now its own process group leader (Tom)
4264       </para>
4265
4266       <para>
4267        This allows query cancel to abort subprocesses invoked from a
4268        backend or archive/recovery process.
4269       </para>
4270      </listitem>
4271
4272     </itemizedlist>
4273
4274    </sect3>
4275
4276    <sect3>
4277     <title>Query Changes</title>
4278     <itemizedlist>
4279
4280      <listitem>
4281       <para>
4282        Add <link linkend="SQL-INSERT"><command>INSERT</></link>/<link
4283        linkend="SQL-UPDATE"><command>UPDATE</></link>/<link
4284        linkend="SQL-DELETE"><command>DELETE</></link>
4285        <literal>RETURNING</> (Jonah Harris, Tom)
4286       </para>
4287
4288       <para>
4289        This allows these commands to return values, such as the
4290        computed serial key for a new row.  In the <command>UPDATE</>
4291        case, values from the updated version of the row are returned.
4292       </para>
4293      </listitem>
4294
4295      <listitem>
4296       <para>
4297        Add support for multiple-row <link
4298        linkend="queries-values"><literal>VALUES</></link> clauses,
4299        per SQL standard (Joe, Tom)
4300       </para>
4301
4302       <para>
4303        This allows <command>INSERT</> to insert multiple rows of
4304        constants, or queries to generate result sets using constants.
4305        For example, <literal>INSERT ...  VALUES (...), (...),
4306        ....</>, and <literal>SELECT * FROM (VALUES (...), (...),
4307        ....) AS alias(f1, ...)</>.
4308       </para>
4309      </listitem>
4310
4311      <listitem>
4312       <para>
4313        Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
4314        and <link linkend="SQL-DELETE"><command>DELETE</></link>
4315        to use an alias for the target table (Atsushi Ogawa)
4316       </para>
4317
4318       <para>
4319        The SQL standard does not permit an alias in these commands, but
4320        many database systems allow one anyway for notational convenience.
4321       </para>
4322      </listitem>
4323
4324      <listitem>
4325       <para>
4326        Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
4327        to set multiple columns with a list of values (Susanne
4328        Ebrecht)
4329       </para>
4330
4331       <para>
4332        This is basically a short-hand for assigning the columns
4333        and values in pairs.  The syntax is <literal>UPDATE tab
4334        SET (<replaceable>column</>, ...) = (<replaceable>val</>, ...)</>.
4335       </para>
4336      </listitem>
4337
4338      <listitem>
4339       <para>
4340        Make row comparisons work per standard (Tom)
4341       </para>
4342
4343       <para>
4344        The forms &lt;, &lt;=, &gt;, &gt;= now compare rows lexicographically,
4345        that is, compare the first elements, if equal compare the second
4346        elements, and so on.  Formerly they expanded to an AND condition
4347        across all the elements, which was neither standard nor very useful.
4348       </para>
4349      </listitem>
4350
4351      <listitem>
4352       <para>
4353        Add <link linkend="SQL-TRUNCATE"><literal>CASCADE</></link>
4354        option to <command>TRUNCATE</> (Joachim Wieland)
4355       </para>
4356
4357       <para>
4358        This causes <command>TRUNCATE</> to automatically include all tables
4359        that reference the specified table(s) via foreign keys.  While
4360        convenient, this is a dangerous tool &mdash; use with caution!
4361       </para>
4362      </listitem>
4363
4364      <listitem>
4365       <para>
4366        Support <literal>FOR UPDATE</> and <literal>FOR SHARE</>
4367        in the same <link linkend="SQL-INSERT"><literal>SELECT</></link>
4368        command (Tom)
4369       </para>
4370      </listitem>
4371
4372      <listitem>
4373       <para>
4374        Add <link linkend="functions-comparisons"><literal>IS NOT
4375        DISTINCT FROM</></link> (Pavel Stehule)
4376       </para>
4377
4378       <para>
4379        This operator is similar to equality (<literal>=</>), but
4380        evaluates to true when both left and right operands are
4381        <literal>NULL</>, and to false when just one is, rather than
4382        yielding <literal>NULL</> in these cases.
4383       </para>
4384      </listitem>
4385
4386      <listitem>
4387       <para>
4388        Improve the length output used by <link
4389        linkend="queries-union"><literal>UNION</></link>/<literal>INTERSECT</>/<literal>EXCEPT</>
4390        (Tom)
4391       </para>
4392
4393       <para>
4394        When all corresponding columns are of the same defined length, that
4395        length is used for the result, rather than a generic length.
4396       </para>
4397      </listitem>
4398
4399      <listitem>
4400       <para>
4401        Allow <link linkend="functions-like"><literal>ILIKE</></link>
4402        to work for multi-byte encodings (Tom)
4403       </para>
4404
4405       <para>
4406        Internally, <literal>ILIKE</> now calls <function>lower()</>
4407        and then uses <literal>LIKE</>.  Locale-specific regular
4408        expression patterns still do not work in these encodings.
4409       </para>
4410      </listitem>
4411
4412      <listitem>
4413       <para>
4414        Enable <link
4415        linkend="guc-standard-conforming-strings"><varname>standard_conforming_strings</></link>
4416        to be turned <literal>on</> (Kevin Grittner)
4417       </para>
4418
4419       <para>
4420        This allows backslash escaping in strings to be disabled,
4421        making <productname>PostgreSQL</> more
4422        standards-compliant.  The default is <literal>off</> for backwards
4423        compatibility, but future releases will default this to <literal>on</>.
4424       </para>
4425      </listitem>
4426
4427      <listitem>
4428       <para>
4429        Do not flatten subqueries that contain <literal>volatile</>
4430        functions in their target lists (Jaime Casanova)
4431       </para>
4432
4433       <para>
4434        This prevents surprising behavior due to multiple evaluation
4435        of a <literal>volatile</> function (such as <function>random()</>
4436        or <function>nextval()</>).  It might cause performance
4437        degradation in the presence of functions that are unnecessarily
4438        marked as <literal>volatile</>.
4439       </para>
4440      </listitem>
4441
4442      <listitem>
4443       <para>
4444        Add system views <link
4445        linkend="view-pg-prepared-statements"><literal>pg_prepared_statements</></link>
4446        and <link
4447        linkend="view-pg-cursors"><literal>pg_cursors</></link>
4448        to show prepared statements and open cursors (Joachim Wieland, Neil)
4449       </para>
4450
4451       <para>
4452        These are very useful in pooled connection setups.
4453       </para>
4454      </listitem>
4455
4456      <listitem>
4457       <para>
4458        Support portal parameters in <link
4459        linkend="SQL-EXPLAIN"><command>EXPLAIN</></link> and <link
4460        linkend="SQL-EXECUTE"><command>EXECUTE</></link> (Tom)
4461       </para>
4462
4463       <para>
4464        This allows, for example, <acronym>JDBC</> <literal>?</> parameters to
4465        work in these commands.
4466       </para>
4467      </listitem>
4468
4469      <listitem>
4470       <para>
4471        If <acronym>SQL</>-level <link
4472        linkend="SQL-PREPARE"><command>PREPARE</></link> parameters
4473        are unspecified, infer their types from the content of the
4474        query (Neil)
4475       </para>
4476
4477       <para>
4478        Protocol-level <command>PREPARE</> already did this.
4479       </para>
4480      </listitem>
4481
4482      <listitem>
4483       <para>
4484        Allow <literal>LIMIT</> and <literal>OFFSET</> to exceed
4485        two billion (Dhanaraj M)
4486       </para>
4487      </listitem>
4488
4489     </itemizedlist>
4490
4491    </sect3>
4492
4493    <sect3>
4494     <title>Object Manipulation Changes</title>
4495     <itemizedlist>
4496
4497      <listitem>
4498       <para>
4499        Add <literal>TABLESPACE</> clause to <link
4500        linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
4501        (Neil)
4502       </para>
4503
4504       <para>
4505        This allows a tablespace to be specified for the new table.
4506       </para>
4507      </listitem>
4508
4509      <listitem>
4510       <para>
4511        Add <literal>ON COMMIT</> clause to <link
4512        linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
4513        (Neil)
4514       </para>
4515
4516       <para>
4517        This allows temporary tables to be truncated or dropped on
4518        transaction commit.  The default behavior is for the table
4519        to remain until the session ends.
4520       </para>
4521      </listitem>
4522
4523      <listitem>
4524       <para>
4525        Add <literal>INCLUDING CONSTRAINTS</> to <link
4526        linkend="SQL-CREATETABLE"><command>CREATE TABLE LIKE</></link>
4527        (Greg Stark)
4528       </para>
4529
4530       <para>
4531        This allows easy copying of <literal>CHECK</> constraints to a new
4532        table.
4533       </para>
4534      </listitem>
4535
4536      <listitem>
4537       <para>
4538        Allow the creation of placeholder (shell) <link
4539        linkend="SQL-CREATETYPE">types</link> (Martijn van Oosterhout)
4540       </para>
4541
4542       <para>
4543        A shell type declaration creates a type name, without specifying
4544        any of the details of the type.  Making a shell type is useful
4545        because it allows cleaner declaration of the type's input/output
4546        functions, which must exist before the type can be defined <quote>for
4547        real</>.  The syntax is <command>CREATE TYPE <replaceable
4548        class="parameter">typename</replaceable></>.
4549       </para>
4550      </listitem>
4551
4552      <listitem>
4553       <para>
4554        <link linkend="SQL-CREATEAGGREGATE">Aggregate functions</link>
4555        now support multiple input parameters (Sergey Koposov, Tom)
4556       </para>
4557      </listitem>
4558
4559      <listitem>
4560       <para>
4561        Add new aggregate creation <link
4562        linkend="SQL-CREATEAGGREGATE">syntax</link> (Tom)
4563       </para>
4564
4565       <para>
4566        The new syntax is <command>CREATE AGGREGATE
4567        <replaceable>aggname</> (<replaceable>input_type</>)
4568        (<replaceable>parameter_list</>)</command>.  This more
4569        naturally supports the new multi-parameter aggregate
4570        functionality.  The previous syntax is still supported.
4571       </para>
4572      </listitem>
4573
4574      <listitem>
4575       <para>
4576        Add <link
4577        linkend="SQL-ALTERROLE"><command>ALTER ROLE PASSWORD NULL</></link>
4578        to remove a previously set role password (Peter)
4579       </para>
4580      </listitem>
4581
4582      <listitem>
4583       <para>
4584        Add <command>DROP</> object <literal>IF EXISTS</> for many
4585        object types (Andrew)
4586       </para>
4587
4588       <para>
4589        This allows <command>DROP</> operations on non-existent
4590        objects without generating an error.
4591       </para>
4592      </listitem>
4593
4594      <listitem>
4595       <para>
4596        Add <link linkend="SQL-DROP-OWNED"><literal>DROP OWNED</></link>
4597        to drop all objects owned by a role (Alvaro)
4598       </para>
4599      </listitem>
4600
4601      <listitem>
4602       <para>
4603        Add <link linkend="SQL-REASSIGN-OWNED"><literal>REASSIGN
4604        OWNED</></link> to reassign ownership of all objects owned
4605        by a role (Alvaro)
4606       </para>
4607
4608       <para>
4609        This, and <literal>DROP OWNED</> above, facilitate dropping
4610        roles.
4611       </para>
4612      </listitem>
4613
4614      <listitem>
4615       <para>
4616        Add <link linkend="SQL-GRANT"><command>GRANT ON SEQUENCE</></link>
4617        syntax (Bruce)
4618       </para>
4619
4620       <para>
4621        This was added for setting sequence-specific permissions.
4622        <literal>GRANT ON TABLE</> for sequences is still supported
4623        for backward compatibility.
4624       </para>
4625      </listitem>
4626
4627      <listitem>
4628       <para>
4629        Add <link linkend="SQL-GRANT"><literal>USAGE</></link>
4630        permission for sequences that allows only <function>currval()</>
4631        and <function>nextval()</>, not <function>setval()</>
4632        (Bruce)
4633       </para>
4634
4635       <para>
4636        <literal>USAGE</> permission allows more fine-grained
4637        control over sequence access.  Granting <literal>USAGE</>
4638        allows users to increment
4639        a sequence, but prevents them from setting the sequence to
4640        an arbitrary value using <function>setval()</>.
4641       </para>
4642      </listitem>
4643
4644      <listitem>
4645       <para>
4646        Add <link linkend="SQL-ALTERTABLE"><literal>ALTER TABLE
4647        [ NO ] INHERIT</></link> (Greg Stark)
4648       </para>
4649
4650       <para>
4651        This allows inheritance to be adjusted dynamically, rather than
4652        just at table creation and destruction.  This is very valuable
4653        when using inheritance to implement table partitioning.
4654       </para>
4655      </listitem>
4656
4657      <listitem>
4658       <para>
4659        Allow <link linkend="SQL-COMMENT">comments</link> on global
4660        objects to be stored globally (Kris Jurka)
4661       </para>
4662
4663       <para>
4664        Previously, comments attached to databases were stored in individual
4665        databases, making them ineffective, and there was no provision
4666        at all for comments on roles or tablespaces.  This change adds a new
4667        shared catalog <link
4668        linkend="catalog-pg-shdescription"><structname>pg_shdescription</structname></link>
4669        and stores comments on databases, roles, and tablespaces therein.
4670       </para>
4671      </listitem>
4672
4673     </itemizedlist>
4674
4675    </sect3>
4676
4677    <sect3>
4678     <title>Utility Command Changes</title>
4679     <itemizedlist>
4680
4681      <listitem>
4682       <para>
4683        Add option to allow indexes to be created without blocking
4684        concurrent writes to the table (Greg Stark, Tom)
4685       </para>
4686
4687       <para>
4688        The new syntax is <link linkend="SQL-CREATEINDEX"><command>CREATE
4689        INDEX CONCURRENTLY</></link>.  The default behavior is
4690        still to block table modification while a index is being
4691        created.
4692       </para>
4693      </listitem>
4694
4695      <listitem>
4696       <para>
4697        Provide <link linkend="functions-advisory-locks">advisory
4698        locking</link> functionality (Abhijit Menon-Sen, Tom)
4699       </para>
4700
4701       <para>
4702        This is a new locking API designed to replace what used to be
4703        in /contrib/userlock.  The userlock code is now on pgfoundry.
4704       </para>
4705      </listitem>
4706
4707      <listitem>
4708       <para>
4709        Allow <link linkend="SQL-COPY"><command>COPY</></link> to
4710        dump a <command>SELECT</> query (Zoltan Boszormenyi, Karel
4711        Zak)
4712       </para>
4713
4714       <para>
4715        This allows <command>COPY</> to dump arbitrary <acronym>SQL</>
4716        queries. The syntax is <literal>COPY (SELECT ...) TO</>.
4717       </para>
4718      </listitem>
4719
4720      <listitem>
4721       <para>
4722        Make the <link linkend="SQL-COPY"><command>COPY</></link>
4723        command return a command tag that includes the number of
4724        rows copied (Volkan YAZICI)
4725       </para>
4726      </listitem>
4727
4728      <listitem>
4729       <para>
4730        Allow <link linkend="SQL-VACUUM"><command>VACUUM</></link>
4731        to expire rows without being affected by other concurrent
4732        <command>VACUUM</> operations (Hannu Krossing, Alvaro, Tom)
4733       </para>
4734      </listitem>
4735
4736      <listitem>
4737       <para>
4738        Make <link linkend="APP-INITDB"><application>initdb</></link>
4739        detect the operating system locale and set the default
4740        <varname>DateStyle</> accordingly (Peter)
4741       </para>
4742
4743       <para>
4744        This makes it more likely that the installed
4745        <filename>postgresql.conf</> <varname>DateStyle</> value will
4746        be as desired.
4747       </para>
4748      </listitem>
4749
4750      <listitem>
4751       <para>
4752        Reduce number of progress messages displayed by <application>initdb</> (Tom)
4753       </para>
4754      </listitem>
4755
4756     </itemizedlist>
4757
4758    </sect3>
4759
4760    <sect3>
4761     <title>Date/Time Changes</title>
4762     <itemizedlist>
4763
4764      <listitem>
4765       <para>
4766        Allow full timezone names in <link
4767        linkend="datatype-datetime"><type>timestamp</></link> input values
4768        (Joachim Wieland)
4769       </para>
4770
4771       <para>
4772        For example, <literal>'2006-05-24 21:11
4773        America/New_York'::timestamptz</>.
4774       </para>
4775      </listitem>
4776
4777      <listitem>
4778       <para>
4779        Support configurable timezone abbreviations (Joachim Wieland)
4780       </para>
4781
4782       <para>
4783        A desired set of timezone abbreviations can be chosen via the
4784        configuration parameter <link
4785        linkend="guc-timezone-abbreviations"><varname>timezone_abbreviations</></link>.
4786       </para>
4787      </listitem>
4788
4789      <listitem>
4790       <para>
4791        Add <link
4792        linkend="view-pg-timezone-abbrevs"><varname>pg_timezone_abbrevs</></link>
4793        and <link
4794        linkend="view-pg-timezone-names"><varname>pg_timezone_names</></link>
4795        views to show supported timezones (Magnus Hagander)
4796       </para>
4797      </listitem>
4798
4799      <listitem>
4800       <para>
4801        Add <link
4802        linkend="functions-datetime-table"><function>clock_timestamp()</></link>,
4803        <link
4804        linkend="functions-datetime-table"><function>statement_timestamp()</></link>,
4805        and <link
4806        linkend="functions-datetime-table"><function>transaction_timestamp()</></link>
4807        (Bruce)
4808       </para>
4809
4810       <para>
4811        <function>clock_timestamp()</> is the current wall-clock time,
4812        <function>statement_timestamp()</> is the time the current
4813        statement arrived at the server, and
4814        <function>transaction_timestamp()</> is an alias for
4815        <function>now()</>.
4816       </para>
4817      </listitem>
4818
4819      <listitem>
4820       <para>
4821        Allow <link
4822        linkend="functions-formatting"><function>to_char()</></link>
4823        to print localized month and day names (Euler Taveira de
4824        Oliveira)
4825       </para>
4826      </listitem>
4827
4828      <listitem>
4829       <para>
4830        Allow <link
4831        linkend="functions-formatting"><function>to_char(time)</></link>
4832        and <link
4833        linkend="functions-formatting"><function>to_char(interval)</></link>
4834        to output <acronym>AM</>/<acronym>PM</> specifications
4835        (Bruce)
4836       </para>
4837
4838       <para>
4839        Intervals and times are treated as 24-hour periods, e.g.
4840        <literal>25 hours</> is considered <acronym>AM</>.
4841       </para>
4842      </listitem>
4843
4844      <listitem>
4845       <para>
4846        Add new function <link
4847        linkend="functions-datetime-table"><function>justify_interval()</></link>
4848        to adjust interval units (Mark Dilger)
4849       </para>
4850      </listitem>
4851
4852      <listitem>
4853       <para>
4854        Allow timezone offsets up to 14:59 away from GMT
4855       </para>
4856
4857       <para>
4858        Kiribati uses GMT+14, so we'd better accept that.
4859       </para>
4860      </listitem>
4861
4862      <listitem>
4863       <para>
4864        Interval computation improvements (Michael Glaesemann, Bruce)
4865       </para>
4866      </listitem>
4867
4868     </itemizedlist>
4869
4870    </sect3>
4871
4872    <sect3>
4873     <title>Other Data Type and Function Changes</title>
4874     <itemizedlist>
4875
4876      <listitem>
4877       <para>
4878        Allow arrays to contain <literal>NULL</> elements (Tom)
4879       </para>
4880      </listitem>
4881
4882      <listitem>
4883       <para>
4884        Allow assignment to array elements not contiguous with the existing
4885        entries (Tom)
4886       </para>
4887
4888       <para>
4889        The intervening array positions will be filled with nulls.
4890        This is per SQL standard.
4891       </para>
4892      </listitem>
4893
4894      <listitem>
4895       <para>
4896        New built-in <link linkend="functions-array">operators</link>
4897        for array-subset comparisons (<literal>@&gt;</>,
4898        <literal>&lt;@</>, <literal>&amp;&amp;</>) (Teodor, Tom)
4899       </para>
4900
4901       <para>
4902        These operators can be indexed for many data types using
4903        <acronym>GiST</> or <acronym>GIN</> indexes.
4904       </para>
4905      </listitem>
4906
4907      <listitem>
4908       <para>
4909        Add convenient arithmetic <link
4910        linkend="cidr-inet-operators-table">operations</link> on
4911        <type>INET</>/<type>CIDR</> values (Stephen R. van den
4912        Berg)
4913       </para>
4914
4915       <para>
4916        The new operators are <literal>&amp;</> (and), <literal>|</>
4917        (or), <literal>~</> (not), <type>inet</> <literal>+</> <type>int8</>,
4918        <type>inet</> <literal>-</> <type>int8</>, and
4919        <type>inet</> <literal>-</> <type>inet</>.
4920       </para>
4921      </listitem>
4922
4923      <listitem>
4924       <para>
4925        Add new <link
4926        linkend="functions-aggregate-statistics-table">aggregate functions</link>
4927        from SQL:2003 (Neil)
4928       </para>
4929
4930       <para>
4931        The new functions are <function>var_pop()</>,
4932        <function>var_samp()</>, <function>stddev_pop()</>, and
4933        <function>stddev_samp()</>.  <function>var_samp()</> and
4934        <function>stddev_samp()</> are merely renamings of the
4935        existing aggregates <function>variance()</> and
4936        <function>stddev()</>.  The latter names remain available
4937        for backward compatibility.
4938       </para>
4939      </listitem>
4940
4941      <listitem>
4942       <para>
4943        Add SQL:2003 statistical <link
4944        linkend="functions-aggregate-statistics-table">aggregates</link>
4945        (Sergey Koposov)
4946       </para>
4947
4948       <para>
4949        New functions:  <function>regr_intercept()</>,
4950        <function>regr_slope()</>, <function>regr_r2()</>,
4951        <function>corr()</>, <function>covar_samp()</>,
4952        <function>covar_pop()</>, <function>regr_avgx()</>,
4953        <function>regr_avgy()</>, <function>regr_sxy()</>,
4954        <function>regr_sxx()</>, <function>regr_syy()</>,
4955        <function>regr_count()</>.
4956       </para>
4957      </listitem>
4958
4959      <listitem>
4960       <para>
4961        Allow <link linkend="SQL-CREATEDOMAIN">domains</link> to be
4962        based on other domains (Tom)
4963       </para>
4964      </listitem>
4965
4966      <listitem>
4967       <para>
4968        Properly enforce domain <link
4969        linkend="ddl-constraints"><literal>CHECK</></link> constraints
4970        everywhere (Neil, Tom)
4971       </para>
4972
4973       <para>
4974        For example, the result of a user-defined function that is
4975        declared to return a domain type is now checked against the
4976        domain's constraints. This closes a significant hole in the domain
4977        implementation.
4978       </para>
4979      </listitem>
4980
4981      <listitem>
4982       <para>
4983        Fix problems with dumping renamed <link
4984        linkend="datatype-serial"><type>SERIAL</></link> columns
4985        (Tom)
4986       </para>
4987
4988       <para>
4989        The fix is to dump a <type>SERIAL</> column by explicitly
4990        specifying its <literal>DEFAULT</> and sequence elements,
4991        and reconstructing the <type>SERIAL</> column on reload
4992        using a new <link linkend="SQL-ALTERSEQUENCE"><command>ALTER
4993        SEQUENCE OWNED BY</></link> command.  This also allows
4994        dropping a <type>SERIAL</> column specification.
4995       </para>
4996      </listitem>
4997
4998      <listitem>
4999       <para>
5000        Add a server-side sleep function <link
5001        linkend="functions-datetime-delay"><function>pg_sleep()</></link>
5002        (Joachim Wieland)
5003       </para>
5004      </listitem>
5005
5006      <listitem>
5007       <para>
5008        Add all comparison operators for the <link
5009        linkend="datatype-oid"><type>tid</></link> (tuple id) data
5010        type (Mark Kirkwood, Greg Stark, Tom)
5011       </para>
5012      </listitem>
5013
5014     </itemizedlist>
5015
5016    </sect3>
5017
5018    <sect3>
5019     <title>PL/PgSQL Server-Side Language Changes</title>
5020     <itemizedlist>
5021
5022      <listitem>
5023       <para>
5024        Add <literal>TG_table_name</> and <literal>TG_table_schema</> to
5025        trigger parameters (Andrew)
5026       </para>
5027
5028       <para>
5029        <literal>TG_relname</> is now deprecated.  Comparable
5030        changes have been made in the trigger parameters for the other
5031        PLs as well.
5032       </para>
5033      </listitem>
5034
5035      <listitem>
5036       <para>
5037        Allow <literal>FOR</> statements to return values to scalars
5038        as well as records and row types (Pavel Stehule)
5039       </para>
5040      </listitem>
5041
5042      <listitem>
5043       <para>
5044        Add a <literal>BY</> clause to the <literal>FOR</> loop,
5045        to control the iteration increment (Jaime Casanova)
5046       </para>
5047      </listitem>
5048
5049      <listitem>
5050       <para>
5051        Add <literal>STRICT</> to <link
5052        linkend="plpgsql-statements-sql-onerow"><command>SELECT
5053        INTO</></link> (Matt Miller)
5054       </para>
5055
5056       <para>
5057        <literal>STRICT</> mode throws an exception if more or less
5058        than one row is returned by the <command>SELECT</>, for
5059        <productname>Oracle PL/SQL</> compatibility.
5060       </para>
5061      </listitem>
5062
5063     </itemizedlist>
5064
5065    </sect3>
5066
5067    <sect3>
5068     <title>PL/Perl Server-Side Language Changes</title>
5069     <itemizedlist>
5070
5071      <listitem>
5072       <para>
5073        Add <literal>table_name</> and <literal>table_schema</> to
5074        trigger parameters (Adam Sj&oslash;gren)
5075       </para>
5076      </listitem>
5077
5078      <listitem>
5079       <para>
5080        Add prepared queries (Dmitry Karasik)
5081       </para>
5082      </listitem>
5083
5084      <listitem>
5085       <para>
5086        Make <literal>$_TD</> trigger data a global variable (Andrew)
5087       </para>
5088
5089       <para>
5090        Previously, it was lexical, which caused unexpected sharing
5091        violations.
5092       </para>
5093      </listitem>
5094
5095      <listitem>
5096       <para>
5097        Run PL/Perl and PL/PerlU in separate interpreters, for security
5098        reasons (Andrew)
5099       </para>
5100       <para>
5101        In consequence, they can no longer share data nor loaded modules.
5102        Also, if Perl has not been compiled with the requisite flags to
5103        allow multiple interpreters, only one of these languages can be used
5104        in any given backend process.
5105       </para>
5106      </listitem>
5107
5108     </itemizedlist>
5109
5110    </sect3>
5111
5112    <sect3>
5113     <title>PL/Python Server-Side Language Changes</title>
5114     <itemizedlist>
5115
5116      <listitem>
5117       <para>
5118        Named parameters are passed as ordinary variables, as well as in the
5119        <literal>args[]</> array (Sven Suursoho)
5120       </para>
5121      </listitem>
5122
5123      <listitem>
5124       <para>
5125        Add <literal>table_name</> and <literal>table_schema</> to
5126        trigger parameters (Andrew)
5127       </para>
5128      </listitem>
5129
5130      <listitem>
5131       <para>
5132        Allow returning of composite types and result sets (Sven Suursoho)
5133       </para>
5134      </listitem>
5135
5136      <listitem>
5137       <para>
5138        Return result-set as <literal>list</>, <literal>iterator</>,
5139        or <literal>generator </>(Sven Suursoho)
5140       </para>
5141      </listitem>
5142
5143      <listitem>
5144       <para>
5145        Allow functions to return <literal>void</> (Neil)
5146       </para>
5147      </listitem>
5148
5149      <listitem>
5150       <para>
5151        Python 2.5 is now supported (Tom)
5152       </para>
5153      </listitem>
5154
5155     </itemizedlist>
5156
5157    </sect3>
5158
5159    <sect3>
5160     <title><link linkend="APP-PSQL"><application>psql</></link> Changes</title>
5161     <itemizedlist>
5162
5163      <listitem>
5164       <para>
5165        Add new command <literal>\password</> for changing role
5166        password with client-side password encryption (Peter)
5167       </para>
5168      </listitem>
5169
5170      <listitem>
5171       <para>
5172        Allow <literal>\c</> to connect to a new host and port
5173        number (David, Volkan YAZICI)
5174       </para>
5175      </listitem>
5176
5177      <listitem>
5178       <para>
5179        Add tablespace display to <literal>\l+</> (Philip Yarra)
5180       </para>
5181      </listitem>
5182
5183      <listitem>
5184       <para>
5185        Improve <literal>\df</> slash command to include the argument
5186        names and modes (<literal>OUT</> or <literal>INOUT</>) of
5187        the function (David Fetter)
5188       </para>
5189      </listitem>
5190
5191      <listitem>
5192       <para>
5193        Support binary <command>COPY</> (Andreas Pflug)
5194       </para>
5195      </listitem>
5196
5197      <listitem>
5198       <para>
5199        Add option to run the entire session in a single transaction
5200        (Simon)
5201       </para>
5202
5203       <para>
5204        Use option <literal>-1</> or <literal>--single-transaction</>.
5205       </para>
5206      </listitem>
5207
5208      <listitem>
5209       <para>
5210        Support for automatically retrieving <command>SELECT</>
5211        results in batches using a cursor (Chris Mair)
5212       </para>
5213
5214       <para>
5215        This is enabled using <command>\set FETCH_COUNT
5216        <replaceable>n</></command>. This
5217        feature allows large result sets to be retrieved in
5218        <application>psql</> without attempting to buffer the entire
5219        result set in memory.
5220       </para>
5221      </listitem>
5222
5223      <listitem>
5224       <para>
5225        Make multi-line values align in the proper column
5226        (Martijn van Oosterhout)
5227       </para>
5228
5229       <para>
5230        Field values containing newlines are now displayed in a more
5231        readable fashion.
5232       </para>
5233      </listitem>
5234
5235      <listitem>
5236       <para>
5237        Save multi-line statements as a single entry, rather than
5238        one line at a time (Sergey E. Koposov)
5239       </para>
5240
5241       <para>
5242        This makes up-arrow recall of queries easier.  (This is
5243        not available on Windows, because that platform uses the native
5244        command-line editing present in the operating system.)
5245       </para>
5246      </listitem>
5247
5248      <listitem>
5249       <para>
5250        Make the line counter 64-bit so it can handle files with more
5251        than two billion lines (David Fetter)
5252       </para>
5253      </listitem>
5254
5255      <listitem>
5256       <para>
5257        Report both the returned data and the command status tag
5258        for <command>INSERT</>/<command>UPDATE</>/<command>DELETE
5259        RETURNING</> (Tom)
5260       </para>
5261      </listitem>
5262
5263     </itemizedlist>
5264
5265    </sect3>
5266
5267    <sect3>
5268     <title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
5269     <itemizedlist>
5270
5271      <listitem>
5272       <para>
5273        Allow complex selection of objects to be included or excluded
5274        by <application>pg_dump</> (Greg Sabino Mullane)
5275       </para>
5276
5277       <para>
5278        <application>pg_dump</> now supports multiple <literal>-n</>
5279        (schema) and <literal>-t</> (table) options, and adds
5280        <literal>-N</> and <literal>-T</> options to exclude objects.
5281        Also, the arguments of these switches can now be wild-card expressions
5282        rather than single object names, for example
5283        <literal>-t 'foo*'</>, and a schema can be part of
5284        a <literal>-t</> or <literal>-T</> switch, for example
5285        <literal>-t schema1.table1</>.
5286       </para>
5287      </listitem>
5288
5289      <listitem>
5290       <para>
5291        Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
5292        <literal>--no-data-for-failed-tables</> option to suppress
5293        loading data if table creation failed (i.e., the table already
5294        exists) (Martin Pitt)
5295       </para>
5296      </listitem>
5297
5298      <listitem>
5299       <para>
5300        Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
5301        option to run the entire session in a single transaction
5302        (Simon)
5303       </para>
5304
5305       <para>
5306        Use option <literal>-1</> or <literal>--single-transaction</>.
5307       </para>
5308      </listitem>
5309
5310     </itemizedlist>
5311
5312    </sect3>
5313
5314    <sect3>
5315     <title><link linkend="libpq"><application>libpq</></link> Changes</title>
5316     <itemizedlist>
5317
5318      <listitem>
5319       <para>
5320        Add <link
5321        linkend="libpq-misc"><function>PQencryptPassword()</></link>
5322        to encrypt passwords (Tom)
5323       </para>
5324
5325       <para>
5326        This allows passwords to be sent pre-encrypted for commands
5327        like <link linkend="SQL-ALTERROLE"><command>ALTER ROLE ...
5328        PASSWORD</></link>.
5329       </para>
5330      </listitem>
5331
5332      <listitem>
5333       <para>
5334        Add function <link
5335        linkend="libpq-threading"><function>PQisthreadsafe()</></link>
5336        (Bruce)
5337       </para>
5338
5339       <para>
5340        This allows applications to query the thread-safety status
5341        of the library.
5342       </para>
5343      </listitem>
5344
5345      <listitem>
5346       <para>
5347        Add <link
5348        linkend="libpq-exec-main"><function>PQdescribePrepared()</></link>,
5349        <link
5350        linkend="libpq-exec-main"><function>PQdescribePortal()</></link>,
5351        and related functions to return information about previously
5352        prepared statements and open cursors (Volkan YAZICI)
5353       </para>
5354      </listitem>
5355
5356      <listitem>
5357       <para>
5358        Allow <link linkend="libpq-ldap"><acronym>LDAP</></link> lookups
5359        from <link
5360        linkend="libpq-pgservice"><filename>pg_service.conf</></link>
5361        (Laurenz Albe)
5362       </para>
5363      </listitem>
5364
5365      <listitem>
5366       <para>
5367        Allow a hostname in <link
5368        linkend="libpq-pgpass"><filename>~/.pgpass</></link>
5369        to match the default socket directory (Bruce)
5370       </para>
5371
5372       <para>
5373        A blank hostname continues to match any Unix-socket connection,
5374        but this addition allows entries that are specific to one of
5375        several postmasters on the machine.
5376       </para>
5377      </listitem>
5378
5379     </itemizedlist>
5380
5381    </sect3>
5382
5383    <sect3>
5384     <title><link linkend="ecpg"><application>ecpg</></link> Changes</title>
5385     <itemizedlist>
5386
5387      <listitem>
5388       <para>
5389        Allow <link linkend="SQL-SHOW"><command>SHOW</></link> to
5390        put its result into a variable (Joachim Wieland)
5391       </para>
5392      </listitem>
5393
5394      <listitem>
5395       <para>
5396        Add <link linkend="SQL-COPY"><command>COPY TO STDOUT</></link>
5397        (Joachim Wieland)
5398       </para>
5399      </listitem>
5400
5401      <listitem>
5402       <para>
5403        Add regression tests (Joachim Wieland, Michael)
5404       </para>
5405      </listitem>
5406
5407      <listitem>
5408       <para>
5409        Major source code cleanups (Joachim Wieland, Michael)
5410       </para>
5411      </listitem>
5412
5413     </itemizedlist>
5414
5415    </sect3>
5416
5417    <sect3>
5418     <title><application>Windows</> Port</title>
5419     <itemizedlist>
5420
5421      <listitem>
5422       <para>
5423        Allow <acronym>MSVC</> to compile the <productname>PostgreSQL</>
5424        server (Magnus, Hiroshi Saito)
5425       </para>
5426      </listitem>
5427
5428      <listitem>
5429       <para>
5430        Add <acronym>MSVC</> support for utility commands and <link
5431        linkend="APP-PGDUMP"><application>pg_dump</></link> (Hiroshi
5432        Saito)
5433       </para>
5434      </listitem>
5435
5436      <listitem>
5437       <para>
5438        Add support for Windows code pages <literal>1253</>,
5439        <literal>1254</>, <literal>1255</>, and <literal>1257</>
5440        (Kris Jurka)
5441       </para>
5442      </listitem>
5443
5444      <listitem>
5445       <para>
5446        Drop privileges on startup, so that the server can be started from
5447        an administrative account (Magnus)
5448       </para>
5449      </listitem>
5450
5451      <listitem>
5452       <para>
5453        Stability fixes (Qingqing Zhou, Magnus)
5454       </para>
5455      </listitem>
5456
5457      <listitem>
5458       <para>
5459        Add native semaphore implementation (Qingqing Zhou)
5460       </para>
5461
5462       <para>
5463        The previous code mimicked SysV semaphores.
5464       </para>
5465      </listitem>
5466
5467     </itemizedlist>
5468
5469    </sect3>
5470
5471    <sect3>
5472     <title>Source Code Changes</title>
5473     <itemizedlist>
5474
5475      <listitem>
5476       <para>
5477        Add <link linkend="GIN"><acronym>GIN</></link> (Generalized
5478        Inverted iNdex) index access method (Teodor, Oleg)
5479       </para>
5480      </listitem>
5481
5482      <listitem>
5483       <para>
5484        Remove R-tree indexing (Tom)
5485       </para>
5486
5487       <para>
5488        Rtree has been re-implemented using <link
5489        linkend="GiST"><acronym>GiST</></link>. Among other
5490        differences, this means that rtree indexes now have support
5491        for crash recovery via write-ahead logging (WAL).
5492       </para>
5493      </listitem>
5494
5495      <listitem>
5496       <para>
5497        Reduce libraries needlessly linked into the backend (Martijn
5498        van Oosterhout, Tom)
5499       </para>
5500      </listitem>
5501
5502      <listitem>
5503       <para>
5504        Add a configure flag to allow libedit to be preferred over
5505        <acronym>GNU</> readline (Bruce)
5506       </para>
5507
5508       <para>
5509        Use configure <link
5510        linkend="configure"><literal>--with-libedit-preferred</></link>.
5511       </para>
5512      </listitem>
5513
5514      <listitem>
5515       <para>
5516        Allow installation into directories containing spaces
5517        (Peter)
5518       </para>
5519      </listitem>
5520
5521      <listitem>
5522       <para>
5523        Improve ability to relocate installation directories (Tom)
5524       </para>
5525      </listitem>
5526
5527      <listitem>
5528       <para>
5529        Add support for <productname>Solaris x86_64</> using the
5530        <productname>Solaris</> compiler (Pierre Girard, Theo
5531        Schlossnagle, Bruce)
5532       </para>
5533      </listitem>
5534
5535      <listitem>
5536       <para>
5537        Add <application>DTrace</> support (Robert Lor)
5538       </para>
5539      </listitem>
5540
5541      <listitem>
5542       <para>
5543        Add <literal>PG_VERSION_NUM</> for use by third-party
5544        applications wanting to test the backend version in C using &gt;
5545        and &lt; comparisons (Bruce)
5546       </para>
5547      </listitem>
5548
5549      <listitem>
5550       <para>
5551        Add <literal>XLOG_BLCKSZ</> as independent from <literal>BLCKSZ</>
5552        (Mark Wong)
5553       </para>
5554      </listitem>
5555
5556      <listitem>
5557       <para>
5558        Add <literal>LWLOCK_STATS</> define to report locking
5559        activity (Tom)
5560       </para>
5561      </listitem>
5562
5563      <listitem>
5564       <para>
5565        Emit warnings for unknown <application>configure</> options
5566        (Martijn van Oosterhout)
5567       </para>
5568      </listitem>
5569
5570      <listitem>
5571       <para>
5572        Add server support for <quote>plugin</> libraries
5573        that can be used for add-on tasks such as debugging and performance
5574        measurement (Korry Douglas)
5575       </para>
5576
5577       <para>
5578        This consists of two features: a table of <quote>rendezvous
5579        variables</> that allows separately-loaded shared libraries to
5580        communicate, and a new configuration parameter <link
5581        linkend="guc-local-preload-libraries"><varname>local_preload_libraries</></link>
5582        that allows libraries to be loaded into specific sessions without
5583        explicit cooperation from the client application.  This allows
5584        external add-ons to implement features such as a PL/PgSQL debugger.
5585       </para>
5586      </listitem>
5587
5588      <listitem>
5589       <para>
5590        Rename existing configuration parameter
5591        <varname>preload_libraries</> to <link
5592        linkend="guc-shared-preload-libraries"><varname>shared_preload_libraries</></link>
5593        (Tom)
5594       </para>
5595
5596       <para>
5597        This was done for clarity in comparison to
5598        <varname>local_preload_libraries</>.
5599       </para>
5600      </listitem>
5601
5602      <listitem>
5603       <para>
5604        Add new configuration parameter <link
5605        linkend="guc-server-version-num"><varname>server_version_num</></link>
5606        (Greg Sabino Mullane)
5607       </para>
5608
5609       <para>
5610        This is like <varname>server_version</varname>, but is an
5611        integer, e.g.  <literal>80200</>. This allows applications to
5612        make version checks more easily.
5613       </para>
5614      </listitem>
5615
5616      <listitem>
5617       <para>
5618        Add a configuration parameter <link
5619        linkend="guc-seq-page-cost"><varname>seq_page_cost</></link>
5620        (Tom)
5621       </para>
5622      </listitem>
5623
5624      <listitem>
5625       <para>
5626        Re-implement the <link linkend="regress">regression test</link> script as a C program
5627        (Magnus, Tom)
5628       </para>
5629      </listitem>
5630
5631      <listitem>
5632       <para>
5633        Allow loadable modules to allocate shared memory and
5634        lightweight locks (Marc Munro)
5635       </para>
5636      </listitem>
5637
5638      <listitem>
5639       <para>
5640        Add automatic initialization and finalization of dynamically
5641        loaded libraries (Ralf Engelschall, Tom)
5642       </para>
5643
5644       <para>
5645        New <link linkend="xfunc-c-dynload">functions</link>
5646        <function>_PG_init()</> and <function>_PG_fini()</> are
5647        called if the library defines such symbols.  Hence we no
5648        longer need to specify an initialization function in
5649        <varname>shared_preload_libraries</>; we can assume that
5650        the library used the <function>_PG_init()</> convention
5651        instead.
5652       </para>
5653      </listitem>
5654
5655      <listitem>
5656       <para>
5657        Add <link
5658        linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
5659        header block to all shared object files (Martijn van
5660        Oosterhout)
5661       </para>
5662
5663       <para>
5664        The magic block prevents version mismatches between loadable object
5665        files and servers.
5666       </para>
5667      </listitem>
5668
5669      <listitem>
5670       <para>
5671         Add shared library support for AIX (Laurenz Albe)
5672       </para>
5673      </listitem>
5674
5675      <listitem>
5676       <para>
5677        New <link linkend="datatype-xml"><acronym>XML</></link>
5678        documentation section (Bruce)
5679       </para>
5680      </listitem>
5681
5682     </itemizedlist>
5683
5684    </sect3>
5685
5686    <sect3>
5687     <title>Contrib Changes</title>
5688     <itemizedlist>
5689
5690      <listitem>
5691       <para>
5692        Major tsearch2 improvements (Oleg, Teodor)
5693       </para>
5694
5695       <itemizedlist>
5696
5697        <listitem>
5698         <para>
5699          multibyte encoding support, including <acronym>UTF8</>
5700         </para>
5701        </listitem>
5702        <listitem>
5703         <para>
5704          query rewriting support
5705         </para>
5706        </listitem>
5707        <listitem>
5708         <para>
5709          improved ranking functions
5710         </para>
5711        </listitem>
5712        <listitem>
5713         <para>
5714          thesaurus dictionary support
5715         </para>
5716        </listitem>
5717        <listitem>
5718         <para>
5719          Ispell dictionaries now recognize <application>MySpell</>
5720          format, used by <application>OpenOffice</>
5721         </para>
5722        </listitem>
5723        <listitem>
5724         <para>
5725          <acronym>GIN</> support
5726         </para>
5727        </listitem>
5728
5729       </itemizedlist>
5730
5731      </listitem>
5732
5733      <listitem>
5734       <para>
5735        Add adminpack module containing <application>Pgadmin</> administration
5736        functions (Dave)
5737       </para>
5738
5739       <para>
5740        These functions provide additional file system access
5741        routines not present in the default <productname>PostgreSQL</>
5742        server.
5743       </para>
5744      </listitem>
5745
5746      <listitem>
5747       <para>
5748        Add sslinfo module (Victor Wagner)
5749       </para>
5750
5751       <para>
5752        Reports information about the current connection's <acronym>SSL</>
5753        certificate.
5754       </para>
5755      </listitem>
5756
5757      <listitem>
5758       <para>
5759        Add pgrowlocks module (Tatsuo)
5760       </para>
5761
5762       <para>
5763        This shows row locking information for a specified table.
5764       </para>
5765      </listitem>
5766
5767      <listitem>
5768       <para>
5769        Add hstore module (Oleg, Teodor)
5770       </para>
5771      </listitem>
5772
5773      <listitem>
5774       <para>
5775        Add isn module, replacing isbn_issn (Jeremy Kronuz)
5776       </para>
5777
5778       <para>
5779        This new implementation supports <acronym>EAN13</>, <acronym>UPC</>,
5780        <acronym>ISBN</> (books), <acronym>ISMN</> (music), and
5781        <acronym>ISSN</> (serials).
5782       </para>
5783      </listitem>
5784
5785      <listitem>
5786       <para>
5787        Add index information functions to pgstattuple (ITAGAKI Takahiro,
5788        Satoshi Nagayasu)
5789       </para>
5790      </listitem>
5791
5792      <listitem>
5793       <para>
5794        Add pg_freespacemap module to display free space map information
5795        (Mark Kirkwood)
5796       </para>
5797      </listitem>
5798
5799      <listitem>
5800       <para>
5801        pgcrypto now has all planned functionality (Marko Kreen)
5802       </para>
5803       <itemizedlist>
5804        <listitem>
5805         <para>
5806          Include iMath library in pgcrypto to have the public-key encryption
5807          functions always available.
5808         </para>
5809        </listitem>
5810        <listitem>
5811         <para>
5812          Add SHA224 algorithm that was missing in OpenBSD code.
5813         </para>
5814        </listitem>
5815        <listitem>
5816         <para>
5817          Activate builtin code for SHA224/256/384/512 hashes on older
5818          OpenSSL to have those algorithms always available.
5819         </para>
5820        </listitem>
5821        <listitem>
5822         <para>
5823          New function gen_random_bytes() that returns cryptographically strong
5824          randomness.  Useful for generating encryption keys.
5825         </para>
5826        </listitem>
5827        <listitem>
5828         <para>
5829          Remove digest_exists(), hmac_exists() and cipher_exists() functions.
5830         </para>
5831        </listitem>
5832       </itemizedlist>
5833      </listitem>
5834
5835      <listitem>
5836       <para>
5837        Improvements to cube module (Joshua Reich)
5838       </para>
5839
5840       <para>
5841        New functions are <function>cube(float[])</>,
5842        <function>cube(float[], float[])</>, and
5843        <function>cube_subset(cube, int4[])</>.
5844       </para>
5845      </listitem>
5846
5847      <listitem>
5848       <para>
5849        Add async query capability to dblink (Kai Londenberg,
5850        Joe Conway)
5851       </para>
5852      </listitem>
5853
5854      <listitem>
5855       <para>
5856        New operators for array-subset comparisons (<literal>@&gt;</>,
5857        <literal>&lt;@</>, <literal>&amp;&amp;</>) (Tom)
5858       </para>
5859
5860       <para>
5861        Various contrib packages already had these operators for their
5862        datatypes, but the naming wasn't consistent.  We have now added
5863        consistently named array-subset comparison operators to the core code
5864        and all the contrib packages that have such functionality.
5865        (The old names remain available, but are deprecated.)
5866       </para>
5867      </listitem>
5868
5869      <listitem>
5870       <para>
5871        Add uninstall scripts for all contrib packages that have install
5872        scripts (David, Josh Drake)
5873       </para>
5874      </listitem>
5875
5876     </itemizedlist>
5877
5878    </sect3>
5879
5880   </sect2>
5881  </sect1>
5882
5883  <sect1 id="release-8-1-10">
5884   <title>Release 8.1.10</title>
5885
5886   <note>
5887   <title>Release date</title>
5888   <simpara>2007-09-17</simpara>
5889   </note>
5890
5891   <para>
5892    This release contains a variety of fixes from 8.1.9.
5893   </para>
5894
5895   <sect2>
5896    <title>Migration to Version 8.1.10</title>
5897
5898    <para>
5899     A dump/restore is not required for those running 8.1.X.
5900     However, if you are upgrading from a version earlier than 8.1.2,
5901     see the release notes for 8.1.2.
5902    </para>
5903
5904   </sect2>
5905
5906   <sect2>
5907    <title>Changes</title>
5908
5909    <itemizedlist>
5910
5911     <listitem>
5912      <para>
5913       Prevent index corruption when a transaction inserts rows and
5914       then aborts close to the end of a concurrent <command>VACUUM</>
5915       on the same table (Tom)
5916      </para>
5917     </listitem>
5918
5919     <listitem>
5920      <para>
5921       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
5922      </para>
5923     </listitem>
5924
5925     <listitem>
5926      <para>
5927       Allow the <type>interval</> data type to accept input consisting only of
5928       milliseconds or microseconds (Neil)
5929      </para>
5930     </listitem>
5931
5932     <listitem>
5933      <para>
5934       Speed up rtree index insertion (Teodor)
5935      </para>
5936     </listitem>
5937
5938     <listitem>
5939      <para>
5940       Fix excessive logging of <acronym>SSL</> error messages (Tom)
5941      </para>
5942     </listitem>
5943
5944     <listitem>
5945      <para>
5946       Fix logging so that log messages are never interleaved when using
5947       the syslogger process (Andrew)
5948      </para>
5949     </listitem>
5950
5951     <listitem>
5952      <para>
5953       Fix crash when <varname>log_min_error_statement</> logging runs out
5954       of memory (Tom)
5955      </para>
5956     </listitem>
5957
5958     <listitem>
5959      <para>
5960       Fix incorrect handling of some foreign-key corner cases (Tom)
5961      </para>
5962     </listitem>
5963
5964     <listitem>
5965      <para>
5966       Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
5967       due to attempting to process temporary tables of other sessions (Alvaro)
5968      </para>
5969     </listitem>
5970
5971     <listitem>
5972      <para>
5973       Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
5974      </para>
5975     </listitem>
5976
5977     <listitem>
5978      <para>
5979       Windows socket improvements (Magnus)
5980      </para>
5981     </listitem>
5982
5983     <listitem>
5984      <para>
5985       Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
5986       because of possible encoding mismatches (Tom)
5987      </para>
5988     </listitem>
5989
5990     <listitem>
5991      <para>
5992       Require non-superusers who use <filename>/contrib/dblink</> to use only
5993       password authentication, as a security measure (Joe)
5994      </para>
5995     </listitem>
5996
5997    </itemizedlist>
5998
5999   </sect2>
6000  </sect1>
6001
6002  <sect1 id="release-8-1-9">
6003   <title>Release 8.1.9</title>
6004
6005   <note>
6006   <title>Release date</title>
6007   <simpara>2007-04-23</simpara>
6008   </note>
6009
6010   <para>
6011    This release contains a variety of fixes from 8.1.8,
6012    including a security fix.
6013   </para>
6014
6015   <sect2>
6016    <title>Migration to Version 8.1.9</title>
6017
6018    <para>
6019     A dump/restore is not required for those running 8.1.X.
6020     However, if you are upgrading from a version earlier than 8.1.2,
6021     see the release notes for 8.1.2.
6022    </para>
6023
6024   </sect2>
6025
6026   <sect2>
6027    <title>Changes</title>
6028
6029    <itemizedlist>
6030
6031     <listitem>
6032     <para>
6033      Support explicit placement of the temporary-table schema within
6034      <varname>search_path</>, and disable searching it for functions
6035      and operators (Tom)
6036     </para>
6037     <para>
6038      This is needed to allow a security-definer function to set a
6039      truly secure value of <varname>search_path</>.  Without it,
6040      an unprivileged SQL user can use temporary objects to execute code
6041      with the privileges of the security-definer function (CVE-2007-2138).
6042      See <command>CREATE FUNCTION</> for more information.
6043     </para>
6044     </listitem>
6045
6046     <listitem>
6047     <para>
6048      <filename>/contrib/tsearch2</> crash fixes (Teodor)
6049     </para>
6050     </listitem>
6051
6052     <listitem>
6053     <para>
6054      Require <command>COMMIT PREPARED</> to be executed in the same
6055      database as the transaction was prepared in (Heikki)
6056     </para>
6057     </listitem>
6058
6059     <listitem>
6060     <para>
6061      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
6062      <command>UPDATE</> chains (Tom, Pavan Deolasee)
6063     </para>
6064     </listitem>
6065
6066     <listitem>
6067     <para>
6068      Planner fixes, including improving outer join and bitmap scan
6069      selection logic (Tom)
6070     </para>
6071     </listitem>
6072
6073     <listitem>
6074     <para>
6075      Fix PANIC during enlargement of a hash index (bug introduced in 8.1.6)
6076      (Tom)
6077     </para>
6078     </listitem>
6079
6080     <listitem>
6081     <para>
6082      Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
6083     </para>
6084     </listitem>
6085
6086    </itemizedlist>
6087
6088   </sect2>
6089  </sect1>
6090
6091  <sect1 id="release-8-1-8">
6092   <title>Release 8.1.8</title>
6093
6094   <note>
6095   <title>Release date</title>
6096   <simpara>2007-02-07</simpara>
6097   </note>
6098
6099   <para>
6100    This release contains one fix from 8.1.7.
6101   </para>
6102
6103   <sect2>
6104    <title>Migration to Version 8.1.8</title>
6105
6106    <para>
6107     A dump/restore is not required for those running 8.1.X.
6108     However, if you are upgrading from a version earlier than 8.1.2,
6109     see the release notes for 8.1.2.
6110    </para>
6111
6112   </sect2>
6113
6114   <sect2>
6115    <title>Changes</title>
6116
6117    <itemizedlist>
6118
6119     <listitem>
6120     <para>
6121      Remove overly-restrictive check for type length in constraints and
6122      functional indexes(Tom)
6123     </para>
6124     </listitem>
6125
6126    </itemizedlist>
6127
6128   </sect2>
6129  </sect1>
6130
6131  <sect1 id="release-8-1-7">
6132   <title>Release 8.1.7</title>
6133
6134   <note>
6135   <title>Release date</title>
6136   <simpara>2007-02-05</simpara>
6137   </note>
6138
6139   <para>
6140    This release contains a variety of fixes from 8.1.6, including
6141    a security fix.
6142   </para>
6143
6144   <sect2>
6145    <title>Migration to Version 8.1.7</title>
6146
6147    <para>
6148     A dump/restore is not required for those running 8.1.X.
6149     However, if you are upgrading from a version earlier than 8.1.2,
6150     see the release notes for 8.1.2.
6151    </para>
6152
6153   </sect2>
6154
6155   <sect2>
6156    <title>Changes</title>
6157
6158    <itemizedlist>
6159
6160     <listitem>
6161     <para>
6162      Remove security vulnerabilities that allowed connected users
6163      to read backend memory (Tom)
6164     </para>
6165     <para>
6166      The vulnerabilities involve suppressing the normal check that a SQL
6167      function returns the data type it's declared to, and changing the
6168      data type of a table column (CVE-2007-0555, CVE-2007-0556).  These
6169      errors can easily be exploited to cause a backend crash, and in
6170      principle might be used to read database content that the user
6171      should not be able to access.
6172     </para>
6173     </listitem>
6174
6175     <listitem>
6176     <para>
6177      Fix rare bug wherein btree index page splits could fail
6178      due to choosing an infeasible split point (Heikki Linnakangas)
6179     </para>
6180     </listitem>
6181
6182     <listitem>
6183     <para>
6184      Improve <command>VACUUM</> performance for databases with many tables (Tom)
6185     </para>
6186     </listitem>
6187
6188     <listitem>
6189     <para>
6190      Fix autovacuum to avoid leaving non-permanent transaction IDs in
6191      non-connectable databases (Alvaro)
6192     </para>
6193
6194     <para>
6195      This bug affects the 8.1 branch only.
6196     </para>
6197     </listitem>
6198
6199     <listitem>
6200     <para>
6201      Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
6202     </para>
6203     </listitem>
6204
6205     <listitem>
6206     <para>
6207      Tighten security of multi-byte character processing for UTF8 sequences
6208      over three bytes long (Tom)
6209     </para>
6210     </listitem>
6211
6212     <listitem>
6213     <para>
6214      Fix bogus <quote>permission denied</> failures occurring on Windows
6215      due to attempts to fsync already-deleted files (Magnus, Tom)
6216     </para>
6217     </listitem>
6218
6219     <listitem>
6220     <para>
6221      Fix possible crashes when an already-in-use PL/pgSQL function is
6222      updated (Tom)
6223     </para>
6224     </listitem>
6225
6226    </itemizedlist>
6227
6228   </sect2>
6229  </sect1>
6230
6231  <sect1 id="release-8-1-6">
6232   <title>Release 8.1.6</title>
6233
6234   <note>
6235   <title>Release date</title>
6236   <simpara>2007-01-08</simpara>
6237   </note>
6238
6239   <para>
6240    This release contains a variety of fixes from 8.1.5.
6241   </para>
6242
6243   <sect2>
6244    <title>Migration to Version 8.1.6</title>
6245
6246    <para>
6247     A dump/restore is not required for those running 8.1.X.
6248     However, if you are upgrading from a version earlier than 8.1.2,
6249     see the release notes for 8.1.2.
6250    </para>
6251
6252   </sect2>
6253
6254   <sect2>
6255    <title>Changes</title>
6256
6257    <itemizedlist>
6258
6259     <listitem>
6260      <para>
6261       Improve handling of <function>getaddrinfo()</> on AIX (Tom)
6262      </para>
6263
6264      <para>
6265       This fixes a problem with starting the statistics collector,
6266       among other things.
6267      </para>
6268     </listitem>
6269
6270     <listitem>
6271      <para>
6272       Fix <application>pg_restore</> to handle a tar-format backup
6273       that contains large objects (blobs) with comments (Tom)
6274      </para>
6275     </listitem>
6276
6277      <listitem>
6278       <para>
6279        Fix <quote>failed to re-find parent key</> errors in
6280        <command>VACUUM</> (Tom)
6281       </para>
6282      </listitem>
6283
6284      <listitem>
6285       <para>
6286        Clean out <filename>pg_internal.init</> cache files during server
6287        restart (Simon)
6288       </para>
6289
6290       <para>
6291        This avoids a hazard that the cache files might contain stale
6292        data after PITR recovery.
6293       </para>
6294      </listitem>
6295
6296      <listitem>
6297       <para>
6298        Fix race condition for truncation of a large relation across a
6299        gigabyte boundary by <command>VACUUM</> (Tom)
6300       </para>
6301      </listitem>
6302
6303      <listitem>
6304       <para>
6305        Fix bug causing needless deadlock errors on row-level locks (Tom)
6306       </para>
6307      </listitem>
6308
6309      <listitem>
6310       <para>
6311        Fix bugs affecting multi-gigabyte hash indexes (Tom)
6312       </para>
6313      </listitem>
6314
6315     <listitem>
6316      <para>
6317       Fix possible deadlock in Windows signal handling (Teodor)
6318      </para>
6319     </listitem>
6320
6321     <listitem>
6322      <para>
6323       Fix error when constructing an <literal>ARRAY[]</> made up of multiple
6324       empty elements (Tom)
6325      </para>
6326     </listitem>
6327
6328     <listitem>
6329      <para>
6330       Fix ecpg memory leak during connection (Michael)
6331      </para>
6332     </listitem>
6333
6334     <listitem>
6335      <para>
6336       Fix for Darwin (OS X) compilation (Tom)
6337      </para>
6338     </listitem>
6339
6340     <listitem>
6341      <para>
6342       <function>to_number()</> and <function>to_char(numeric)</>
6343       are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
6344       new <application>initdb</> installs (Tom)
6345      </para>
6346
6347      <para>
6348       This is because <varname>lc_numeric</> can potentially
6349       change the output of these functions.
6350      </para>
6351     </listitem>
6352
6353     <listitem>
6354      <para>
6355       Improve index usage of regular expressions that use parentheses (Tom)
6356      </para>
6357
6358      <para>
6359       This improves <application>psql</> <literal>\d</> performance also.
6360      </para>
6361     </listitem>
6362
6363     <listitem>
6364      <para>
6365       Update timezone database
6366      </para>
6367
6368      <para>
6369       This affects Australian and Canadian daylight-savings rules in
6370       particular.
6371      </para>
6372     </listitem>
6373
6374    </itemizedlist>
6375
6376   </sect2>
6377  </sect1>
6378
6379  <sect1 id="release-8-1-5">
6380   <title>Release 8.1.5</title>
6381
6382   <note>
6383   <title>Release date</title>
6384   <simpara>2006-10-16</simpara>
6385   </note>
6386
6387   <para>
6388    This release contains a variety of fixes from 8.1.4.
6389   </para>
6390
6391   <sect2>
6392    <title>Migration to Version 8.1.5</title>
6393
6394    <para>
6395     A dump/restore is not required for those running 8.1.X.
6396     However, if you are upgrading from a version earlier than 8.1.2,
6397     see the release notes for 8.1.2.
6398    </para>
6399
6400   </sect2>
6401
6402   <sect2>
6403    <title>Changes</title>
6404
6405 <itemizedlist>
6406 <listitem><para>Disallow aggregate functions in <command>UPDATE</>
6407 commands, except within sub-SELECTs (Tom)</para>
6408 <para>The behavior of such an aggregate was unpredictable, and in 8.1.X
6409 could cause a crash, so it has been disabled.  The SQL standard does not allow
6410 this either.</para></listitem>
6411 <listitem><para>Fix core dump when an untyped literal is taken as
6412 ANYARRAY</para></listitem>
6413 <listitem><para>Fix core dump in duration logging for extended query protocol
6414 when a <command>COMMIT</> or <command>ROLLBACK</> is
6415 executed</para></listitem>
6416 <listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
6417 function returning multiple rows (Tom)</para></listitem>
6418 <listitem><para>Fix <command>ALTER TABLE ... TYPE</> to recheck
6419 <literal>NOT NULL</> for <literal>USING</> clause (Tom)</para></listitem>
6420 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
6421  matches for the separator string</para>
6422 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
6423 </para></listitem>
6424 <listitem><para>Fix <function>to_timestamp()</> for
6425 <literal>AM</>/<literal>PM</> formats (Bruce)</para></listitem>
6426 <listitem><para>Fix autovacuum's calculation that decides whether
6427  <command>ANALYZE</> is needed (Alvaro)</para></listitem>
6428 <listitem><para>Fix corner cases in pattern matching for
6429  <application>psql</>'s <literal>\d</> commands</para></listitem>
6430 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
6431  (Teodor)</para></listitem>
6432 <listitem><para>Numerous robustness fixes in <application>ecpg</> (Joachim
6433 Wieland)</para></listitem>
6434 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
6435 <listitem><para>Minor fixes in /contrib/dblink and /contrib/tsearch2</para>
6436 </listitem>
6437 <listitem><para>Efficiency improvements in hash tables and bitmap index scans
6438 (Tom)</para></listitem>
6439 <listitem><para>Fix instability of statistics collection on Windows (Tom, Andrew)</para></listitem>
6440 <listitem><para>Fix <varname>statement_timeout</> to use the proper
6441 units on Win32 (Bruce)</para>
6442 <para>In previous Win32 8.1.X versions, the delay was off by a factor of
6443 100.</para></listitem>
6444 <listitem><para>Fixes for <acronym>MSVC</> and <productname>Borland C++</>
6445 compilers (Hiroshi Saito)</para></listitem>
6446 <listitem><para>Fixes for <systemitem class="osname">AIX</> and
6447 <productname>Intel</> compilers (Tom)</para></listitem>
6448 <listitem><para>Fix rare bug in continuous archiving (Tom)</para></listitem>
6449 </itemizedlist>
6450
6451   </sect2>
6452  </sect1>
6453
6454  <sect1 id="release-8-1-4">
6455   <title>Release 8.1.4</title>
6456
6457   <note>
6458   <title>Release date</title>
6459   <simpara>2006-05-23</simpara>
6460   </note>
6461
6462   <para>
6463    This release contains a variety of fixes from 8.1.3,
6464    including patches for extremely serious security issues.
6465   </para>
6466
6467   <sect2>
6468    <title>Migration to Version 8.1.4</title>
6469
6470    <para>
6471     A dump/restore is not required for those running 8.1.X.
6472     However, if you are upgrading from a version earlier than 8.1.2,
6473     see the release notes for 8.1.2.
6474    </para>
6475
6476    <para>
6477     Full security against the SQL-injection attacks described in
6478     CVE-2006-2313 and CVE-2006-2314 might require changes in application
6479     code.  If you have applications that embed untrustworthy strings
6480     into SQL commands, you should examine them as soon as possible to
6481     ensure that they are using recommended escaping techniques.  In
6482     most cases, applications should be using subroutines provided by
6483     libraries or drivers (such as <application>libpq</>'s
6484     <function>PQescapeStringConn()</>) to perform string escaping,
6485     rather than relying on <foreignphrase>ad hoc</> code to do it.
6486    </para>
6487   </sect2>
6488
6489   <sect2>
6490    <title>Changes</title>
6491
6492 <itemizedlist>
6493 <listitem><para>Change the server to reject invalidly-encoded multibyte
6494 characters in all cases (Tatsuo, Tom)</para>
6495 <para>While <productname>PostgreSQL</> has been moving in this direction for
6496 some time, the checks are now applied uniformly to all encodings and all
6497 textual input, and are now always errors not merely warnings.  This change
6498 defends against SQL-injection attacks of the type described in CVE-2006-2313.
6499 </para></listitem>
6500
6501 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
6502 <para>As a server-side defense against SQL-injection attacks of the type
6503 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
6504 <literal>\'</> as a representation of ASCII single quote in SQL string
6505 literals.  By default, <literal>\'</> is rejected only when
6506 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
6507 GB18030, or UHC), which is the scenario in which SQL injection is possible.
6508 A new configuration parameter <varname>backslash_quote</> is available to
6509 adjust this behavior when needed.  Note that full security against
6510 CVE-2006-2314 might require client-side changes; the purpose of
6511 <varname>backslash_quote</> is in part to make it obvious that insecure
6512 clients are insecure.
6513 </para></listitem>
6514
6515 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
6516 aware of encoding considerations and
6517 <varname>standard_conforming_strings</></para>
6518 <para>This fixes <application>libpq</>-using applications for the security
6519 issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
6520 them against the planned changeover to SQL-standard string literal syntax.
6521 Applications that use multiple <productname>PostgreSQL</> connections
6522 concurrently should migrate to <function>PQescapeStringConn()</> and
6523 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
6524 for the settings in use in each database connection.  Applications that
6525 do string escaping <quote>by hand</> should be modified to rely on library
6526 routines instead.
6527 </para></listitem>
6528
6529 <listitem><para>Fix weak key selection in pgcrypto (Marko Kreen)</para>
6530 <para>Errors in fortuna PRNG reseeding logic could cause a predictable
6531 session key to be selected by <function>pgp_sym_encrypt()</> in some cases.
6532 This only affects non-OpenSSL-using builds.
6533 </para></listitem>
6534
6535 <listitem><para>Fix some incorrect encoding conversion functions</para>
6536 <para><function>win1251_to_iso</>, <function>win866_to_iso</>,
6537 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
6538 <function>mic_to_euc_tw</> were all broken to varying
6539 extents.
6540 </para></listitem>
6541
6542 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
6543 (Bruce, Jan)</para></listitem>
6544
6545 <listitem><para>Make autovacuum visible in <structname>pg_stat_activity</>
6546 (Alvaro)</para></listitem>
6547
6548 <listitem><para>Disable <literal>full_page_writes</> (Tom)</para>
6549 <para>In certain cases, having <literal>full_page_writes</> off would cause
6550 crash recovery to fail.  A proper fix will appear in 8.2; for now it's just
6551 disabled.
6552 </para></listitem>
6553
6554 <listitem><para>Various planner fixes, particularly for bitmap index scans and
6555 MIN/MAX optimization (Tom)</para></listitem>
6556
6557 <listitem><para>Fix incorrect optimization in merge join (Tom)</para>
6558 <para>Outer joins could sometimes emit multiple copies of unmatched rows.
6559 </para></listitem>
6560
6561 <listitem><para>Fix crash from using and modifying a plpgsql function in the
6562 same transaction</para></listitem>
6563
6564 <listitem><para>Fix WAL replay for case where a B-Tree index has been
6565 truncated</para></listitem>
6566
6567 <listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
6568 <literal>|</> (Tom)</para></listitem>
6569
6570 <listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
6571 create tables in the default tablespace, not the base directory (Kris
6572 Jurka)</para></listitem>
6573
6574 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
6575 Fuhr)</para></listitem>
6576
6577 <listitem><para>Improve qsort performance (Dann Corbit)</para>
6578 <para>Currently this code is only used on Solaris.
6579 </para></listitem>
6580
6581 <listitem><para>Fix for OS/X Bonjour on x86 systems (Ashley Clark)</para></listitem>
6582
6583 <listitem><para>Fix various minor memory leaks</para></listitem>
6584
6585 <listitem><para>Fix problem with password prompting on some Win32 systems
6586 (Robert Kinberg)</para></listitem>
6587
6588 <listitem><para>Improve <application>pg_dump</>'s handling of default values
6589 for domains</para></listitem>
6590
6591 <listitem><para>Fix <application>pg_dumpall</> to handle identically-named
6592 users and groups reasonably (only possible when dumping from a pre-8.1 server)
6593 (Tom)</para>
6594 <para>The user and group will be merged into a single role with
6595 <literal>LOGIN</> permission.  Formerly the merged role wouldn't have
6596 <literal>LOGIN</> permission, making it unusable as a user.
6597 </para></listitem>
6598
6599 <listitem><para>Fix <application>pg_restore</> <literal>-n</> to work as
6600 documented (Tom)</para></listitem>
6601 </itemizedlist>
6602
6603   </sect2>
6604  </sect1>
6605
6606  <sect1 id="release-8-1-3">
6607   <title>Release 8.1.3</title>
6608
6609   <note>
6610   <title>Release date</title>
6611   <simpara>2006-02-14</simpara>
6612   </note>
6613
6614   <para>
6615    This release contains a variety of fixes from 8.1.2,
6616    including one very serious security issue.
6617   </para>
6618
6619   <sect2>
6620    <title>Migration to Version 8.1.3</title>
6621
6622    <para>
6623     A dump/restore is not required for those running 8.1.X.
6624     However, if you are upgrading from a version earlier than 8.1.2,
6625     see the release notes for 8.1.2.
6626    </para>
6627   </sect2>
6628
6629   <sect2>
6630    <title>Changes</title>
6631
6632 <itemizedlist>
6633
6634 <listitem><para>Fix bug that allowed any logged-in user to <command>SET
6635 ROLE</> to any other database user id (CVE-2006-0553)</para>
6636 <para>Due to inadequate validity checking, a user could exploit the special
6637 case that <command>SET ROLE</> normally uses to restore the previous role
6638 setting after an error.  This allowed ordinary users to acquire superuser
6639 status, for example.
6640 The escalation-of-privilege risk exists only in 8.1.0-8.1.2.
6641 However, in all releases back to 7.3 there is a related bug in <command>SET
6642 SESSION AUTHORIZATION</> that allows unprivileged users to crash the server,
6643 if it has been compiled with Asserts enabled (which is not the default).
6644 Thanks to Akio Ishida for reporting this problem.
6645 </para></listitem>
6646
6647 <listitem><para>Fix bug with row visibility logic in self-inserted
6648 rows (Tom)</para>
6649 <para>Under rare circumstances a row inserted by the current command
6650 could be seen as already valid, when it should not be.  Repairs bug
6651 created in 8.0.4, 7.4.9, and 7.3.11 releases.
6652 </para></listitem>
6653
6654 <listitem><para>Fix race condition that could lead to <quote>file already
6655 exists</> errors during pg_clog and pg_subtrans file creation
6656 (Tom)</para></listitem>
6657
6658 <listitem><para>Fix cases that could lead to crashes if a cache-invalidation
6659 message arrives at just the wrong time (Tom)</para></listitem>
6660
6661 <listitem><para>Properly check <literal>DOMAIN</> constraints for
6662 <literal>UNKNOWN</> parameters in prepared statements
6663 (Neil)</para></listitem>
6664
6665 <listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
6666 <literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
6667 constraints in the proper order (Nakano Yoshihisa)</para></listitem>
6668
6669 <listitem><para>Fixes to allow restoring dumps that have cross-schema
6670 references to custom operators or operator classes (Tom)</para></listitem>
6671
6672 <listitem><para>Allow <application>pg_restore</> to continue properly after a
6673 <command>COPY</> failure; formerly it tried to treat the remaining
6674 <command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
6675
6676 <listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
6677 when the  data directory is not specified (Magnus)</para></listitem>
6678
6679 <listitem><para>Fix <application>libpq</> <function>PQprint</> HTML tags
6680 (Christoph Zwerschke)</para></listitem>
6681
6682 <listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
6683 (Neil)</para></listitem>
6684
6685 <listitem><para>Allow <literal>SETOF</> and <literal>%TYPE</> to be used
6686 together in function result type declarations</para></listitem>
6687
6688 <listitem><para>Recover properly if error occurs during argument passing
6689 in <application>PL/python</> (Neil)</para></listitem>
6690
6691 <listitem><para>Fix memory leak in <function>plperl_return_next</>
6692 (Neil)</para></listitem>
6693
6694 <listitem><para>Fix <application>PL/perl</>'s handling of locales on
6695 Win32 to match the backend (Andrew)</para></listitem>
6696
6697 <listitem><para>Various optimizer fixes (Tom)</para></listitem>
6698
6699 <listitem><para>Fix crash when <literal>log_min_messages</> is set to
6700 <literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
6701 (Bruce)</para></listitem>
6702
6703 <listitem><para>Fix <application>pgxs</> <literal>-L</> library path
6704 specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
6705
6706 <listitem><para>Check that SID is enabled while checking for Win32 admin
6707 privileges (Magnus)</para></listitem>
6708
6709 <listitem><para>Properly reject out-of-range date inputs (Kris
6710 Jurka)</para></listitem>
6711
6712 <listitem><para>Portability fix for testing presence of <function>finite</>
6713 and <function>isinf</> during configure (Tom)</para></listitem>
6714
6715 <listitem><para>Improve speed of <command>COPY IN</> via libpq, by
6716 avoiding a kernel call per data line (Alon Goldshuv)</para></listitem>
6717
6718 <listitem><para>Improve speed of <filename>/contrib/tsearch2</> index
6719 creation (Tom)</para></listitem>
6720
6721 </itemizedlist>
6722
6723   </sect2>
6724  </sect1>
6725
6726  <sect1 id="release-8-1-2">
6727   <title>Release 8.1.2</title>
6728
6729   <note>
6730   <title>Release date</title>
6731   <simpara>2006-01-09</simpara>
6732   </note>
6733
6734   <para>
6735    This release contains a variety of fixes from 8.1.1.
6736   </para>
6737
6738   <sect2>
6739    <title>Migration to Version 8.1.2</title>
6740
6741    <para>
6742     A dump/restore is not required for those running 8.1.X.
6743     However, you might need to <command>REINDEX</> indexes on textual
6744     columns after updating, if you are affected by the locale or
6745     <application>plperl</> issues described below.
6746    </para>
6747   </sect2>
6748
6749   <sect2>
6750    <title>Changes</title>
6751
6752 <itemizedlist>
6753
6754 <listitem><para>Fix Windows code so that postmaster will continue rather
6755 than exit if there is no more room in ShmemBackendArray (Magnus)</para>
6756 <para>The previous behavior could lead to a denial-of-service situation if too
6757 many connection requests arrive close together.  This applies
6758 <emphasis>only</> to the Windows port.</para></listitem>
6759
6760 <listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
6761 to return an already-used page as new, potentially causing loss of
6762 recently-committed data (Tom)</para></listitem>
6763
6764 <listitem><para>Fix for protocol-level Describe messages issued
6765 outside a transaction or in a failed transaction (Tom)</para></listitem>
6766
6767 <listitem><para>Fix character string comparison for locales that consider
6768 different character combinations as equal, such as Hungarian (Tom)</para>
6769 <para>This might require <command>REINDEX</> to fix existing indexes on
6770 textual columns.</para></listitem>
6771
6772 <listitem><para>Set locale environment variables during postmaster startup
6773 to ensure that <application>plperl</> won't change the locale later</para>
6774 <para>This fixes a problem that occurred if the <application>postmaster</> was
6775 started with environment variables specifying a different locale than what
6776 <application>initdb</> had been told.  Under these conditions, any use of
6777 <application>plperl</> was likely to lead to corrupt indexes.  You might need
6778 <command>REINDEX</> to fix existing indexes on
6779 textual columns if this has happened to you.</para></listitem>
6780
6781 <listitem><para>Allow more flexible relocation of installation
6782 directories (Tom)</para>
6783 <para>Previous releases supported relocation only if all installation
6784 directory paths were the same except for the last component.</para></listitem>
6785
6786 <listitem><para>Prevent crashes caused by the use of
6787 <literal>ISO-8859-5</> and <literal>ISO-8859-9</> encodings
6788 (Tatsuo)</para></listitem>
6789
6790 <listitem><para>Fix longstanding bug in strpos() and regular expression
6791 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
6792 </para></listitem>
6793
6794 <listitem><para>Fix bug where COPY CSV mode considered any
6795 <literal>\.</> to terminate the copy data</para> <para>The new code
6796 requires <literal>\.</> to appear alone on a line, as per
6797 documentation.</para></listitem>
6798
6799 <listitem><para>Make COPY CSV mode quote a literal data value of
6800 <literal>\.</> to ensure it cannot be interpreted as the
6801 end-of-data marker (Bruce)</para></listitem>
6802
6803 <listitem><para>Various fixes for functions returning <literal>RECORD</>s
6804 (Tom) </para></listitem>
6805
6806 <listitem><para>Fix processing of <filename>postgresql.conf</> so a
6807 final line with no newline is processed properly (Tom)
6808 </para></listitem>
6809
6810 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
6811 which caused it not to use all available salt space for MD5 and
6812 XDES algorithms (Marko Kreen, Solar Designer)</para>
6813 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
6814
6815 <listitem><para>Fix autovacuum crash when processing expression indexes
6816 </para></listitem>
6817
6818 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
6819 rather than crashing, when the number of columns specified is different from
6820 what's actually returned by the query (Joe)</para></listitem>
6821
6822 </itemizedlist>
6823
6824   </sect2>
6825  </sect1>
6826
6827  <sect1 id="release-8-1-1">
6828   <title>Release 8.1.1</title>
6829
6830   <note>
6831   <title>Release date</title>
6832   <simpara>2005-12-12</simpara>
6833   </note>
6834
6835   <para>
6836    This release contains a variety of fixes from 8.1.0.
6837   </para>
6838
6839   <sect2>
6840    <title>Migration to Version 8.1.1</title>
6841
6842    <para>
6843     A dump/restore is not required for those running 8.1.X.
6844    </para>
6845   </sect2>
6846
6847   <sect2>
6848    <title>Changes</title>
6849
6850 <itemizedlist>
6851 <listitem><para>Fix incorrect optimizations of outer-join conditions
6852 (Tom)</para></listitem>
6853
6854 <listitem><para>Fix problems with wrong reported column names in cases
6855 involving sub-selects flattened by the optimizer (Tom)</para></listitem>
6856
6857 <listitem><para>Fix update failures in scenarios involving CHECK constraints,
6858 toasted columns, <emphasis>and</> indexes (Tom)</para></listitem>
6859
6860 <listitem><para>Fix bgwriter problems after recovering from errors
6861 (Tom)</para>
6862 <para>
6863 The background writer was found to leak buffer pins after write errors.
6864 While not fatal in itself, this might lead to mysterious blockages of
6865 later VACUUM commands.
6866 </para>
6867 </listitem>
6868
6869 <listitem><para>Prevent failure if client sends Bind protocol message
6870 when current transaction is already aborted</para></listitem>
6871
6872 <listitem><para><filename>/contrib/tsearch2</> and <filename>/contrib/ltree</>
6873 fixes (Teodor)</para></listitem>
6874
6875 <listitem><para>Fix problems with translated error messages in
6876 languages that require word reordering, such as Turkish; also problems with
6877 unexpected truncation of output strings and wrong display of the smallest
6878 possible bigint value (Andrew, Tom)</para>
6879 <para>
6880 These problems only appeared on platforms that were using our
6881 <filename>port/snprintf.c</> code, which includes BSD variants if
6882 <literal>--enable-nls</> was given, and perhaps others.  In addition,
6883 a different form of the translated-error-message problem could appear
6884 on Windows depending on which version of <filename>libintl</> was used.
6885 </para></listitem>
6886
6887 <listitem><para>Re-allow <literal>AM</>/<literal>PM</>, <literal>HH</>,
6888 <literal>HH12</>, and <literal>D</> format specifiers for
6889 <function>to_char(time)</> and <function>to_char(interval)</>.
6890 (<function>to_char(interval)</> should probably use
6891 <literal>HH24</>.) (Bruce)</para></listitem>
6892
6893 <listitem><para>AIX, HPUX, and MSVC compile fixes (Tom, Hiroshi
6894 Saito)</para></listitem>
6895
6896 <listitem><para>Optimizer improvements (Tom)</para></listitem>
6897
6898 <listitem><para>Retry file reads and writes after Windows
6899 NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
6900
6901 <listitem><para>Prevent <application>autovacuum</> from crashing during
6902 ANALYZE of expression index (Alvaro)</para></listitem>
6903
6904 <listitem><para>Fix problems with ON COMMIT DELETE ROWS temp
6905 tables</para></listitem>
6906
6907 <listitem><para>Fix problems when a trigger alters the output of a SELECT
6908 DISTINCT query</para></listitem>
6909
6910 <listitem><para>Add 8.1.0 release note item on how to migrate invalid
6911 <literal>UTF-8</> byte sequences (Paul Lindner)</para></listitem>
6912 </itemizedlist>
6913
6914   </sect2>
6915  </sect1>
6916
6917  <sect1 id="release-8-1">
6918   <title>Release 8.1</title>
6919
6920   <note>
6921    <title>Release date</title>
6922    <simpara>2005-11-08</simpara>
6923   </note>
6924
6925   <sect2>
6926    <title>Overview</title>
6927
6928    <para>
6929     Major changes in this release:
6930    </para>
6931
6932    <variablelist>
6933
6934     <varlistentry>
6935      <term>
6936       Improve concurrent access to the shared buffer cache (Tom)
6937      </term>
6938
6939      <listitem>
6940       <para>
6941        Access to the shared buffer cache was identified as a
6942        significant scalability problem, particularly on multi-CPU
6943        systems. In this release, the way that locking is done in the
6944        buffer manager has been overhauled to reduce lock contention
6945        and improve scalability. The buffer manager has also been
6946        changed to use a <quote>clock sweep</quote> replacement
6947        policy.
6948       </para>
6949      </listitem>
6950     </varlistentry>
6951
6952     <varlistentry>
6953      <term>
6954       Allow index scans to use an intermediate in-memory bitmap (Tom)
6955      </term>
6956
6957      <listitem>
6958       <para>
6959        In previous releases, only a single index could be used to do
6960        lookups on a table. With this feature, if a query has
6961        <command>WHERE tab.col1 = 4 and tab.col2 = 9</>, and there is
6962        no multicolumn index on <literal>col1</> and <literal>col2</>,
6963        but there is an index on <literal>col1</> and another on
6964        <literal>col2</>, it is possible to search both indexes and
6965        combine the results in memory, then do heap fetches for only
6966        the rows matching both the <literal>col1</> and
6967        <literal>col2</> restrictions. This is very useful in
6968        environments that have a lot of unstructured queries where it
6969        is impossible to create indexes that match all possible access
6970        conditions.  Bitmap scans are useful even with a single index,
6971        as they reduce the amount of random access needed; a bitmap
6972        index scan is efficient for retrieving fairly large fractions
6973        of the complete table, whereas plain index scans are not.
6974       </para>
6975      </listitem>
6976     </varlistentry>
6977
6978     <varlistentry>
6979      <term>
6980       Add two-phase commit (Heikki Linnakangas, Alvaro, Tom)
6981      </term>
6982
6983      <listitem>
6984       <para>
6985        Two-phase commit allows transactions to be "prepared" on several
6986        computers, and once all computers have successfully prepared
6987        their transactions (none failed), all transactions can be
6988        committed. Even if a machine crashes after a prepare, the
6989        prepared transaction can be committed after the machine is
6990        restarted. New syntax includes <command>PREPARE TRANSACTION</> and
6991        <command>COMMIT/ROLLBACK PREPARED</>. A new system view
6992        <literal>pg_prepared_xacts</> has also been added.
6993       </para>
6994      </listitem>
6995     </varlistentry>
6996
6997     <varlistentry>
6998      <term>
6999       Create a new role system that replaces users and groups
7000       (Stephen Frost)
7001      </term>
7002
7003      <listitem>
7004       <para>
7005        Roles are a combination of users and groups. Like users, they
7006        can have login capability, and like groups, a role can have
7007        other roles as members. Roles basically remove the distinction
7008        between users and groups. For example, a role can:
7009       </para>
7010
7011       <itemizedlist>
7012
7013        <listitem>
7014         <para>
7015           Have login capability (optionally)
7016         </para>
7017        </listitem>
7018
7019        <listitem>
7020         <para>
7021          Own objects
7022         </para>
7023        </listitem>
7024
7025        <listitem>
7026         <para>
7027          Hold access permissions for database objects
7028         </para>
7029        </listitem>
7030
7031        <listitem>
7032         <para>
7033          Inherit permissions from other roles it is a member of
7034         </para>
7035        </listitem>
7036
7037       </itemizedlist>
7038       <para>
7039        Once a user logs into a role, she obtains capabilities of
7040        the login role plus any inherited roles, and can use
7041        <command>SET ROLE</> to switch to other roles she is a member of.
7042        This feature is a generalization of the SQL standard's concept of
7043        roles.
7044        This change also replaces <structname>pg_shadow</> and
7045        <structname>pg_group</> by new role-capable catalogs
7046        <structname>pg_authid</> and <structname>pg_auth_members</>. The old
7047        tables are redefined as read-only views on the new role tables.
7048       </para>
7049      </listitem>
7050     </varlistentry>
7051
7052     <varlistentry>
7053      <term>
7054       Automatically use indexes for <function>MIN()</> and
7055       <function>MAX()</> (Tom)
7056      </term>
7057
7058      <listitem>
7059       <para>
7060        In previous releases, the only way to use an index for
7061        <function>MIN()</> or <function>MAX()</> was to rewrite the
7062        query as <command>SELECT col FROM tab ORDER BY col LIMIT 1</>.
7063        Index usage now happens automatically.
7064       </para>
7065      </listitem>
7066     </varlistentry>
7067
7068     <varlistentry>
7069      <term>
7070       Move <filename>/contrib/pg_autovacuum</> into the main server
7071       (Alvaro)
7072      </term>
7073
7074      <listitem>
7075       <para>
7076        Integrating autovacuum into the server allows it to be
7077        automatically started and stopped in sync with the database
7078        server, and allows autovacuum to be configured from
7079        <filename>postgresql.conf</>.
7080       </para>
7081      </listitem>
7082     </varlistentry>
7083
7084     <varlistentry>
7085      <term>
7086       Add shared row level locks using <command>SELECT ... FOR SHARE</>
7087       (Alvaro)
7088      </term>
7089
7090      <listitem>
7091       <para>
7092        While <productname>PostgreSQL</productname>'s MVCC locking
7093        allows <command>SELECT</> to never be blocked by writers and
7094        therefore does not need shared row locks for typical operations,
7095        shared locks are useful for applications that require shared row
7096        locking.  In particular this reduces the locking requirements
7097        imposed by referential integrity checks.
7098       </para>
7099      </listitem>
7100     </varlistentry>
7101
7102     <varlistentry>
7103      <term>
7104       Add dependencies on shared objects, specifically roles
7105       (Alvaro)
7106      </term>
7107
7108      <listitem>
7109       <para>
7110        This extension of the dependency mechanism prevents roles from
7111        being dropped while there are still database objects they own.
7112        Formerly it was possible to accidentally <quote>orphan</> objects by
7113        deleting their owner.  While this could be recovered from, it
7114        was messy and unpleasant.
7115       </para>
7116      </listitem>
7117     </varlistentry>
7118
7119     <varlistentry>
7120      <term>
7121       Improve performance for partitioned tables (Simon)
7122      </term>
7123
7124      <listitem>
7125       <para>
7126        The new <varname>constraint_exclusion</varname> configuration
7127        parameter avoids lookups on child tables where constraints indicate
7128        that no matching rows exist in the child table.
7129       </para>
7130       <para>
7131        This allows for a basic type of table partitioning. If child tables
7132        store separate key ranges and this is enforced using appropriate
7133        <command>CHECK</> constraints, the optimizer will skip child
7134        table accesses when the constraint guarantees no matching rows
7135        exist in the child table.
7136       </para>
7137      </listitem>
7138     </varlistentry>
7139
7140    </variablelist>
7141   </sect2>
7142
7143   <sect2>
7144    <title>Migration to Version 8.1</title>
7145
7146    <para>
7147     A dump/restore using <application>pg_dump</application> is required
7148     for those wishing to migrate data from any previous release.
7149    </para>
7150
7151    <para>
7152     The 8.0 release announced that the <function>to_char()</> function
7153     for intervals would be removed in 8.1. However, since no better API
7154     has been suggested, <function>to_char(interval)</> has been enhanced in
7155     8.1 and will remain in the server.
7156    </para>
7157
7158    <para>
7159     Observe the following incompatibilities:
7160    </para>
7161
7162    <itemizedlist>
7163
7164     <listitem>
7165      <para>
7166       <varname>add_missing_from</> is now false by default (Neil)
7167      </para>
7168      <para>
7169       By default, we now generate an error if a table is used in a query
7170       without a <literal>FROM</> reference.  The old behavior is still
7171       available, but the parameter must be set to 'true' to obtain it.
7172      </para>
7173
7174      <para>
7175       It might be necessary to set <varname>add_missing_from</> to true
7176       in order to load an existing dump file, if the dump contains any
7177       views or rules created using the implicit-<literal>FROM</> syntax.
7178       This should be a one-time annoyance, because
7179       <productname>PostgreSQL</productname> 8.1 will convert
7180       such views and rules to standard explicit-<literal>FROM</> syntax.
7181       Subsequent dumps will therefore not have the problem.
7182      </para>
7183     </listitem>
7184
7185     <listitem>
7186      <para>
7187       Cause input of a zero-length string (<literal>''</literal>) for
7188       <type>float4</type>/<type>float8</type>/<type>oid</type>
7189       to throw an error, rather than treating it as a zero (Neil)
7190      </para>
7191      <para>
7192       This change is consistent with the current handling of
7193       zero-length strings for integers. The schedule for this change
7194       was announced in 8.0.
7195      </para>
7196     </listitem>
7197
7198     <listitem>
7199      <para>
7200       <varname>default_with_oids</> is now false by default (Neil)
7201      </para>
7202      <para>
7203       With this option set to false, user-created tables no longer
7204       have an OID column unless <command>WITH OIDS</> is specified in
7205       <command>CREATE TABLE</>. Though OIDs have existed in all
7206       releases of <productname>PostgreSQL</>, their use is limited
7207       because they are only four bytes long and the counter is shared
7208       across all installed databases. The preferred way of uniquely
7209       identifying rows is via sequences and the <type>SERIAL</> type,
7210       which have been supported since <productname>PostgreSQL</> 6.4.
7211      </para>
7212     </listitem>
7213
7214     <listitem>
7215      <para>
7216       Add <literal>E''</> syntax so eventually ordinary strings can
7217       treat backslashes literally (Bruce)
7218      </para>
7219      <para>
7220       Currently <productname>PostgreSQL</productname> processes a
7221       backslash in a string literal as introducing a special escape sequence,
7222       e.g. <literal>\n</> or <literal>\010</>.
7223       While this allows easy entry of special values, it is
7224       nonstandard and makes porting of applications from other
7225       databases more difficult. For this reason, the
7226       <productname>PostgreSQL</productname> project is planning to
7227       remove the special meaning of backslashes in strings. For
7228       backward compatibility and for users who want special backslash
7229       processing, a new string syntax has been created. This new string
7230       syntax is formed by writing an <literal>E</> immediately preceding the
7231       single quote that starts the string, e.g. <literal>E'hi\n'</>. While
7232       this release does not change the handling of backslashes in strings, it
7233       does add new configuration parameters to help users migrate applications
7234       for future releases:
7235      </para>
7236      <itemizedlist>
7237
7238       <listitem>
7239        <para>
7240         <varname>standard_conforming_strings</> &mdash; does this release
7241         treat backslashes literally in ordinary strings?
7242        </para>
7243       </listitem>
7244
7245       <listitem>
7246       <para>
7247        <varname>escape_string_warning</> &mdash; warn about backslashes in
7248        ordinary (non-E) strings
7249       </para>
7250      </listitem>
7251
7252      </itemizedlist>
7253
7254      <para>
7255       The <varname>standard_conforming_strings</> value is read-only.
7256       Applications can retrieve the value to know how backslashes are
7257       processed.  (Presence of the parameter can also be taken as an
7258       indication that <literal>E''</> string syntax is supported.)
7259       In a future release, <varname>standard_conforming_strings</>
7260       will be true, meaning backslashes will be treated literally in
7261       non-E strings. To prepare for this change, use <literal>E''</>
7262       strings in places that need special backslash processing, and
7263       turn on <varname>escape_string_warning</> to find additional
7264       strings that need to be converted to use <literal>E''</>.
7265       Also, use two single-quotes (<literal>''</>) to embed a literal
7266       single-quote in a string, rather than the
7267       <productname>PostgreSQL</productname>-supported syntax of
7268       backslash single-quote (<literal>\'</>).  The former is
7269       standards-conforming and does not require the use of the
7270       <literal>E''</> string syntax.  You can also use the
7271       <literal>$$</> string syntax, which does not treat backslashes
7272       specially.
7273      </para>
7274     </listitem>
7275
7276     <listitem>
7277      <para>
7278       Make <command>REINDEX DATABASE</> reindex all indexes in the
7279       database (Tom)
7280      </para>
7281      <para>
7282       Formerly, <command>REINDEX DATABASE</> reindexed only
7283       system tables. This new behavior seems more intuitive. A new
7284       command <command>REINDEX SYSTEM</> provides the old functionality
7285       of reindexing just the system tables.
7286      </para>
7287     </listitem>
7288
7289     <listitem>
7290      <para>
7291       Read-only large object descriptors now obey MVCC snapshot semantics
7292      </para>
7293      <para>
7294       When a large object is opened with <literal>INV_READ</> (and not
7295       <literal>INV_WRITE</>), the data read from the descriptor will now
7296       reflect a <quote>snapshot</> of the large object's state at the
7297       time of the transaction snapshot in use by the query that called
7298       <function>lo_open()</>.  To obtain the old behavior of always
7299       returning the latest committed data, include <literal>INV_WRITE</>
7300       in the mode flags for <function>lo_open()</>.
7301      </para>
7302     </listitem>
7303
7304     <listitem>
7305      <para>
7306       Add proper dependencies for arguments of sequence functions (Tom)
7307      </para>
7308      <para>
7309       In previous releases, sequence names passed to <function>nextval()</>,
7310       <function>currval()</>, and <function>setval()</> were stored as
7311       simple text strings, meaning that renaming or dropping a
7312       sequence used in a <literal>DEFAULT</> clause made the clause
7313       invalid. This release stores all newly-created sequence function
7314       arguments as internal OIDs, allowing them to track sequence
7315       renaming, and adding dependency information that prevents
7316       improper sequence removal. It also makes such <literal>DEFAULT</>
7317       clauses immune to schema renaming and search path changes.
7318      </para>
7319      <para>
7320       Some applications might rely on the old behavior of
7321       run-time lookup for sequence names. This can still be done by
7322       explicitly casting the argument to <type>text</>, for example
7323       <literal>nextval('myseq'::text)</>.
7324      </para>
7325      <para>
7326       Pre-8.1 database dumps loaded into 8.1 will use the old text-based
7327       representation and therefore will not have the features of
7328       OID-stored arguments. However, it is possible to update a
7329       database containing text-based <literal>DEFAULT</> clauses.
7330       First, save this query into a file, such as <filename>fixseq.sql</>:
7331 <programlisting>
7332 SELECT  'ALTER TABLE ' ||
7333    pg_catalog.quote_ident(n.nspname) || '.' ||
7334    pg_catalog.quote_ident(c.relname) ||
7335    ' ALTER COLUMN ' || pg_catalog.quote_ident(a.attname) ||
7336    ' SET DEFAULT ' ||
7337    regexp_replace(d.adsrc,
7338                   $$val\(\(('[^']*')::text\)::regclass$$,
7339                   $$val(\1$$,
7340                   'g') ||
7341    ';'
7342 FROM    pg_namespace n, pg_class c, pg_attribute a, pg_attrdef d
7343 WHERE   n.oid = c.relnamespace AND
7344    c.oid = a.attrelid AND
7345    a.attrelid = d.adrelid AND
7346    a.attnum = d.adnum AND
7347    d.adsrc ~ $$val\(\('[^']*'::text\)::regclass$$;
7348 </programlisting>
7349       Next, run the query against a database to find what
7350       adjustments are required, like this for database <literal>db1</>:
7351 <programlisting>
7352 psql -t -f fixseq.sql db1
7353 </programlisting>
7354       This will show the <command>ALTER TABLE</> commands needed to
7355       convert the database to the newer OID-based representation.
7356       If the commands look reasonable, run this to update the database:
7357 <programlisting>
7358 psql -t -f fixseq.sql db1 | psql -e db1
7359 </programlisting>
7360       This process must be repeated in each database to be updated.
7361      </para>
7362     </listitem>
7363
7364     <listitem>
7365      <para>
7366       In <application>psql</application>, treat unquoted
7367       <literal>\{digit}+</> sequences as octal (Bruce)
7368      </para>
7369      <para>
7370       In previous releases, <literal>\{digit}+</> sequences were
7371       treated as decimal, and only <literal>\0{digit}+</> were treated
7372       as octal. This change was made for consistency.
7373      </para>
7374     </listitem>
7375
7376     <listitem>
7377      <para>
7378       Remove grammar productions for prefix and postfix <literal>%</>
7379       and <literal>^</> operators
7380       (Tom)
7381      </para>
7382      <para>
7383       These have never been documented and complicated the use of the
7384       modulus operator (<literal>%</>) with negative numbers.
7385      </para>
7386     </listitem>
7387
7388     <listitem>
7389      <para>
7390       Make <literal>&amp;&lt;</> and <literal>&amp;&gt;</> for polygons
7391       consistent with the box "over" operators (Tom)
7392      </para>
7393     </listitem>
7394
7395     <listitem>
7396      <para>
7397       <command>CREATE LANGUAGE</> can ignore the provided arguments
7398       in favor of information from <structname>pg_pltemplate</>
7399       (Tom)
7400      </para>
7401      <para>
7402       A new system catalog <structname>pg_pltemplate</> has been defined
7403       to carry information about the preferred definitions of procedural
7404       languages (such as whether they have validator functions).  When
7405       an entry exists in this catalog for the language being created,
7406       <command>CREATE LANGUAGE</> will ignore all its parameters except the
7407       language name and instead use the catalog information.  This measure
7408       was taken because of increasing problems with obsolete language
7409       definitions being loaded by old dump files.  As of 8.1,
7410       <application>pg_dump</> will dump procedural language definitions as
7411       just <command>CREATE LANGUAGE <replaceable>name</></command>, relying
7412       on a template entry to exist at load time.  We expect this will be a
7413       more future-proof representation.
7414      </para>
7415     </listitem>
7416
7417     <listitem>
7418      <para>
7419       Make <function>pg_cancel_backend(int)</function> return a
7420       <type>boolean</type> rather than an <type>integer</type> (Neil)
7421      </para>
7422     </listitem>
7423
7424     <listitem>
7425      <para>
7426       Some users are having problems loading UTF-8 data into 8.1.X.
7427       This is because previous versions allowed invalid UTF-8 byte
7428       sequences to be entered into the database, and this release
7429       properly accepts only valid UTF-8 sequences. One way to correct a
7430       dumpfile is to run the command <command>iconv -c -f UTF-8 -t
7431       UTF-8 -o cleanfile.sql dumpfile.sql</>. The <literal>-c</> option
7432       removes invalid character sequences. A diff of the two files will
7433       show the sequences that are invalid. <command>iconv</> reads the
7434       entire input file into memory so it might be necessary to use
7435       <application>split</> to break up the dump into multiple smaller
7436       files for processing.
7437      </para>
7438     </listitem>
7439
7440    </itemizedlist>
7441   </sect2>
7442
7443   <sect2>
7444    <title>Additional Changes</title>
7445
7446    <para>
7447     Below you will find a detailed account of the additional changes
7448     between <productname>PostgreSQL</productname> 8.1 and the
7449     previous major release.
7450    </para>
7451
7452    <sect3>
7453     <title>Performance Improvements</title>
7454     <itemizedlist>
7455
7456      <listitem>
7457       <para>
7458        Improve GiST and R-tree index performance (Neil)
7459       </para>
7460      </listitem>
7461
7462      <listitem>
7463       <para>
7464        Improve the optimizer, including auto-resizing of hash joins
7465        (Tom)
7466       </para>
7467      </listitem>
7468
7469      <listitem>
7470       <para>
7471        Overhaul internal API in several areas
7472       </para>
7473      </listitem>
7474
7475      <listitem>
7476       <para>
7477        Change WAL record CRCs from 64-bit to 32-bit (Tom)
7478       </para>
7479       <para>
7480        We determined that the extra cost of computing 64-bit CRCs was
7481        significant, and the gain in reliability too marginal to justify it.
7482       </para>
7483      </listitem>
7484
7485      <listitem>
7486       <para>
7487        Prevent writing large empty gaps in WAL pages (Tom)
7488       </para>
7489      </listitem>
7490
7491      <listitem>
7492       <para>
7493        Improve spinlock behavior on SMP machines, particularly Opterons (Tom)
7494       </para>
7495      </listitem>
7496
7497      <listitem>
7498       <para>
7499        Allow nonconsecutive index columns to be used in a multicolumn
7500        index (Tom)
7501       </para>
7502       <para>
7503        For example, this allows an index on columns a,b,c to be used in
7504        a query with <command>WHERE a = 4 and c = 10</>.
7505       </para>
7506      </listitem>
7507
7508      <listitem>
7509       <para>
7510        Skip WAL logging for <command>CREATE TABLE AS</> /
7511        <command>SELECT INTO</> (Simon)
7512       </para>
7513       <para>
7514        Since a crash during <command>CREATE TABLE AS</> would cause the
7515        table to be dropped during recovery, there is no reason to WAL
7516        log as the table is loaded.  (Logging still happens if WAL
7517        archiving is enabled, however.)
7518       </para>
7519      </listitem>
7520
7521      <listitem>
7522       <para>
7523        Allow concurrent GiST index access (Teodor, Oleg)
7524       </para>
7525      </listitem>
7526
7527      <listitem>
7528       <para>
7529        Add configuration parameter <varname>full_page_writes</> to
7530        control writing full pages to WAL (Bruce)
7531       </para>
7532       <para>
7533        To prevent partial disk writes from corrupting the database,
7534        <productname>PostgreSQL</productname> writes a complete copy of
7535        each database disk page to WAL the first time it is modified
7536        after a checkpoint. This option turns off that functionality for more
7537        speed.  This is safe to use with battery-backed disk caches where
7538        partial page writes cannot happen.
7539       </para>
7540      </listitem>
7541
7542      <listitem>
7543       <para>
7544        Use <literal>O_DIRECT</> if available when using
7545        <literal>O_SYNC</> for <varname>wal_sync_method</varname>
7546        (Itagaki Takahiro)
7547       </para>
7548       <para>
7549        <literal>O_DIRECT</> causes disk writes to bypass the kernel
7550        cache, and for WAL writes, this improves performance.
7551       </para>
7552      </listitem>
7553
7554      <listitem>
7555       <para>
7556        Improve <command>COPY FROM</> performance (Alon Goldshuv)
7557       </para>
7558       <para>
7559        This was accomplished by reading <command>COPY</> input in
7560        larger chunks, rather than character by character.
7561       </para>
7562      </listitem>
7563
7564      <listitem>
7565       <para>
7566        Improve the performance of <function>COUNT()</function>,
7567        <function>SUM</function>, <function>AVG()</function>,
7568        <function>STDDEV()</function>, and
7569        <function>VARIANCE()</function> (Neil, Tom)
7570       </para>
7571      </listitem>
7572     </itemizedlist>
7573    </sect3>
7574
7575    <sect3>
7576     <title>Server Changes</title>
7577     <itemizedlist>
7578
7579      <listitem>
7580       <para>
7581        Prevent problems due to transaction ID (XID) wraparound (Tom)
7582       </para>
7583       <para>
7584        The server will now warn when the transaction counter approaches
7585        the wraparound point.  If the counter becomes too close to wraparound,
7586        the server will stop accepting queries.  This ensures that data is
7587        not lost before needed vacuuming is performed.
7588       </para>
7589      </listitem>
7590
7591      <listitem>
7592       <para>
7593        Fix problems with object IDs (OIDs) conflicting with existing system
7594        objects after the OID counter has wrapped around (Tom)
7595       </para>
7596      </listitem>
7597
7598      <listitem>
7599       <para>
7600        Add warning about the need to increase
7601        <varname>max_fsm_relations</> and <varname>max_fsm_pages</>
7602        during <command>VACUUM</> (Ron Mayer)
7603       </para>
7604      </listitem>
7605
7606      <listitem>
7607       <para>
7608        Add <varname>temp_buffers</> configuration parameter to allow
7609        users to determine the size of the local buffer area for
7610        temporary table access (Tom)
7611       </para>
7612      </listitem>
7613
7614      <listitem>
7615       <para>
7616        Add session start time and client IP address to
7617        <literal>pg_stat_activity</> (Magnus)
7618       </para>
7619      </listitem>
7620
7621      <listitem>
7622       <para>
7623        Adjust <literal>pg_stat</> views for bitmap scans (Tom)
7624       </para>
7625       <para>
7626        The meanings of some of the fields have changed slightly.
7627       </para>
7628      </listitem>
7629
7630      <listitem>
7631       <para>
7632        Enhance <literal>pg_locks</> view (Tom)
7633       </para>
7634      </listitem>
7635
7636      <listitem>
7637       <para>
7638        Log queries for client-side <command>PREPARE</> and
7639        <command>EXECUTE</> (Simon)
7640       </para>
7641      </listitem>
7642
7643      <listitem>
7644       <para>
7645        Allow Kerberos name and user name case sensitivity to be
7646        specified in <filename>postgresql.conf</> (Magnus)
7647       </para>
7648      </listitem>
7649
7650      <listitem>
7651       <para>
7652        Add configuration parameter <varname>krb_server_hostname</> so
7653        that the server host name can be specified as part of service
7654        principal (Todd Kover)
7655       </para>
7656       <para>
7657        If not set, any service principal matching an entry in the
7658        keytab can be used. This is new Kerberos matching behavior in
7659        this release.
7660       </para>
7661      </listitem>
7662
7663      <listitem>
7664       <para>
7665        Add <varname>log_line_prefix</> options for millisecond
7666        timestamps (<literal>%m</>) and remote host (<literal>%h</>) (Ed
7667        L.)
7668       </para>
7669      </listitem>
7670
7671      <listitem>
7672       <para>
7673        Add WAL logging for GiST indexes (Teodor, Oleg)
7674       </para>
7675       <para>
7676        GiST indexes are now safe for crash and point-in-time recovery.
7677       </para>
7678      </listitem>
7679
7680      <listitem>
7681       <para>
7682        Remove old <filename>*.backup</> files when we do
7683        <function>pg_stop_backup()</> (Bruce)
7684       </para>
7685       <para>
7686        This prevents a large number of <filename>*.backup</> files from
7687        existing in <filename>pg_xlog/</>.
7688       </para>
7689      </listitem>
7690
7691      <listitem>
7692       <para>
7693        Add configuration parameters to control TCP/IP keep-alive
7694        times for idle, interval, and count (Oliver Jowett)
7695       </para>
7696
7697       <para>
7698        These values can be changed to allow more rapid detection of
7699        lost client connections.
7700       </para>
7701      </listitem>
7702
7703      <listitem>
7704       <para>
7705        Add per-user and per-database connection limits (Petr Jelinek)
7706       </para>
7707       <para>
7708        Using <command>ALTER USER</> and <command>ALTER DATABASE</>,
7709        limits can now be enforced on the maximum number of sessions that
7710        can concurrently connect as a specific user or to a specific database.
7711        Setting the limit to zero disables user or database connections.
7712       </para>
7713      </listitem>
7714
7715      <listitem>
7716       <para>
7717        Allow more than two gigabytes of shared memory and per-backend
7718        work memory on 64-bit machines (Koichi Suzuki)
7719       </para>
7720      </listitem>
7721
7722      <listitem>
7723       <para>
7724        New system catalog <structname>pg_pltemplate</> allows overriding
7725        obsolete procedural-language definitions in dump files (Tom)
7726       </para>
7727      </listitem>
7728
7729     </itemizedlist>
7730    </sect3>
7731
7732
7733    <sect3>
7734     <title>Query Changes</title>
7735     <itemizedlist>
7736
7737      <listitem>
7738       <para>
7739        Add temporary views (Koju Iijima, Neil)
7740       </para>
7741      </listitem>
7742
7743      <listitem>
7744       <para>
7745        Fix <command>HAVING</> without any aggregate functions or
7746        <command>GROUP BY</> so that the query returns a single group (Tom)
7747       </para>
7748       <para>
7749        Previously, such a case would treat the <command>HAVING</>
7750        clause the same as a <command>WHERE</> clause.  This was not per spec.
7751       </para>
7752      </listitem>
7753
7754      <listitem>
7755       <para>
7756        Add <command>USING</> clause to allow additional tables to be
7757        specified to <command>DELETE</> (Euler Taveira de Oliveira, Neil)
7758       </para>
7759       <para>
7760        In prior releases, there was no clear method for specifying
7761        additional tables to be used for joins in a <command>DELETE</>
7762        statement. <command>UPDATE</> already has a <literal>FROM</>
7763        clause for this purpose.
7764       </para>
7765      </listitem>
7766
7767      <listitem>
7768       <para>
7769        Add support for <literal>\x</> hex escapes in backend and ecpg
7770        strings (Bruce)
7771       </para>
7772       <para>
7773        This is just like the standard C <literal>\x</> escape syntax.
7774        Octal escapes were already supported.
7775       </para>
7776      </listitem>
7777
7778      <listitem>
7779       <para>
7780        Add <command>BETWEEN SYMMETRIC</> query syntax (Pavel Stehule)
7781       </para>
7782       <para>
7783        This feature allows <command>BETWEEN</> comparisons without
7784        requiring the first value to be less than the second. For
7785        example, <command>2 BETWEEN [ASYMMETRIC] 3 AND 1</> returns
7786        false, while <command>2 BETWEEN SYMMETRIC 3 AND 1</> returns
7787        true. <command>BETWEEN ASYMMETRIC</> was already supported.
7788       </para>
7789      </listitem>
7790
7791      <listitem>
7792       <para>
7793        Add <command>NOWAIT</> option to <command>SELECT ... FOR
7794        UPDATE/SHARE</> (Hans-Juergen Schoenig)
7795       </para>
7796       <para>
7797        While the <varname>statement_timeout</> configuration
7798        parameter allows a query taking more than a certain amount of
7799        time to be cancelled, the <command>NOWAIT</> option allows a
7800        query to be canceled as soon as a <command>SELECT ... FOR
7801        UPDATE/SHARE</> command cannot immediately acquire a row lock.
7802       </para>
7803      </listitem>
7804     </itemizedlist>
7805    </sect3>
7806
7807
7808    <sect3>
7809     <title>Object Manipulation Changes</title>
7810     <itemizedlist>
7811
7812      <listitem>
7813       <para>
7814        Track dependencies of shared objects (Alvaro)
7815       </para>
7816       <para>
7817        <productname>PostgreSQL</productname> allows global tables
7818        (users, databases, tablespaces) to reference information in
7819        multiple databases. This addition adds dependency information
7820        for global tables, so, for example, user ownership can be
7821        tracked across databases, so a user who owns something in any
7822        database can no longer be removed. Dependency tracking already
7823        existed for database-local objects.
7824       </para>
7825      </listitem>
7826
7827      <listitem>
7828       <para>
7829        Allow limited <command>ALTER OWNER</> commands to be performed
7830        by the object owner (Stephen Frost)
7831       </para>
7832       <para>
7833        Prior releases allowed only superusers to change object owners.
7834        Now, ownership can be transferred if the user executing the command
7835        owns the object and would be able to create it as the new owner
7836        (that is, the user is a member of the new owning role and that role
7837        has the CREATE permission that would be needed to create the object
7838        afresh).
7839       </para>
7840      </listitem>
7841
7842      <listitem>
7843       <para>
7844        Add <command>ALTER</> object <command>SET SCHEMA</> capability
7845        for some object types (tables, functions, types) (Bernd Helmle)
7846       </para>
7847       <para>
7848        This allows objects to be moved to different schemas.
7849       </para>
7850      </listitem>
7851
7852      <listitem>
7853       <para>
7854        Add <command>ALTER TABLE ENABLE/DISABLE TRIGGER</command> to
7855        disable triggers (Satoshi Nagayasu)
7856       </para>
7857      </listitem>
7858
7859     </itemizedlist>
7860    </sect3>
7861
7862
7863    <sect3>
7864     <title>Utility Command Changes</title>
7865     <itemizedlist>
7866
7867      <listitem>
7868       <para>
7869        Allow <command>TRUNCATE</> to truncate multiple tables in a
7870        single command (Alvaro)
7871       </para>
7872       <para>
7873        Because of referential integrity checks, it is not allowed to
7874        truncate a table that is part of a referential integrity
7875        constraint. Using this new functionality, <command>TRUNCATE</>
7876        can be used to truncate such tables, if both tables involved in
7877        a referential integrity constraint are truncated in a single
7878        <command>TRUNCATE</> command.
7879       </para>
7880      </listitem>
7881
7882      <listitem>
7883       <para>
7884        Properly process carriage returns and line feeds in
7885        <command>COPY CSV</> mode (Andrew)
7886       </para>
7887       <para>
7888        In release 8.0, carriage returns and line feeds in <command>CSV
7889        COPY TO</> were processed in an inconsistent manner. (This was
7890        documented on the TODO list.)
7891       </para>
7892      </listitem>
7893
7894      <listitem>
7895       <para>
7896        Add <command>COPY WITH CSV HEADER</> to allow a header line as
7897        the first line in <command>COPY</> (Andrew)
7898       </para>
7899       <para>
7900        This allows handling of the common <command>CSV</> usage of
7901        placing the column names on the first line of the data file. For
7902        <command>COPY TO</>, the first line contains the column names,
7903        and for <command>COPY FROM</>, the first line is ignored.
7904       </para>
7905      </listitem>
7906
7907      <listitem>
7908       <para>
7909        On Windows, display better sub-second precision in
7910        <command>EXPLAIN ANALYZE</> (Magnus)
7911       </para>
7912      </listitem>
7913
7914      <listitem>
7915       <para>
7916        Add trigger duration display to <command>EXPLAIN ANALYZE</>
7917        (Tom)
7918       </para>
7919       <para>
7920        Prior releases included trigger execution time as part of the
7921        total execution time, but did not show it separately.  It is now
7922        possible to see how much time is spent in each trigger.
7923       </para>
7924      </listitem>
7925
7926      <listitem>
7927       <para>
7928        Add support for <literal>\x</> hex escapes in <command>COPY</>
7929        (Sergey Ten)
7930       </para>
7931       <para>
7932        Previous releases only supported octal escapes.
7933       </para>
7934      </listitem>
7935
7936      <listitem>
7937       <para>
7938        Make <command>SHOW ALL</> include variable descriptions
7939        (Matthias Schmidt)
7940       </para>
7941       <para>
7942        <command>SHOW</> varname still only displays the variable's
7943        value and does not include the description.
7944       </para>
7945      </listitem>
7946
7947      <listitem>
7948       <para>
7949        Make <application>initdb</application> create a new standard
7950        database called <literal>postgres</>, and convert utilities to
7951        use <literal>postgres</> rather than <literal>template1</> for
7952        standard lookups (Dave)
7953       </para>
7954       <para>
7955        In prior releases, <literal>template1</> was used both as a
7956        default connection for utilities like
7957        <application>createuser</application>, and as a template for
7958        new databases. This caused <command>CREATE DATABASE</> to
7959        sometimes fail, because a new database cannot be created if
7960        anyone else is in the template database. With this change, the
7961        default connection database is now <literal>postgres</>,
7962        meaning it is much less likely someone will be using
7963        <literal>template1</> during <command>CREATE DATABASE</>.
7964       </para>
7965      </listitem>
7966
7967      <listitem>
7968       <para>
7969        Create new <application>reindexdb</application> command-line
7970        utility by moving <filename>/contrib/reindexdb</> into the
7971        server (Euler Taveira de Oliveira)
7972       </para>
7973      </listitem>
7974
7975     </itemizedlist>
7976    </sect3>
7977
7978
7979    <sect3>
7980     <title>Data Type and Function Changes</title>
7981     <itemizedlist>
7982
7983      <listitem>
7984       <para>
7985        Add <function>MAX()</> and <function>MIN()</> aggregates for
7986        array types (Koju Iijima)
7987       </para>
7988      </listitem>
7989
7990      <listitem>
7991       <para>
7992        Fix <function>to_date()</> and <function>to_timestamp()</> to
7993        behave reasonably when <literal>CC</> and <literal>YY</> fields
7994        are both used (Karel Zak)
7995       </para>
7996       <para>
7997        If the format specification contains <literal>CC</> and a year
7998        specification is <literal>YYY</> or longer, ignore the
7999        <literal>CC</>. If the year specification is <literal>YY</> or
8000        shorter, interpret <literal>CC</> as the previous century.
8001       </para>
8002      </listitem>
8003
8004      <listitem>
8005       <para>
8006        Add <function>md5(bytea)</> (Abhijit Menon-Sen)
8007       </para>
8008       <para>
8009        <function>md5(text)</> already existed.
8010       </para>
8011      </listitem>
8012
8013      <listitem>
8014       <para>
8015        Add support for <command>numeric ^ numeric</> based on
8016        <function>power(numeric, numeric)</>
8017       </para>
8018       <para>
8019        The function already existed, but there was no operator assigned
8020        to it.
8021       </para>
8022      </listitem>
8023
8024      <listitem>
8025       <para>
8026        Fix <type>NUMERIC</> modulus by properly truncating the quotient
8027        during computation (Bruce)
8028       </para>
8029       <para>
8030        In previous releases, modulus for large values sometimes
8031        returned negative results due to rounding of the quotient.
8032       </para>
8033      </listitem>
8034
8035      <listitem>
8036       <para>
8037        Add a function <function>lastval()</> (Dennis Bj&ouml;rklund)
8038       </para>
8039       <para>
8040        <function>lastval()</> is a simplified version of
8041        <function>currval()</>. It automatically determines the proper
8042        sequence name based on the most recent <function>nextval()</> or
8043        <function>setval()</> call performed by the current session.
8044       </para>
8045      </listitem>
8046
8047      <listitem>
8048       <para>
8049        Add <function>to_timestamp(DOUBLE PRECISION) (Michael Glaesemann)</>
8050       </para>
8051       <para>
8052        Converts Unix seconds since 1970 to a <type>TIMESTAMP WITH
8053        TIMEZONE</>.
8054       </para>
8055      </listitem>
8056
8057      <listitem>
8058       <para>
8059        Add <function>pg_postmaster_start_time()</> function (Euler
8060        Taveira de Oliveira, Matthias Schmidt)
8061       </para>
8062      </listitem>
8063
8064      <listitem>
8065       <para>
8066        Allow the full use of time zone names in <command>AT TIME
8067        ZONE</>, not just the short list previously available (Magnus)
8068       </para>
8069       <para>
8070        Previously, only a predefined list of time zone names were
8071        supported by <command>AT TIME ZONE</>. Now any supported time
8072        zone name can be used, e.g.:
8073        <programlisting>
8074         SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London';
8075        </programlisting>
8076        In the above query, the time zone used is adjusted based on the
8077        daylight saving time rules that were in effect on the supplied
8078        date.
8079       </para>
8080      </listitem>
8081
8082      <listitem>
8083       <para>
8084        Add <function>GREATEST()</> and <function>LEAST()</> variadic
8085        functions (Pavel Stehule)
8086       </para>
8087       <para>
8088        These functions take a variable number of arguments and return
8089        the greatest or least value among the arguments.
8090       </para>
8091      </listitem>
8092
8093      <listitem>
8094       <para>
8095        Add <function>pg_column_size()</> (Mark Kirkwood)
8096       </para>
8097       <para>
8098        This returns storage size of a column, which might be compressed.
8099       </para>
8100      </listitem>
8101
8102      <listitem>
8103       <para>
8104        Add <function>regexp_replace()</> (Atsushi Ogawa)
8105       </para>
8106       <para>
8107        This allows regular expression replacement, like sed. An optional
8108        flag argument allows selection of global (replace all) and
8109        case-insensitive modes.
8110       </para>
8111      </listitem>
8112
8113      <listitem>
8114       <para>
8115        Fix interval division and multiplication (Bruce)
8116       </para>
8117       <para>
8118        Previous versions sometimes returned unjustified results, like
8119        <command>'4 months'::interval / 5</> returning <command>'1 mon
8120        -6 days'</>.
8121       </para>
8122      </listitem>
8123
8124      <listitem>
8125       <para>
8126        Fix roundoff behavior in timestamp, time, and interval output (Tom)
8127       </para>
8128       <para>
8129        This fixes some cases in which the seconds field would be shown as
8130        <literal>60</> instead of incrementing the higher-order fields.
8131       </para>
8132      </listitem>
8133
8134      <listitem>
8135       <para>
8136        Add a separate day field to type <type>interval</> so a one day
8137        interval can be distinguished from a 24 hour interval (Michael
8138        Glaesemann)
8139       </para>
8140       <para>
8141        Days that contain a daylight saving time adjustment are not 24
8142        hours long, but typically 23 or 25 hours.  This change creates a
8143        conceptual distinction between intervals of <quote>so many days</>
8144        and intervals of <quote>so many hours</>.  Adding
8145        <literal>1 day</> to a timestamp now gives the same local time on
8146        the next day even if a daylight saving time adjustment occurs
8147        between, whereas adding <literal>24 hours</> will give a different
8148        local time when this happens.  For example, under US DST rules:
8149        <programlisting>
8150         '2005-04-03 00:00:00-05' + '1 day' = '2005-04-04 00:00:00-04'
8151         '2005-04-03 00:00:00-05' + '24 hours' = '2005-04-04 01:00:00-04'
8152        </programlisting>
8153       </para>
8154      </listitem>
8155
8156      <listitem>
8157       <para>
8158        Add <function>justify_days()</> and <function>justify_hours()</>
8159        (Michael Glaesemann)
8160       </para>
8161       <para>
8162        These functions, respectively, adjust days to an appropriate
8163        number of full months and days, and adjust hours to an
8164        appropriate number of full days and hours.
8165       </para>
8166      </listitem>
8167
8168      <listitem>
8169       <para>
8170        Move <filename>/contrib/dbsize</> into the backend, and rename
8171        some of the functions (Dave Page, Andreas Pflug)
8172       </para>
8173       <para>
8174        <itemizedlist>
8175
8176         <listitem>
8177          <para>
8178            <function>pg_tablespace_size()</>
8179          </para>
8180         </listitem>
8181
8182         <listitem>
8183          <para>
8184           <function>pg_database_size()</>
8185          </para>
8186         </listitem>
8187
8188         <listitem>
8189          <para>
8190           <function>pg_relation_size()</>
8191          </para>
8192         </listitem>
8193
8194         <listitem>
8195          <para>
8196           <function>pg_total_relation_size()</>
8197          </para>
8198         </listitem>
8199
8200         <listitem>
8201          <para>
8202           <function>pg_size_pretty()</>
8203          </para>
8204         </listitem>
8205
8206        </itemizedlist>
8207       </para>
8208       <para>
8209        <function>pg_total_relation_size()</> includes indexes and TOAST
8210        tables.
8211       </para>
8212      </listitem>
8213
8214      <listitem>
8215       <para>
8216        Add functions for read-only file access to the cluster directory
8217        (Dave Page, Andreas Pflug)
8218       </para>
8219       <para>
8220        <itemizedlist>
8221
8222         <listitem>
8223          <para>
8224           <function>pg_stat_file()</>
8225          </para>
8226         </listitem>
8227
8228         <listitem>
8229          <para>
8230           <function>pg_read_file()</>
8231          </para>
8232         </listitem>
8233
8234         <listitem>
8235          <para>
8236           <function>pg_ls_dir()</>
8237          </para>
8238         </listitem>
8239
8240        </itemizedlist>
8241       </para>
8242      </listitem>
8243
8244      <listitem>
8245       <para>
8246        Add <function>pg_reload_conf()</> to force reloading of the
8247        configuration files (Dave Page, Andreas Pflug)
8248       </para>
8249      </listitem>
8250
8251      <listitem>
8252       <para>
8253        Add <function>pg_rotate_logfile()</> to force rotation of the
8254        server log file (Dave Page, Andreas Pflug)
8255       </para>
8256      </listitem>
8257
8258      <listitem>
8259       <para>
8260        Change <literal>pg_stat_*</> views to include TOAST tables (Tom)
8261       </para>
8262      </listitem>
8263
8264     </itemizedlist>
8265    </sect3>
8266
8267
8268    <sect3>
8269     <title>Encoding and Locale Changes</title>
8270     <itemizedlist>
8271
8272      <listitem>
8273       <para>
8274        Rename some encodings to be more consistent and to follow
8275        international standards (Bruce)
8276       </para>
8277       <para>
8278        <itemizedlist>
8279
8280         <listitem>
8281          <para>
8282           <literal>UNICODE</> is now <literal>UTF8</>
8283          </para>
8284         </listitem>
8285
8286         <listitem>
8287          <para>
8288           <literal>ALT</> is now <literal>WIN866</>
8289          </para>
8290         </listitem>
8291
8292         <listitem>
8293          <para>
8294           <literal>WIN</> is now <literal>WIN1251</>
8295          </para>
8296         </listitem>
8297
8298         <listitem>
8299          <para>
8300          <literal>TCVN</> is now <literal>WIN1258</>
8301          </para>
8302         </listitem>
8303
8304        </itemizedlist>
8305       </para>
8306
8307       <para>
8308        The original names still work.
8309       </para>
8310      </listitem>
8311
8312      <listitem>
8313       <para>
8314        Add support for <literal>WIN1252</> encoding (Roland Volkmann)
8315       </para>
8316      </listitem>
8317
8318      <listitem>
8319       <para>
8320        Add support for four-byte <literal>UTF8</> characters (John
8321        Hansen)
8322       </para>
8323       <para>
8324        Previously only one, two, and three-byte <literal>UTF8</> characters
8325        were supported. This is particularly important for support for
8326        some Chinese character sets.
8327       </para>
8328      </listitem>
8329
8330      <listitem>
8331       <para>
8332        Allow direct conversion between <literal>EUC_JP</> and
8333        <literal>SJIS</> to improve performance (Atsushi Ogawa)
8334       </para>
8335      </listitem>
8336
8337      <listitem>
8338       <para>
8339        Allow the UTF8 encoding to work on Windows (Magnus)
8340       </para>
8341       <para>
8342        This is done by mapping UTF8 to the Windows-native UTF16
8343        implementation.
8344       </para>
8345      </listitem>
8346
8347     </itemizedlist>
8348    </sect3>
8349
8350
8351    <sect3>
8352     <title>General Server-Side Language Changes</title>
8353     <itemizedlist>
8354
8355      <listitem>
8356       <para>
8357        Fix <command>ALTER LANGUAGE RENAME</> (Sergey Yatskevich)
8358       </para>
8359      </listitem>
8360
8361      <listitem>
8362       <para>
8363        Allow function characteristics, like strictness and volatility,
8364        to be modified via <command>ALTER FUNCTION</> (Neil)
8365       </para>
8366      </listitem>
8367
8368      <listitem>
8369       <para>
8370        Increase the maximum number of function arguments to 100 (Tom)
8371       </para>
8372      </listitem>
8373
8374      <listitem>
8375       <para>
8376        Allow SQL and PL/PgSQL functions to use <command>OUT</> and
8377        <command>INOUT</> parameters (Tom)
8378       </para>
8379       <para>
8380        <command>OUT</> is an alternate way for a function to return
8381        values. Instead of using <command>RETURN</>, values can be
8382        returned by assigning to parameters declared as <command>OUT</> or
8383        <command>INOUT</>.  This is notationally simpler in some cases,
8384        particularly so when multiple values need to be returned.
8385        While returning multiple values from a function
8386        was possible in previous releases, this greatly simplifies the
8387        process.  (The feature will be extended to other server-side
8388        languages in future releases.)
8389       </para>
8390      </listitem>
8391
8392      <listitem>
8393       <para>
8394        Move language handler functions into the <literal>pg_catalog</> schema
8395       </para>
8396       <para>
8397        This makes it easier to drop the public schema if desired.
8398       </para>
8399      </listitem>
8400
8401      <listitem>
8402       <para>
8403        Add <function>SPI_getnspname()</function> to SPI (Neil)
8404       </para>
8405      </listitem>
8406
8407     </itemizedlist>
8408    </sect3>
8409
8410    <sect3>
8411     <title>PL/PgSQL Server-Side Language Changes</title>
8412     <itemizedlist>
8413
8414      <listitem>
8415       <para>
8416        Overhaul the memory management of PL/PgSQL functions (Neil)
8417       </para>
8418       <para>
8419        The parsetree of each function is now stored in a separate
8420        memory context. This allows this memory to be easily reclaimed
8421        when it is no longer needed.
8422       </para>
8423      </listitem>
8424
8425      <listitem>
8426       <para>
8427        Check function syntax at <command>CREATE FUNCTION</> time,
8428        rather than at runtime (Neil)
8429       </para>
8430       <para>
8431        Previously, most syntax errors were reported only when the
8432        function was executed.
8433       </para>
8434      </listitem>
8435
8436      <listitem>
8437       <para>
8438        Allow <command>OPEN</> to open non-<command>SELECT</> queries
8439        like <command>EXPLAIN</> and <command>SHOW</> (Tom)
8440       </para>
8441      </listitem>
8442
8443      <listitem>
8444       <para>
8445        No longer require functions to issue a <command>RETURN</>
8446        statement (Tom)
8447       </para>
8448       <para>
8449        This is a byproduct of the newly added <command>OUT</> and
8450        <command>INOUT</> functionality.  <command>RETURN</> can
8451        be omitted when it is not needed to provide the function's
8452        return value.
8453       </para>
8454      </listitem>
8455
8456      <listitem>
8457       <para>
8458        Add support for an optional <command>INTO</> clause to
8459        PL/PgSQL's <command>EXECUTE</> statement (Pavel Stehule, Neil)
8460       </para>
8461      </listitem>
8462
8463      <listitem>
8464       <para>
8465        Make <command>CREATE TABLE AS</> set <command>ROW_COUNT</> (Tom)
8466       </para>
8467      </listitem>
8468
8469      <listitem>
8470       <para>
8471        Define <literal>SQLSTATE</> and <literal>SQLERRM</> to return
8472        the <literal>SQLSTATE</> and error message of the current
8473        exception (Pavel Stehule, Neil)
8474       </para>
8475       <para>
8476        These variables are only defined inside exception blocks.
8477       </para>
8478      </listitem>
8479
8480      <listitem>
8481       <para>
8482        Allow the parameters to the <command>RAISE</> statement to be
8483        expressions (Pavel Stehule, Neil)
8484       </para>
8485      </listitem>
8486
8487      <listitem>
8488       <para>
8489        Add a loop <command>CONTINUE</> statement (Pavel Stehule, Neil)
8490       </para>
8491      </listitem>
8492
8493      <listitem>
8494       <para>
8495        Allow block and loop labels (Pavel Stehule)
8496       </para>
8497      </listitem>
8498
8499     </itemizedlist>
8500    </sect3>
8501
8502
8503    <sect3>
8504     <title>PL/Perl Server-Side Language Changes</title>
8505     <itemizedlist>
8506
8507      <listitem>
8508       <para>
8509        Allow large result sets to be returned efficiently (Abhijit
8510        Menon-Sen)
8511       </para>
8512       <para>
8513        This allows functions to use <function>return_next()</> to avoid
8514        building the entire result set in memory.
8515       </para>
8516      </listitem>
8517
8518      <listitem>
8519       <para>
8520        Allow one-row-at-a-time retrieval of query results (Abhijit Menon-Sen)
8521       </para>
8522       <para>
8523        This allows functions to use <function>spi_query()</> and
8524        <function>spi_fetchrow()</> to avoid accumulating the entire
8525        result set in memory.
8526       </para>
8527      </listitem>
8528
8529      <listitem>
8530       <para>
8531        Force PL/Perl to handle strings as <literal>UTF8</> if the
8532        server encoding is <literal>UTF8</> (David Kamholz)
8533       </para>
8534      </listitem>
8535
8536      <listitem>
8537       <para>
8538        Add a validator function for PL/Perl (Andrew)
8539       </para>
8540       <para>
8541        This allows syntax errors to be reported at definition time,
8542        rather than execution time.
8543       </para>
8544      </listitem>
8545
8546      <listitem>
8547       <para>
8548        Allow PL/Perl to return a Perl array when the function returns
8549        an array type (Andrew)
8550       </para>
8551       <para>
8552        This basically maps <productname>PostgreSQL</productname> arrays
8553        to Perl arrays.
8554       </para>
8555      </listitem>
8556
8557      <listitem>
8558       <para>
8559        Allow Perl nonfatal warnings to generate <command>NOTICE</>
8560        messages (Andrew)
8561       </para>
8562      </listitem>
8563
8564      <listitem>
8565       <para>
8566        Allow Perl's <literal>strict</> mode to be enabled (Andrew)
8567       </para>
8568      </listitem>
8569
8570     </itemizedlist>
8571    </sect3>
8572
8573
8574    <sect3>
8575     <title><application>psql</> Changes</title>
8576     <itemizedlist>
8577
8578      <listitem>
8579       <para>
8580        Add <command>\set ON_ERROR_ROLLBACK</> to allow statements in
8581        a transaction to error without affecting the rest of the
8582        transaction (Greg Sabino Mullane)
8583       </para>
8584       <para>
8585        This is basically implemented by wrapping every statement in a
8586        sub-transaction.
8587       </para>
8588      </listitem>
8589
8590      <listitem>
8591       <para>
8592        Add support for <literal>\x</> hex strings in
8593        <application>psql</> variables (Bruce)
8594       </para>
8595       <para>
8596        Octal escapes were already supported.
8597       </para>
8598      </listitem>
8599
8600      <listitem>
8601       <para>
8602        Add support for <command>troff -ms</> output format (Roger
8603        Leigh)
8604       </para>
8605      </listitem>
8606
8607      <listitem>
8608       <para>
8609        Allow the history file location to be controlled by
8610        <envar>HISTFILE</> (Andreas Seltenreich)
8611       </para>
8612       <para>
8613        This allows configuration of per-database history storage.
8614       </para>
8615      </listitem>
8616
8617      <listitem>
8618       <para>
8619        Prevent <command>\x</> (expanded mode) from affecting
8620        the output of <command>\d tablename</> (Neil)
8621       </para>
8622      </listitem>
8623
8624      <listitem>
8625       <para>
8626        Add <option>-L</> option to <application>psql</application> to
8627        log sessions (Lorne Sunley)
8628       </para>
8629       <para>
8630        This option was added because some operating systems do not have
8631        simple command-line activity logging functionality.
8632       </para>
8633      </listitem>
8634
8635      <listitem>
8636       <para>
8637        Make <command>\d</> show the tablespaces of indexes (Qingqing
8638        Zhou)
8639       </para>
8640      </listitem>
8641
8642      <listitem>
8643       <para>
8644        Allow <application>psql</application> help (<command>\h</>) to
8645        make a best guess on the proper help information (Greg Sabino
8646        Mullane)
8647       </para>
8648       <para>
8649        This allows the user to just add <command>\h</> to the front of
8650        the syntax error query and get help on the supported syntax.
8651        Previously any additional query text beyond the command name
8652        had to be removed to use <command>\h</>.
8653       </para>
8654      </listitem>
8655
8656      <listitem>
8657       <para>
8658        Add <command>\pset numericlocale</> to allow numbers to be
8659        output in a locale-aware format (Eugen Nedelcu)
8660       </para>
8661       <para>
8662        For example, using <literal>C</> locale <literal>100000</> would
8663        be output as <literal>100,000.0</> while a European locale might
8664        output this value as <literal>100.000,0</>.
8665       </para>
8666      </listitem>
8667
8668      <listitem>
8669       <para>
8670        Make startup banner show both server version number and
8671        <application>psql</>'s version number, when they are different (Bruce)
8672       </para>
8673       <para>
8674        Also, a warning will be shown if the server and <application>psql</>
8675        are from different major releases.
8676       </para>
8677      </listitem>
8678
8679     </itemizedlist>
8680    </sect3>
8681
8682
8683    <sect3>
8684     <title><application>pg_dump</> Changes</title>
8685     <itemizedlist>
8686
8687      <listitem>
8688       <para>
8689        Add <option>-n</> / <option>--schema</> switch to
8690        <application>pg_restore</> (Richard van den Berg)
8691       </para>
8692       <para>
8693        This allows just the objects in a specified schema to be restored.
8694       </para>
8695      </listitem>
8696
8697      <listitem>
8698       <para>
8699        Allow <application>pg_dump</> to dump large objects even in
8700        text mode (Tom)
8701       </para>
8702       <para>
8703        With this change, large objects are now always dumped; the former
8704        <option>-b</> switch is a no-op.
8705       </para>
8706      </listitem>
8707
8708      <listitem>
8709       <para>
8710        Allow <application>pg_dump</> to dump a consistent snapshot of
8711        large objects (Tom)
8712       </para>
8713      </listitem>
8714
8715      <listitem>
8716       <para>
8717        Dump comments for large objects (Tom)
8718       </para>
8719      </listitem>
8720
8721      <listitem>
8722       <para>
8723        Add <option>--encoding</> to <application>pg_dump</>
8724        (Magnus Hagander)
8725       </para>
8726       <para>
8727        This allows a database to be dumped in an encoding that is
8728        different from the server's encoding. This is valuable when
8729        transferring the dump to a machine with a different encoding.
8730       </para>
8731      </listitem>
8732
8733      <listitem>
8734       <para>
8735        Rely on <structname>pg_pltemplate</> for procedural languages (Tom)
8736       </para>
8737       <para>
8738        If the call handler for a procedural language is in the
8739        <literal>pg_catalog</> schema, <application>pg_dump</> does not
8740        dump the handler.  Instead, it dumps the language using just
8741        <command>CREATE LANGUAGE <replaceable>name</></command>,
8742        relying on the <structname>pg_pltemplate</> catalog to provide
8743        the language's creation parameters at load time.
8744       </para>
8745      </listitem>
8746
8747     </itemizedlist>
8748    </sect3>
8749
8750
8751    <sect3>
8752     <title><application>libpq</application> Changes</title>
8753     <itemizedlist>
8754
8755      <listitem>
8756       <para>
8757        Add a <envar>PGPASSFILE</> environment variable to specify the
8758        password file's filename (Andrew)
8759       </para>
8760      </listitem>
8761
8762      <listitem>
8763       <para>
8764        Add <function>lo_create()</>, that is similar to
8765        <function>lo_creat()</> but allows the OID of the large object
8766        to be specified (Tom)
8767       </para>
8768      </listitem>
8769
8770      <listitem>
8771       <para>
8772        Make <application>libpq</application> consistently return an error
8773        to the client application on <function>malloc()</function>
8774        failure (Neil)
8775       </para>
8776      </listitem>
8777     </itemizedlist>
8778    </sect3>
8779
8780
8781    <sect3>
8782     <title>Source Code Changes</title>
8783     <itemizedlist>
8784
8785      <listitem>
8786       <para>
8787        Fix <application>pgxs</> to support building against a relocated
8788        installation
8789       </para>
8790      </listitem>
8791
8792      <listitem>
8793       <para>
8794        Add spinlock support for the Itanium processor using Intel
8795        compiler (Vikram Kalsi)
8796       </para>
8797      </listitem>
8798
8799      <listitem>
8800       <para>
8801        Add Kerberos 5 support for Windows (Magnus)
8802       </para>
8803      </listitem>
8804
8805      <listitem>
8806       <para>
8807        Add Chinese FAQ (laser@pgsqldb.com)
8808       </para>
8809      </listitem>
8810
8811      <listitem>
8812       <para>
8813        Rename Rendezvous to Bonjour to match OS/X feature renaming
8814        (Bruce)
8815       </para>
8816      </listitem>
8817
8818      <listitem>
8819       <para>
8820        Add support for <literal>fsync_writethrough</literal> on
8821        Darwin (Chris Campbell)
8822       </para>
8823      </listitem>
8824
8825      <listitem>
8826       <para>
8827        Streamline the passing of information within the server, the
8828        optimizer, and the lock system (Tom)
8829       </para>
8830      </listitem>
8831
8832      <listitem>
8833       <para>
8834        Allow <application>pg_config</> to be compiled using MSVC (Andrew)
8835       </para>
8836       <para>
8837        This is required to build DBD::Pg using <application>MSVC</>.
8838       </para>
8839      </listitem>
8840
8841      <listitem>
8842       <para>
8843        Remove support for Kerberos V4 (Magnus)
8844       </para>
8845       <para>
8846        Kerberos 4 had security vulnerabilities and is no longer
8847        maintained.
8848       </para>
8849      </listitem>
8850
8851      <listitem>
8852       <para>
8853        Code cleanups (Coverity static analysis performed by
8854        EnterpriseDB)
8855       </para>
8856      </listitem>
8857
8858      <listitem>
8859       <para>
8860        Modify <filename>postgresql.conf</> to use documentation defaults
8861        <literal>on</>/<literal>off</> rather than
8862        <literal>true</>/<literal>false</> (Bruce)
8863       </para>
8864      </listitem>
8865
8866      <listitem>
8867       <para>
8868        Enhance <application>pg_config</> to be able to report more
8869        build-time values (Tom)
8870       </para>
8871      </listitem>
8872
8873      <listitem>
8874       <para>
8875        Allow <application>libpq</application> to be built thread-safe
8876        on Windows (Dave Page)
8877       </para>
8878      </listitem>
8879
8880      <listitem>
8881       <para>
8882        Allow IPv6 connections to be used on Windows (Andrew)
8883       </para>
8884      </listitem>
8885
8886      <listitem>
8887       <para>
8888        Add Server Administration documentation about I/O subsystem
8889        reliability (Bruce)
8890       </para>
8891      </listitem>
8892
8893      <listitem>
8894       <para>
8895        Move private declarations from <filename>gist.h</filename> to
8896        <filename>gist_private.h</filename> (Neil)
8897       </para>
8898
8899       <para>
8900        In previous releases, <filename>gist.h</> contained both the
8901        public GiST API (intended for use by authors of GiST index
8902        implementations) as well as some private declarations used by
8903        the implementation of GiST itself. The latter have been moved
8904        to a separate file, <filename>gist_private.h</>. Most GiST
8905        index implementations should be unaffected.
8906       </para>
8907      </listitem>
8908
8909      <listitem>
8910       <para>
8911        Overhaul GiST memory management (Neil)
8912       </para>
8913
8914       <para>
8915        GiST methods are now always invoked in a short-lived memory
8916        context. Therefore, memory allocated via <function>palloc()</>
8917        will be reclaimed automatically, so GiST index implementations
8918        do not need to manually release allocated memory via
8919        <function>pfree()</>.
8920       </para>
8921      </listitem>
8922     </itemizedlist>
8923    </sect3>
8924
8925
8926    <sect3>
8927     <title>Contrib Changes</title>
8928     <itemizedlist>
8929
8930      <listitem>
8931       <para>
8932        Add <filename>/contrib/pg_buffercache</> contrib module (Mark
8933        Kirkwood)
8934       </para>
8935       <para>
8936        This displays the contents of the buffer cache, for debugging and
8937        performance tuning purposes.
8938       </para>
8939      </listitem>
8940
8941      <listitem>
8942       <para>
8943        Remove <filename>/contrib/array</> because it is obsolete (Tom)
8944       </para>
8945      </listitem>
8946
8947      <listitem>
8948       <para>
8949        Clean up the <filename>/contrib/lo</> module (Tom)
8950       </para>
8951      </listitem>
8952
8953      <listitem>
8954       <para>
8955        Move <filename>/contrib/findoidjoins</> to
8956        <filename>/src/tools</> (Tom)
8957       </para>
8958      </listitem>
8959
8960      <listitem>
8961       <para>
8962        Remove the <literal>&lt;&lt;</>, <literal>&gt;&gt;</>,
8963        <literal>&amp;&lt;</>, and <literal>&amp;&gt;</> operators from
8964        <filename>/contrib/cube</>
8965       </para>
8966       <para>
8967        These operators were not useful.
8968       </para>
8969      </listitem>
8970
8971      <listitem>
8972       <para>
8973        Improve <filename>/contrib/btree_gist</> (Janko Richter)
8974       </para>
8975      </listitem>
8976
8977      <listitem>
8978       <para>
8979        Improve <filename>/contrib/pgbench</> (Tomoaki Sato, Tatsuo)
8980       </para>
8981       <para>
8982        There is now a facility for testing with SQL command scripts given
8983        by the user, instead of only a hard-wired command sequence.
8984       </para>
8985      </listitem>
8986
8987      <listitem>
8988       <para>
8989        Improve <filename>/contrib/pgcrypto</> (Marko Kreen)
8990       </para>
8991
8992       <itemizedlist>
8993
8994        <listitem>
8995         <para>
8996          Implementation of OpenPGP symmetric-key and public-key encryption
8997         </para>
8998         <para>
8999          Both RSA and Elgamal public-key algorithms are supported.
9000         </para>
9001        </listitem>
9002
9003        <listitem>
9004         <para>
9005          Stand alone build: include SHA256/384/512 hashes, Fortuna PRNG
9006         </para>
9007        </listitem>
9008
9009        <listitem>
9010         <para>
9011          OpenSSL build: support 3DES, use internal AES with OpenSSL &lt; 0.9.7
9012         </para>
9013        </listitem>
9014
9015        <listitem>
9016         <para>
9017          Take build parameters (OpenSSL, zlib) from <filename>configure</> result
9018         </para>
9019         <para>
9020          There is no need to edit the <filename>Makefile</> anymore.
9021         </para>
9022        </listitem>
9023
9024        <listitem>
9025         <para>
9026          Remove support for <filename>libmhash</> and <filename>libmcrypt</>
9027         </para>
9028        </listitem>
9029
9030       </itemizedlist>
9031      </listitem>
9032
9033     </itemizedlist>
9034    </sect3>
9035
9036   </sect2>
9037  </sect1>
9038
9039  <sect1 id="release-8-0-14">
9040   <title>Release 8.0.14</title>
9041
9042   <note>
9043   <title>Release date</title>
9044   <simpara>2007-09-17</simpara>
9045   </note>
9046
9047   <para>
9048    This release contains a variety of fixes from 8.0.13.
9049   </para>
9050
9051   <sect2>
9052    <title>Migration to Version 8.0.14</title>
9053
9054    <para>
9055     A dump/restore is not required for those running 8.0.X.  However,
9056     if you are upgrading from a version earlier than 8.0.6, see the release
9057     notes for 8.0.6.
9058    </para>
9059
9060   </sect2>
9061
9062   <sect2>
9063    <title>Changes</title>
9064
9065    <itemizedlist>
9066
9067     <listitem>
9068      <para>
9069       Prevent index corruption when a transaction inserts rows and
9070       then aborts close to the end of a concurrent <command>VACUUM</>
9071       on the same table (Tom)
9072      </para>
9073     </listitem>
9074
9075     <listitem>
9076      <para>
9077       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
9078      </para>
9079     </listitem>
9080
9081     <listitem>
9082      <para>
9083       Fix excessive logging of <acronym>SSL</> error messages (Tom)
9084      </para>
9085     </listitem>
9086
9087     <listitem>
9088      <para>
9089       Fix logging so that log messages are never interleaved when using
9090       the syslogger process (Andrew)
9091      </para>
9092     </listitem>
9093
9094     <listitem>
9095      <para>
9096       Fix crash when <varname>log_min_error_statement</> logging runs out
9097       of memory (Tom)
9098      </para>
9099     </listitem>
9100
9101     <listitem>
9102      <para>
9103       Fix incorrect handling of some foreign-key corner cases (Tom)
9104      </para>
9105     </listitem>
9106
9107     <listitem>
9108      <para>
9109       Prevent <command>CLUSTER</> from failing
9110       due to attempting to process temporary tables of other sessions (Alvaro)
9111      </para>
9112     </listitem>
9113
9114     <listitem>
9115      <para>
9116       Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
9117      </para>
9118     </listitem>
9119
9120     <listitem>
9121      <para>
9122       Windows socket improvements (Magnus)
9123      </para>
9124     </listitem>
9125
9126     <listitem>
9127      <para>
9128       Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
9129       because of possible encoding mismatches (Tom)
9130      </para>
9131     </listitem>
9132
9133     <listitem>
9134      <para>
9135       Require non-superusers who use <filename>/contrib/dblink</> to use only
9136       password authentication, as a security measure (Joe)
9137      </para>
9138     </listitem>
9139
9140    </itemizedlist>
9141
9142   </sect2>
9143  </sect1>
9144
9145  <sect1 id="release-8-0-13">
9146   <title>Release 8.0.13</title>
9147
9148   <note>
9149   <title>Release date</title>
9150   <simpara>2007-04-23</simpara>
9151   </note>
9152
9153   <para>
9154    This release contains a variety of fixes from 8.0.12,
9155    including a security fix.
9156   </para>
9157
9158   <sect2>
9159    <title>Migration to Version 8.0.13</title>
9160
9161    <para>
9162     A dump/restore is not required for those running 8.0.X.  However,
9163     if you are upgrading from a version earlier than 8.0.6, see the release
9164     notes for 8.0.6.
9165    </para>
9166
9167   </sect2>
9168
9169   <sect2>
9170    <title>Changes</title>
9171
9172    <itemizedlist>
9173
9174     <listitem>
9175     <para>
9176      Support explicit placement of the temporary-table schema within
9177      <varname>search_path</>, and disable searching it for functions
9178      and operators (Tom)
9179     </para>
9180     <para>
9181      This is needed to allow a security-definer function to set a
9182      truly secure value of <varname>search_path</>.  Without it,
9183      an unprivileged SQL user can use temporary objects to execute code
9184      with the privileges of the security-definer function (CVE-2007-2138).
9185      See <command>CREATE FUNCTION</> for more information.
9186     </para>
9187     </listitem>
9188
9189     <listitem>
9190     <para>
9191      <filename>/contrib/tsearch2</> crash fixes (Teodor)
9192     </para>
9193     </listitem>
9194
9195     <listitem>
9196     <para>
9197      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
9198      <command>UPDATE</> chains (Tom, Pavan Deolasee)
9199     </para>
9200     </listitem>
9201
9202     <listitem>
9203     <para>
9204      Fix PANIC during enlargement of a hash index (bug introduced in 8.0.10)
9205      (Tom)
9206     </para>
9207     </listitem>
9208
9209     <listitem>
9210     <para>
9211      Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
9212     </para>
9213     </listitem>
9214
9215    </itemizedlist>
9216
9217   </sect2>
9218  </sect1>
9219
9220  <sect1 id="release-8-0-12">
9221   <title>Release 8.0.12</title>
9222
9223   <note>
9224   <title>Release date</title>
9225   <simpara>2007-02-07</simpara>
9226   </note>
9227
9228   <para>
9229    This release contains one fix from 8.0.11.
9230   </para>
9231
9232   <sect2>
9233    <title>Migration to Version 8.0.12</title>
9234
9235    <para>
9236     A dump/restore is not required for those running 8.0.X.  However,
9237     if you are upgrading from a version earlier than 8.0.6, see the release
9238     notes for 8.0.6.
9239    </para>
9240
9241   </sect2>
9242
9243   <sect2>
9244    <title>Changes</title>
9245
9246    <itemizedlist>
9247
9248     <listitem>
9249     <para>
9250      Remove overly-restrictive check for type length in constraints and
9251      functional indexes(Tom)
9252     </para>
9253     </listitem>
9254
9255    </itemizedlist>
9256
9257   </sect2>
9258  </sect1>
9259
9260  <sect1 id="release-8-0-11">
9261   <title>Release 8.0.11</title>
9262
9263   <note>
9264   <title>Release date</title>
9265   <simpara>2007-02-05</simpara>
9266   </note>
9267
9268   <para>
9269    This release contains a variety of fixes from 8.0.10, including
9270    a security fix.
9271   </para>
9272
9273   <sect2>
9274    <title>Migration to Version 8.0.11</title>
9275
9276    <para>
9277     A dump/restore is not required for those running 8.0.X.  However,
9278     if you are upgrading from a version earlier than 8.0.6, see the release
9279     notes for 8.0.6.
9280    </para>
9281
9282   </sect2>
9283
9284   <sect2>
9285    <title>Changes</title>
9286
9287    <itemizedlist>
9288
9289     <listitem>
9290     <para>
9291      Remove security vulnerabilities that allowed connected users
9292      to read backend memory (Tom)
9293     </para>
9294     <para>
9295      The vulnerabilities involve suppressing the normal check that a SQL
9296      function returns the data type it's declared to, and changing the
9297      data type of a table column (CVE-2007-0555, CVE-2007-0556).  These
9298      errors can easily be exploited to cause a backend crash, and in
9299      principle might be used to read database content that the user
9300      should not be able to access.
9301     </para>
9302     </listitem>
9303
9304     <listitem>
9305     <para>
9306      Fix rare bug wherein btree index page splits could fail
9307      due to choosing an infeasible split point (Heikki Linnakangas)
9308     </para>
9309     </listitem>
9310
9311     <listitem>
9312     <para>
9313      Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
9314     </para>
9315     </listitem>
9316
9317     <listitem>
9318     <para>
9319      Tighten security of multi-byte character processing for UTF8 sequences
9320      over three bytes long (Tom)
9321     </para>
9322     </listitem>
9323
9324    </itemizedlist>
9325
9326   </sect2>
9327  </sect1>
9328
9329  <sect1 id="release-8-0-10">
9330   <title>Release 8.0.10</title>
9331
9332   <note>
9333   <title>Release date</title>
9334   <simpara>2007-01-08</simpara>
9335   </note>
9336
9337   <para>
9338    This release contains a variety of fixes from 8.0.9.
9339   </para>
9340
9341   <sect2>
9342    <title>Migration to Version 8.0.10</title>
9343
9344    <para>
9345     A dump/restore is not required for those running 8.0.X.  However,
9346     if you are upgrading from a version earlier than 8.0.6, see the release
9347     notes for 8.0.6.
9348    </para>
9349
9350   </sect2>
9351
9352   <sect2>
9353    <title>Changes</title>
9354
9355    <itemizedlist>
9356
9357     <listitem>
9358      <para>
9359       Improve handling of <function>getaddrinfo()</> on AIX (Tom)
9360      </para>
9361
9362      <para>
9363       This fixes a problem with starting the statistics collector,
9364       among other things.
9365      </para>
9366     </listitem>
9367
9368      <listitem>
9369       <para>
9370        Fix <quote>failed to re-find parent key</> errors in
9371        <command>VACUUM</> (Tom)
9372       </para>
9373      </listitem>
9374
9375      <listitem>
9376       <para>
9377        Fix race condition for truncation of a large relation across a
9378        gigabyte boundary by <command>VACUUM</> (Tom)
9379       </para>
9380      </listitem>
9381
9382      <listitem>
9383       <para>
9384        Fix bugs affecting multi-gigabyte hash indexes (Tom)
9385       </para>
9386      </listitem>
9387
9388     <listitem>
9389      <para>
9390       Fix possible deadlock in Windows signal handling (Teodor)
9391      </para>
9392     </listitem>
9393
9394     <listitem>
9395      <para>
9396       Fix error when constructing an <literal>ARRAY[]</> made up of multiple
9397       empty elements (Tom)
9398      </para>
9399     </listitem>
9400
9401     <listitem>
9402      <para>
9403       Fix ecpg memory leak during connection (Michael)
9404      </para>
9405     </listitem>
9406
9407     <listitem>
9408      <para>
9409       <function>to_number()</> and <function>to_char(numeric)</>
9410       are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
9411       new <application>initdb</> installs (Tom)
9412      </para>
9413
9414      <para>
9415       This is because <varname>lc_numeric</> can potentially
9416       change the output of these functions.
9417      </para>
9418     </listitem>
9419
9420     <listitem>
9421      <para>
9422       Improve index usage of regular expressions that use parentheses (Tom)
9423      </para>
9424
9425      <para>
9426       This improves <application>psql</> <literal>\d</> performance also.
9427      </para>
9428     </listitem>
9429
9430     <listitem>
9431      <para>
9432       Update timezone database
9433      </para>
9434
9435      <para>
9436       This affects Australian and Canadian daylight-savings rules in
9437       particular.
9438      </para>
9439     </listitem>
9440
9441    </itemizedlist>
9442
9443   </sect2>
9444  </sect1>
9445
9446  <sect1 id="release-8-0-9">
9447   <title>Release 8.0.9</title>
9448
9449   <note>
9450   <title>Release date</title>
9451   <simpara>2006-10-16</simpara>
9452   </note>
9453
9454   <para>
9455    This release contains a variety of fixes from 8.0.8.
9456   </para>
9457
9458   <sect2>
9459    <title>Migration to Version 8.0.9</title>
9460
9461    <para>
9462     A dump/restore is not required for those running 8.0.X.  However,
9463     if you are upgrading from a version earlier than 8.0.6, see the release
9464     notes for 8.0.6.
9465    </para>
9466
9467   </sect2>
9468
9469   <sect2>
9470    <title>Changes</title>
9471
9472 <itemizedlist>
9473 <listitem><para>Fix crash when referencing <literal>NEW</> row
9474 values in rule WHERE expressions (Tom)</para></listitem>
9475 <listitem><para>Fix core dump when an untyped literal is taken as
9476 ANYARRAY</para></listitem>
9477 <listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
9478 function returning multiple rows (Tom)</para></listitem>
9479 <listitem><para>Fix <command>ALTER TABLE ... TYPE</> to recheck
9480 <literal>NOT NULL</> for <literal>USING</> clause (Tom)</para></listitem>
9481 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
9482  matches for the separator string</para>
9483 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
9484 </para></listitem>
9485 <listitem><para>Fix corner cases in pattern matching for
9486  <application>psql</>'s <literal>\d</> commands</para></listitem>
9487 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
9488  (Teodor)</para></listitem>
9489 <listitem><para>Numerous robustness fixes in <application>ecpg</> (Joachim
9490 Wieland)</para></listitem>
9491 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
9492 <listitem><para>Fix instability of statistics collection on Win32 (Tom, Andrew)</para></listitem>
9493 <listitem><para>Fixes for <systemitem class="osname">AIX</> and
9494 <productname>Intel</> compilers (Tom)</para></listitem>
9495 </itemizedlist>
9496
9497   </sect2>
9498  </sect1>
9499
9500  <sect1 id="release-8-0-8">
9501   <title>Release 8.0.8</title>
9502
9503   <note>
9504   <title>Release date</title>
9505   <simpara>2006-05-23</simpara>
9506   </note>
9507
9508   <para>
9509    This release contains a variety of fixes from 8.0.7,
9510    including patches for extremely serious security issues.
9511   </para>
9512
9513   <sect2>
9514    <title>Migration to Version 8.0.8</title>
9515
9516    <para>
9517     A dump/restore is not required for those running 8.0.X.  However,
9518     if you are upgrading from a version earlier than 8.0.6, see the release
9519     notes for 8.0.6.
9520    </para>
9521
9522    <para>
9523     Full security against the SQL-injection attacks described in
9524     CVE-2006-2313 and CVE-2006-2314 might require changes in application
9525     code.  If you have applications that embed untrustworthy strings
9526     into SQL commands, you should examine them as soon as possible to
9527     ensure that they are using recommended escaping techniques.  In
9528     most cases, applications should be using subroutines provided by
9529     libraries or drivers (such as <application>libpq</>'s
9530     <function>PQescapeStringConn()</>) to perform string escaping,
9531     rather than relying on <foreignphrase>ad hoc</> code to do it.
9532    </para>
9533   </sect2>
9534
9535   <sect2>
9536    <title>Changes</title>
9537
9538 <itemizedlist>
9539 <listitem><para>Change the server to reject invalidly-encoded multibyte
9540 characters in all cases (Tatsuo, Tom)</para>
9541 <para>While <productname>PostgreSQL</> has been moving in this direction for
9542 some time, the checks are now applied uniformly to all encodings and all
9543 textual input, and are now always errors not merely warnings.  This change
9544 defends against SQL-injection attacks of the type described in CVE-2006-2313.
9545 </para></listitem>
9546
9547 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
9548 <para>As a server-side defense against SQL-injection attacks of the type
9549 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
9550 <literal>\'</> as a representation of ASCII single quote in SQL string
9551 literals.  By default, <literal>\'</> is rejected only when
9552 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
9553 GB18030, or UHC), which is the scenario in which SQL injection is possible.
9554 A new configuration parameter <varname>backslash_quote</> is available to
9555 adjust this behavior when needed.  Note that full security against
9556 CVE-2006-2314 might require client-side changes; the purpose of
9557 <varname>backslash_quote</> is in part to make it obvious that insecure
9558 clients are insecure.
9559 </para></listitem>
9560
9561 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
9562 aware of encoding considerations and
9563 <varname>standard_conforming_strings</></para>
9564 <para>This fixes <application>libpq</>-using applications for the security
9565 issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
9566 them against the planned changeover to SQL-standard string literal syntax.
9567 Applications that use multiple <productname>PostgreSQL</> connections
9568 concurrently should migrate to <function>PQescapeStringConn()</> and
9569 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
9570 for the settings in use in each database connection.  Applications that
9571 do string escaping <quote>by hand</> should be modified to rely on library
9572 routines instead.
9573 </para></listitem>
9574
9575 <listitem><para>Fix some incorrect encoding conversion functions</para>
9576 <para><function>win1251_to_iso</>, <function>alt_to_iso</>,
9577 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
9578 <function>mic_to_euc_tw</> were all broken to varying
9579 extents.
9580 </para></listitem>
9581
9582 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
9583 (Bruce, Jan)</para></listitem>
9584
9585 <listitem><para>Fix bug that sometimes caused OR'd index scans to
9586 miss rows they should have returned</para></listitem>
9587
9588 <listitem><para>Fix WAL replay for case where a btree index has been
9589 truncated</para></listitem>
9590
9591 <listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
9592 <literal>|</> (Tom)</para></listitem>
9593
9594 <listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
9595 create tables in the default tablespace, not the base directory (Kris
9596 Jurka)</para></listitem>
9597
9598 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
9599 Fuhr)</para></listitem>
9600
9601 <listitem><para>Fix for Bonjour on Intel Macs (Ashley Clark)</para></listitem>
9602
9603 <listitem><para>Fix various minor memory leaks</para></listitem>
9604
9605 <listitem><para>Fix problem with password prompting on some Win32 systems
9606 (Robert Kinberg)</para></listitem>
9607 </itemizedlist>
9608
9609   </sect2>
9610  </sect1>
9611
9612  <sect1 id="release-8-0-7">
9613   <title>Release 8.0.7</title>
9614
9615   <note>
9616   <title>Release date</title>
9617   <simpara>2006-02-14</simpara>
9618   </note>
9619
9620   <para>
9621    This release contains a variety of fixes from 8.0.6.
9622   </para>
9623
9624   <sect2>
9625    <title>Migration to Version 8.0.7</title>
9626
9627    <para>
9628     A dump/restore is not required for those running 8.0.X.  However,
9629     if you are upgrading from a version earlier than 8.0.6, see the release
9630     notes for 8.0.6.
9631    </para>
9632   </sect2>
9633
9634   <sect2>
9635    <title>Changes</title>
9636
9637 <itemizedlist>
9638
9639 <listitem><para>Fix potential crash in <command>SET
9640 SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
9641 <para>An unprivileged user could crash the server process, resulting in
9642 momentary denial of service to other users, if the server has been compiled
9643 with Asserts enabled (which is not the default).
9644 Thanks to Akio Ishida for reporting this problem.
9645 </para></listitem>
9646
9647 <listitem><para>Fix bug with row visibility logic in self-inserted
9648 rows (Tom)</para>
9649 <para>Under rare circumstances a row inserted by the current command
9650 could be seen as already valid, when it should not be.  Repairs bug
9651 created in 8.0.4, 7.4.9, and 7.3.11 releases.
9652 </para></listitem>
9653
9654 <listitem><para>Fix race condition that could lead to <quote>file already
9655 exists</> errors during pg_clog and pg_subtrans file creation
9656 (Tom)</para></listitem>
9657
9658 <listitem><para>Fix cases that could lead to crashes if a cache-invalidation
9659 message arrives at just the wrong time (Tom)</para></listitem>
9660
9661 <listitem><para>Properly check <literal>DOMAIN</> constraints for
9662 <literal>UNKNOWN</> parameters in prepared statements
9663 (Neil)</para></listitem>
9664
9665 <listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
9666 <literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
9667 constraints in the proper order (Nakano Yoshihisa)</para></listitem>
9668
9669 <listitem><para>Fixes to allow restoring dumps that have cross-schema
9670 references to custom operators or operator classes (Tom)</para></listitem>
9671
9672 <listitem><para>Allow <application>pg_restore</> to continue properly after a
9673 <command>COPY</> failure; formerly it tried to treat the remaining
9674 <command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
9675
9676 <listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
9677 when the  data directory is not specified (Magnus)</para></listitem>
9678
9679 <listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
9680 (Neil)</para></listitem>
9681
9682 <listitem><para>Recover properly if error occurs during argument passing
9683 in <application>PL/python</> (Neil)</para></listitem>
9684
9685 <listitem><para>Fix <application>PL/perl</>'s handling of locales on
9686 Win32 to match the backend (Andrew)</para></listitem>
9687
9688 <listitem><para>Fix crash when <literal>log_min_messages</> is set to
9689 <literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
9690 (Bruce)</para></listitem>
9691
9692 <listitem><para>Fix <application>pgxs</> <literal>-L</> library path
9693 specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
9694
9695 <listitem><para>Check that SID is enabled while checking for Win32 admin
9696 privileges (Magnus)</para></listitem>
9697
9698 <listitem><para>Properly reject out-of-range date inputs (Kris
9699 Jurka)</para></listitem>
9700
9701 <listitem><para>Portability fix for testing presence of <function>finite</>
9702 and <function>isinf</> during configure (Tom)</para></listitem>
9703
9704 </itemizedlist>
9705
9706   </sect2>
9707  </sect1>
9708
9709  <sect1 id="release-8-0-6">
9710   <title>Release 8.0.6</title>
9711
9712   <note>
9713   <title>Release date</title>
9714   <simpara>2006-01-09</simpara>
9715   </note>
9716
9717   <para>
9718    This release contains a variety of fixes from 8.0.5.
9719   </para>
9720
9721   <sect2>
9722    <title>Migration to Version 8.0.6</title>
9723
9724    <para>
9725     A dump/restore is not required for those running 8.0.X.  However,
9726     if you are upgrading from a version earlier than 8.0.3, see the release
9727     notes for 8.0.3.
9728     Also, you might need to <command>REINDEX</> indexes on textual
9729     columns after updating, if you are affected by the locale or
9730     <application>plperl</> issues described below.
9731    </para>
9732   </sect2>
9733
9734   <sect2>
9735    <title>Changes</title>
9736
9737 <itemizedlist>
9738
9739 <listitem><para>Fix Windows code so that postmaster will continue rather
9740 than exit if there is no more room in ShmemBackendArray (Magnus)</para>
9741 <para>The previous behavior could lead to a denial-of-service situation if too
9742 many connection requests arrive close together.  This applies
9743 <emphasis>only</> to the Windows port.</para></listitem>
9744
9745 <listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
9746 to return an already-used page as new, potentially causing loss of
9747 recently-committed data (Tom)</para></listitem>
9748
9749 <listitem><para>Fix for protocol-level Describe messages issued
9750 outside a transaction or in a failed transaction (Tom)</para></listitem>
9751
9752 <listitem><para>Fix character string comparison for locales that consider
9753 different character combinations as equal, such as Hungarian (Tom)</para>
9754 <para>This might require <command>REINDEX</> to fix existing indexes on
9755 textual columns.</para></listitem>
9756
9757 <listitem><para>Set locale environment variables during postmaster startup
9758 to ensure that <application>plperl</> won't change the locale later</para>
9759 <para>This fixes a problem that occurred if the <application>postmaster</> was
9760 started with environment variables specifying a different locale than what
9761 <application>initdb</> had been told.  Under these conditions, any use of
9762 <application>plperl</> was likely to lead to corrupt indexes.  You might need
9763 <command>REINDEX</> to fix existing indexes on
9764 textual columns if this has happened to you.</para></listitem>
9765
9766 <listitem><para>Allow more flexible relocation of installation
9767 directories (Tom)</para>
9768 <para>Previous releases supported relocation only if all installation
9769 directory paths were the same except for the last component.</para></listitem>
9770
9771 <listitem><para>Fix longstanding bug in strpos() and regular expression
9772 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
9773 </para></listitem>
9774
9775 <listitem><para>Various fixes for functions returning <literal>RECORD</>s
9776 (Tom) </para></listitem>
9777
9778 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
9779 which caused it not to use all available salt space for MD5 and
9780 XDES algorithms (Marko Kreen, Solar Designer)</para>
9781 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
9782
9783 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
9784 rather than crashing, when the number of columns specified is different from
9785 what's actually returned by the query (Joe)</para></listitem>
9786
9787 </itemizedlist>
9788
9789   </sect2>
9790  </sect1>
9791
9792  <sect1 id="release-8-0-5">
9793   <title>Release 8.0.5</title>
9794
9795   <note>
9796   <title>Release date</title>
9797   <simpara>2005-12-12</simpara>
9798   </note>
9799
9800   <para>
9801    This release contains a variety of fixes from 8.0.4.
9802   </para>
9803
9804   <sect2>
9805    <title>Migration to Version 8.0.5</title>
9806
9807    <para>
9808     A dump/restore is not required for those running 8.0.X.  However,
9809     if you are upgrading from a version earlier than 8.0.3, see the release
9810     notes for 8.0.3.
9811    </para>
9812   </sect2>
9813
9814   <sect2>
9815    <title>Changes</title>
9816
9817 <itemizedlist>
9818
9819 <listitem><para>Fix race condition in transaction log management</para>
9820 <para>There was a narrow window in which an I/O operation could be initiated
9821 for the wrong page, leading to an Assert failure or data
9822 corruption.</para>
9823 </listitem>
9824
9825 <listitem><para>Fix bgwriter problems after recovering from errors
9826 (Tom)</para>
9827 <para>
9828 The background writer was found to leak buffer pins after write errors.
9829 While not fatal in itself, this might lead to mysterious blockages of
9830 later VACUUM commands.
9831 </para>
9832 </listitem>
9833
9834 <listitem><para>Prevent failure if client sends Bind protocol message
9835 when current transaction is already aborted</para></listitem>
9836
9837 <listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
9838
9839 <listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
9840
9841 <listitem><para>Retry file reads and writes after Windows
9842 NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
9843
9844 <listitem><para>Fix intermittent failure when <varname>log_line_prefix</>
9845 includes <literal>%i</></para></listitem>
9846
9847 <listitem><para>Fix <application>psql</> performance issue with long scripts
9848 on Windows (Merlin Moncure)</para></listitem>
9849
9850 <listitem><para>Fix missing updates of <filename>pg_group</> flat
9851 file</para></listitem>
9852
9853 <listitem><para>Fix longstanding planning error for outer joins</para>
9854 <para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
9855 only supported with merge-joinable join conditions</>.</para></listitem>
9856
9857 <listitem><para>Postpone timezone initialization until after
9858 <filename>postmaster.pid</> is created</para>
9859 <para>This avoids confusing startup scripts that expect the pid file to appear
9860 quickly.</para></listitem>
9861
9862 <listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
9863 table has been dropped</para></listitem>
9864
9865 <listitem><para>Fix problems with whole-row references (<literal>foo.*</>)
9866 to subquery results</para></listitem>
9867 </itemizedlist>
9868
9869   </sect2>
9870  </sect1>
9871
9872  <sect1 id="release-8-0-4">
9873   <title>Release 8.0.4</title>
9874
9875   <note>
9876   <title>Release date</title>
9877   <simpara>2005-10-04</simpara>
9878   </note>
9879
9880   <para>
9881    This release contains a variety of fixes from 8.0.3.
9882   </para>
9883
9884   <sect2>
9885    <title>Migration to Version 8.0.4</title>
9886
9887    <para>
9888     A dump/restore is not required for those running 8.0.X.  However,
9889     if you are upgrading from a version earlier than 8.0.3, see the release
9890     notes for 8.0.3.
9891    </para>
9892   </sect2>
9893
9894   <sect2>
9895    <title>Changes</title>
9896
9897 <itemizedlist>
9898 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
9899 <literal>ctid</> chains too soon, and add more checking in code that follows
9900 <literal>ctid</> links</para>
9901 <para>This fixes a long-standing problem that could cause crashes in very rare
9902 circumstances.</para></listitem>
9903 <listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
9904 length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
9905 <para>In prior releases, the padding of <type>CHAR()</> was incorrect
9906 because it only padded to the specified number of bytes without
9907 considering how many characters were stored.</para></listitem>
9908 <listitem><para>Force a checkpoint before committing <command>CREATE
9909 DATABASE</></para>
9910 <para>This should fix recent reports of <quote>index is not a btree</>
9911 failures when a crash occurs shortly after <command>CREATE
9912 DATABASE</>.</para></listitem>
9913 <listitem><para>Fix the sense of the test for read-only transaction
9914 in <command>COPY</></para>
9915 <para>The code formerly prohibited <command>COPY TO</>, where it should
9916 prohibit <command>COPY FROM</>.
9917 </para></listitem>
9918 <listitem><para>Handle consecutive embedded newlines in <command>COPY</>
9919 CSV-mode input</para></listitem>
9920 <listitem><para>Fix <function>date_trunc(week)</> for dates near year
9921 end</para></listitem>
9922 <listitem><para>Fix planning problem with outer-join ON clauses that reference
9923 only the inner-side relation</para></listitem>
9924 <listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
9925 cases</para></listitem>
9926 <listitem><para>Fix overenthusiastic optimization of <literal>x IN (SELECT
9927 DISTINCT ...)</> and related cases</para></listitem>
9928 <listitem><para>Fix mis-planning of queries with small <literal>LIMIT</>
9929 values due to poorly thought out <quote>fuzzy</> cost
9930 comparison</para></listitem>
9931 <listitem><para>Make <function>array_in</> and <function>array_recv</> more
9932 paranoid about validating their OID parameter</para></listitem>
9933 <listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
9934 a...</> with GiST index on column <literal>a</></para></listitem>
9935 <listitem><para>Improve robustness of datetime parsing</para></listitem>
9936 <listitem><para>Improve checking for partially-written WAL
9937 pages</para></listitem>
9938 <listitem><para>Improve robustness of signal handling when SSL is
9939 enabled</para></listitem>
9940 <listitem><para>Improve MIPS and M68K spinlock code</para></listitem>
9941 <listitem><para>Don't try to open more than <literal>max_files_per_process</>
9942 files during postmaster startup</para></listitem>
9943 <listitem><para>Various memory leakage fixes</para></listitem>
9944 <listitem><para>Various portability improvements</para></listitem>
9945 <listitem><para>Update timezone data files</para></listitem>
9946 <listitem><para>Improve handling of DLL load failures on Windows</para></listitem>
9947 <listitem><para>Improve random-number generation on Windows</para></listitem>
9948 <listitem><para>Make <literal>psql -f filename</> return a nonzero exit code
9949 when opening the file fails</para></listitem>
9950 <listitem><para>Change <application>pg_dump</> to handle inherited check
9951 constraints more reliably</para></listitem>
9952 <listitem><para>Fix password prompting in <application>pg_restore</> on
9953 Windows</para></listitem>
9954 <listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
9955 the variable is of pass-by-reference type</para></listitem>
9956 <listitem><para>Fix PL/Perl <literal>%_SHARED</> so it's actually
9957 shared</para></listitem>
9958 <listitem><para>Fix <filename>contrib/pg_autovacuum</> to allow sleep
9959 intervals over 2000 sec</para></listitem>
9960 <listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
9961 code</para></listitem>
9962 </itemizedlist>
9963
9964   </sect2>
9965  </sect1>
9966
9967  <sect1 id="release-8-0-3">
9968   <title>Release 8.0.3</title>
9969
9970   <note>
9971   <title>Release date</title>
9972   <simpara>2005-05-09</simpara>
9973   </note>
9974
9975   <para>
9976    This release contains a variety of fixes from 8.0.2, including several
9977    security-related issues.
9978   </para>
9979
9980   <sect2>
9981    <title>Migration to Version 8.0.3</title>
9982
9983    <para>
9984     A dump/restore is not required for those running 8.0.X.  However,
9985     it is one possible way of handling two significant security problems
9986     that have been found in the initial contents of 8.0.X system
9987     catalogs.  A dump/initdb/reload sequence using 8.0.3's initdb will
9988     automatically correct these problems.
9989    </para>
9990
9991    <para>
9992     The larger security problem is that the built-in character set encoding
9993     conversion functions can be invoked from SQL commands by unprivileged
9994     users, but the functions were not designed for such use and are not
9995     secure against malicious choices of arguments.  The fix involves changing
9996     the declared parameter list of these functions so that they can no longer
9997     be invoked from SQL commands.  (This does not affect their normal use
9998     by the encoding conversion machinery.)
9999    </para>
10000
10001    <para>
10002     The lesser problem is that the <filename>contrib/tsearch2</> module
10003     creates several functions that are improperly declared to return
10004     <type>internal</> when they do not accept <type>internal</> arguments.
10005     This breaks type safety for all functions using <type>internal</>
10006     arguments.
10007    </para>
10008
10009    <para>
10010     It is strongly recommended that all installations repair these errors,
10011     either by initdb or by following the manual repair procedure given
10012     below.  The errors at least allow unprivileged database users to crash
10013     their server process, and might allow unprivileged users to gain the
10014     privileges of a database superuser.
10015    </para>
10016
10017    <para>
10018     If you wish not to do an initdb, perform the same manual repair
10019     procedures shown in the <link linkend="release-7-4-8">7.4.8 release
10020     notes</link>.
10021    </para>
10022   </sect2>
10023
10024   <sect2>
10025    <title>Changes</title>
10026
10027 <itemizedlist>
10028 <listitem><para>Change encoding function signature to prevent
10029 misuse</para></listitem>
10030 <listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
10031 <type>INTERNAL</> function results</para></listitem>
10032 <listitem><para>Guard against incorrect second parameter to
10033 <function>record_out</></para></listitem>
10034 <listitem><para>Repair ancient race condition that allowed a transaction to be
10035 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
10036 than for other purposes</para>
10037 <para>This is an extremely serious bug since it could lead to apparent
10038 data inconsistencies being briefly visible to applications.</para></listitem>
10039 <listitem><para>Repair race condition between relation extension and
10040 VACUUM</para>
10041 <para>This could theoretically have caused loss of a page's worth of
10042 freshly-inserted data, although the scenario seems of very low probability.
10043 There are no known cases of it having caused more than an Assert failure.
10044 </para></listitem>
10045 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
10046 <para>
10047 The comparison code was wrong in the case where the
10048 <literal>--enable-integer-datetimes</> configuration switch had been used.
10049 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
10050 it will need to be <command>REINDEX</>ed after installing this update, because
10051 the fix corrects the sort order of column values.
10052 </para></listitem>
10053 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
10054 <type>TIME WITH TIME ZONE</> values</para></listitem>
10055 <listitem><para>Fix mis-display of negative fractional seconds in
10056 <type>INTERVAL</> values</para>
10057 <para>
10058 This error only occurred when the
10059 <literal>--enable-integer-datetimes</> configuration switch had been used.
10060 </para></listitem>
10061 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
10062 correctly (Neil)</para></listitem>
10063 <listitem><para>Still more 64-bit fixes for
10064 <filename>contrib/intagg</></para></listitem>
10065 <listitem><para>Prevent incorrect optimization of functions returning
10066 <type>RECORD</></para></listitem>
10067 <listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
10068 <listitem><para>Fix Borland makefile for libpq</para></listitem>
10069 <listitem><para>Fix <filename>contrib/btree_gist</> for <type>timetz</> type
10070 (Teodor)</para></listitem>
10071 <listitem><para>Make <command>pg_ctl</> check the PID found in
10072 <filename>postmaster.pid</> to see if it is still a live
10073 process</para></listitem>
10074 <listitem><para>Fix <command>pg_dump</>/<command>pg_restore</> problems caused
10075 by addition of dump timestamps</para></listitem>
10076 <listitem><para>Fix interaction between materializing holdable cursors and
10077 firing deferred triggers during transaction commit</para></listitem>
10078 <listitem><para>Fix memory leak in SQL functions returning pass-by-reference
10079 data types</para></listitem>
10080 </itemizedlist>
10081
10082   </sect2>
10083  </sect1>
10084
10085  <sect1 id="release-8-0-2">
10086   <title>Release 8.0.2</title>
10087
10088   <note>
10089   <title>Release date</title>
10090   <simpara>2005-04-07</simpara>
10091   </note>
10092
10093   <para>
10094    This release contains a variety of fixes from 8.0.1.
10095   </para>
10096
10097   <sect2>
10098    <title>Migration to Version 8.0.2</title>
10099
10100    <para>
10101     A dump/restore is not required for those running 8.0.*.
10102     This release updates the major version number of the
10103     <productname>PostgreSQL</productname> libraries, so it might be
10104     necessary to re-link some user applications if they cannot
10105     find the properly-numbered shared library.
10106    </para>
10107   </sect2>
10108
10109   <sect2>
10110    <title>Changes</title>
10111
10112 <itemizedlist>
10113 <listitem><para>Increment the major version number of all interface
10114 libraries (Bruce)</para>
10115 <para>
10116 This should have been done in 8.0.0.  It is required so 7.4.X versions
10117 of PostgreSQL client applications, like <application>psql</>,
10118 can be used on the same machine as 8.0.X applications.  This might require
10119 re-linking user applications that use these libraries.
10120 </para></listitem>
10121 <listitem><para>Add Windows-only <varname>wal_sync_method</> setting of
10122 <option>fsync_writethrough</> (Magnus, Bruce)</para>
10123 <para>
10124 This setting causes <productname>PostgreSQL</productname> to write through
10125 any disk-drive write cache when writing to WAL.
10126 This behavior was formerly called <option>fsync</>, but was
10127 renamed because it acts quite differently from <option>fsync</> on other
10128 platforms.
10129 </para>
10130 </listitem>
10131 <listitem><para>Enable the <varname>wal_sync_method</> setting of
10132 <option>open_datasync</> on Windows, and make it the default for that
10133  platform (Magnus, Bruce)</para>
10134 <para>
10135 Because the default is no longer <option>fsync_writethrough</>,
10136 data loss is possible during a power failure if the disk drive has
10137 write caching enabled. To turn off the write cache on Windows,
10138 from the <application>Device Manager</>, choose the drive properties,
10139 then <literal>Policies</>.
10140 </para>
10141 </listitem>
10142 <listitem><para>New cache management algorithm <acronym>2Q</> replaces
10143 <acronym>ARC</> (Tom)</para>
10144 <para>
10145 This was done to avoid a pending US patent on <acronym>ARC</>.  The
10146 <acronym>2Q</> code might be a few percentage points slower than
10147 <acronym>ARC</> for some work loads.  A better cache management algorithm
10148 will appear in 8.1.
10149 </para></listitem>
10150 <listitem><para>Planner adjustments to improve behavior on freshly-created
10151 tables (Tom)</para></listitem>
10152 <listitem><para>Allow plpgsql to assign to an element of an array that is
10153 initially <literal>NULL</> (Tom)</para>
10154 <para>
10155 Formerly the array would remain <literal>NULL</>, but now it becomes a
10156 single-element array.  The main SQL engine was changed to handle
10157 <command>UPDATE</> of a null array value this way in 8.0, but the similar
10158 case in plpgsql was overlooked.
10159 </para>
10160 </listitem>
10161 <listitem><para>Convert <literal>\r\n</> and <literal>\r</> to <literal>\n</>
10162 in plpython function bodies (Michael Fuhr)</para>
10163 <para>
10164  This prevents syntax errors when plpython code is written on a Windows or
10165  Mac client.
10166 </para>
10167 </listitem>
10168 <listitem><para>Allow SPI cursors to handle utility commands that return rows,
10169 such as <command>EXPLAIN</> (Tom)</para></listitem>
10170 <listitem><para>Fix <command>CLUSTER</> failure after <command>ALTER TABLE
10171 SET WITHOUT OIDS</> (Tom)</para></listitem>
10172 <listitem><para>Reduce memory usage of <command>ALTER TABLE ADD COLUMN</>
10173 (Neil)</para></listitem>
10174 <listitem><para>Fix <command>ALTER LANGUAGE RENAME</> (Tom)</para></listitem>
10175 <listitem><para>Document the Windows-only <literal>register</> and
10176 <literal>unregister</> options of <application>pg_ctl</> (Magnus)</para></listitem>
10177 <listitem><para>Ensure operations done during backend shutdown are counted by
10178 statistics collector</para>
10179 <para>
10180 This is expected to resolve reports of <application>pg_autovacuum</>
10181 not vacuuming the system catalogs often enough &mdash; it was not being
10182 told about catalog deletions caused by temporary table removal during
10183 backend exit.
10184 </para></listitem>
10185 <listitem><para>Change the Windows default for configuration parameter
10186 <varname>log_destination</> to <option>eventlog</> (Magnus)</para>
10187 <para>
10188 By default, a server running on Windows will now send log output to the
10189 Windows event logger rather than standard error.
10190 </para></listitem>
10191 <listitem><para>Make Kerberos authentication work on Windows (Magnus)</para></listitem>
10192 <listitem><para>Allow <command>ALTER DATABASE RENAME</> by superusers
10193 who aren't flagged as having CREATEDB privilege (Tom)</para></listitem>
10194 <listitem><para>Modify WAL log entries for <command>CREATE</> and
10195 <command>DROP DATABASE</> to not specify absolute paths (Tom)</para>
10196 <para>This allows point-in-time recovery on a different machine with possibly
10197 different database location.  Note that <command>CREATE TABLESPACE</> still
10198 poses a hazard in such situations.
10199 </para></listitem>
10200 <listitem><para>Fix crash from a backend exiting with an open transaction
10201 that created a table and opened a cursor on it (Tom)</para></listitem>
10202 <listitem><para>Fix <function>array_map()</> so it can call PL functions
10203 (Tom)</para></listitem>
10204 <listitem><para>Several <filename>contrib/tsearch2</> and
10205 <filename>contrib/btree_gist</> fixes (Teodor)
10206 </para></listitem>
10207 <listitem><para>Fix crash of some <filename>contrib/pgcrypto</>
10208 functions on some platforms (Marko Kreen)</para></listitem>
10209 <listitem><para>Fix <filename>contrib/intagg</> for 64-bit platforms
10210 (Tom)</para></listitem>
10211 <listitem><para>Fix ecpg bugs in parsing of <command>CREATE</> statement
10212 (Michael)</para></listitem>
10213 <listitem><para>Work around gcc bug on powerpc and amd64 causing problems in
10214 ecpg (Christof Petig)</para></listitem>
10215 <listitem><para>Do not use locale-aware versions of <function>upper()</>,
10216 <function>lower()</>, and <function>initcap()</> when the locale is
10217 <literal>C</> (Bruce)</para>
10218 <para>
10219  This allows these functions to work on platforms that generate errors
10220  for non-7-bit data when the locale is <literal>C</>.
10221 </para></listitem>
10222 <listitem><para>Fix <function>quote_ident()</> to quote names that match keywords (Tom)</para></listitem>
10223 <listitem><para>Fix <function>to_date()</> to behave reasonably when
10224 <literal>CC</> and <literal>YY</> fields are both used (Karel)</para></listitem>
10225 <listitem><para>Prevent <function>to_char(interval)</> from failing
10226 when given a zero-month interval (Tom)</para></listitem>
10227 <listitem><para>Fix wrong week returned by <function>date_trunc('week')</>
10228 (Bruce)</para>
10229 <para>
10230 <function>date_trunc('week')</>
10231 returned the wrong year for the first few days of January in some years.
10232 </para></listitem>
10233 <listitem><para>Use the correct default mask length for class <literal>D</>
10234 addresses in <type>INET</> data types (Tom)</para></listitem>
10235 </itemizedlist>
10236
10237   </sect2>
10238  </sect1>
10239
10240  <sect1 id="release-8-0-1">
10241   <title>Release 8.0.1</title>
10242
10243   <note>
10244   <title>Release date</title>
10245   <simpara>2005-01-31</simpara>
10246   </note>
10247
10248   <para>
10249    This release contains a variety of fixes from 8.0.0, including several
10250    security-related issues.
10251   </para>
10252
10253   <sect2>
10254    <title>Migration to Version 8.0.1</title>
10255
10256    <para>
10257     A dump/restore is not required for those running 8.0.0.
10258    </para>
10259   </sect2>
10260
10261   <sect2>
10262    <title>Changes</title>
10263
10264 <itemizedlist>
10265 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
10266 <para>
10267 On platforms that will automatically execute initialization functions of a
10268 shared library (this includes at least Windows and ELF-based Unixen),
10269 <command>LOAD</> can be used to make the server execute arbitrary code.
10270 Thanks to NGS Software for reporting this.</para></listitem>
10271 <listitem><para>Check that creator of an aggregate function has the right to
10272 execute the specified transition functions</para>
10273 <para>
10274 This oversight made it possible to bypass denial of EXECUTE
10275 permission on a function.</para></listitem>
10276 <listitem><para>Fix security and 64-bit issues in
10277 contrib/intagg</para></listitem>
10278 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
10279 Jurka)</para></listitem>
10280 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
10281 many parameters (Neil)</para></listitem>
10282 <listitem><para>Make <command>ALTER TABLE ADD COLUMN</> enforce domain
10283 constraints in all cases</para></listitem>
10284 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
10285 <para>
10286 The result of the join was mistakenly supposed to be sorted the same as the
10287 left input.  This could not only deliver mis-sorted output to the user, but
10288 in case of nested merge joins could give outright wrong answers.
10289 </para></listitem>
10290 <listitem><para>Improve planning of grouped aggregate queries</para></listitem>
10291 <listitem><para><command>ROLLBACK TO <replaceable>savepoint</></command>
10292 closes cursors created since the savepoint</para></listitem>
10293 <listitem><para>Fix inadequate backend stack size on Windows</para></listitem>
10294 <listitem><para>Avoid SHGetSpecialFolderPath() on Windows
10295 (Magnus)</para></listitem>
10296 <listitem><para>Fix some problems in running pg_autovacuum as a Windows
10297 service (Dave Page)</para></listitem>
10298 <listitem><para>Multiple minor bug fixes in
10299 pg_dump/pg_restore</para></listitem>
10300 <listitem><para>Fix ecpg segfault with named structs used in
10301 typedefs (Michael)</para></listitem>
10302 </itemizedlist>
10303
10304   </sect2>
10305  </sect1>
10306
10307  <sect1 id="release-8-0">
10308   <title>Release 8.0</title>
10309
10310   <note>
10311    <title>Release date</title>
10312    <simpara>2005-01-19</simpara>
10313   </note>
10314
10315   <sect2>
10316    <title>Overview</title>
10317
10318    <para>
10319     Major changes in this release:
10320    </para>
10321
10322    <variablelist>
10323     <varlistentry>
10324      <term>
10325       Microsoft Windows Native Server
10326      </term>
10327
10328      <listitem>
10329       <para>
10330        This is the first <productname>PostgreSQL</productname> release
10331        to run natively on <trademark class="registered">Microsoft Windows</> as
10332        a server. It can run as a <productname>Windows</> service. This
10333        release supports NT-based Windows releases like
10334        <productname>Windows 2000 SP4</>, <productname>Windows XP</>, and
10335        <productname>Windows 2003</>. Older releases like
10336        <productname>Windows 95</>, <productname>Windows 98</>, and
10337        <productname>Windows ME</> are not supported because these operating
10338        systems do not have the infrastructure to support
10339        <productname>PostgreSQL</productname>. A separate installer
10340        project has been created to ease installation on
10341        <productname>Windows</> &mdash; see <ulink
10342        url="http://www.postgresql.org/ftp/win32/"></ulink>.
10343       </para>
10344
10345       <para>
10346        Although tested throughout our release cycle, the Windows port
10347        does not have the benefit of years of use in production
10348        environments that <productname>PostgreSQL</productname> has on
10349        Unix platforms.  Therefore it should be treated with the same
10350        level of caution as you would a new product.
10351       </para>
10352
10353       <para>
10354        Previous releases required the Unix emulation toolkit
10355        <productname>Cygwin</> in order to run the server on Windows
10356        operating systems.  <productname>PostgreSQL</productname> has
10357        supported native clients on Windows for many years.
10358       </para>
10359      </listitem>
10360     </varlistentry>
10361
10362     <varlistentry>
10363      <term>
10364       Savepoints
10365      </term>
10366
10367      <listitem>
10368       <para>
10369        Savepoints allow specific parts of a transaction to be aborted
10370        without affecting the remainder of the transaction. Prior
10371        releases had no such capability; there was no way to recover
10372        from a statement failure within a transaction except by
10373        aborting the whole transaction. This feature is valuable for
10374        application writers who require error recovery within a
10375        complex transaction.
10376       </para>
10377      </listitem>
10378     </varlistentry>
10379
10380     <varlistentry>
10381      <term>
10382       Point-In-Time Recovery
10383      </term>
10384
10385      <listitem>
10386       <para>
10387        In previous releases there was no way to recover from disk
10388        drive failure except to restore from a previous backup or use
10389        a standby replication server.  Point-in-time recovery allows
10390        continuous backup of the server.  You can recover either to
10391        the point of failure or to some transaction in the past.
10392       </para>
10393      </listitem>
10394     </varlistentry>
10395
10396     <varlistentry>
10397      <term>
10398       Tablespaces
10399      </term>
10400
10401      <listitem>
10402       <para>
10403        Tablespaces allow administrators to select different file systems
10404        for storage of individual tables, indexes, and databases.
10405        This improves performance and control over disk space
10406        usage. Prior releases used <application>initlocation</> and
10407        manual symlink management for such tasks.
10408       </para>
10409      </listitem>
10410     </varlistentry>
10411
10412     <varlistentry>
10413      <term>
10414       Improved Buffer Management, <command>CHECKPOINT</command>,
10415       <command>VACUUM</command>
10416      </term>
10417
10418      <listitem>
10419       <para>
10420        This release has a more intelligent buffer replacement strategy,
10421        which will make better use of available shared buffers and
10422        improve performance. The performance impact of vacuum and
10423        checkpoints is also lessened.
10424       </para>
10425      </listitem>
10426     </varlistentry>
10427
10428     <varlistentry>
10429      <term>
10430       Change Column Types
10431      </term>
10432
10433      <listitem>
10434       <para>
10435        A column's data type can now be changed with <command>ALTER
10436        TABLE</command>.
10437       </para>
10438      </listitem>
10439     </varlistentry>
10440
10441     <varlistentry>
10442      <term>
10443       New Perl Server-Side Language
10444      </term>
10445
10446      <listitem>
10447       <para>
10448        A new version of the <application>plperl</> server-side language now
10449        supports a persistent shared storage area, triggers, returning records
10450        and arrays of records, and SPI calls to access the database.
10451       </para>
10452      </listitem>
10453     </varlistentry>
10454
10455     <varlistentry>
10456      <term>
10457        Comma-separated-value (CSV) support in <command>COPY</command>
10458      </term>
10459
10460      <listitem>
10461       <para>
10462        <command>COPY</command> can now read and write
10463        comma-separated-value files. It has the flexibility to
10464        interpret nonstandard quoting and separation characters too.
10465       </para>
10466      </listitem>
10467     </varlistentry>
10468
10469    </variablelist>
10470   </sect2>
10471
10472   <sect2>
10473    <title>Migration to Version 8.0</title>
10474
10475    <para>
10476     A dump/restore using <application>pg_dump</application> is
10477     required for those wishing to migrate data from any previous
10478     release.
10479    </para>
10480
10481    <para>
10482     Observe the following incompatibilities:
10483    </para>
10484
10485    <itemizedlist>
10486
10487     <listitem>
10488      <para>
10489       In <option>READ COMMITTED</> serialization mode, volatile functions
10490       now see the results of concurrent transactions committed up to the
10491       beginning of each statement within the function, rather than up to the
10492       beginning of the interactive command that called the function.
10493      </para>
10494     </listitem>
10495
10496     <listitem>
10497      <para>
10498       Functions declared <option>STABLE</> or <option>IMMUTABLE</> always
10499       use the snapshot of the calling query, and therefore do not see the
10500       effects of actions taken after the calling query starts, whether in
10501       their own transaction or other transactions.  Such a function must be
10502       read-only, too, meaning that it cannot use any SQL commands other than
10503       <command>SELECT</>.
10504      </para>
10505     </listitem>
10506
10507     <listitem>
10508      <para>
10509       Nondeferred <option>AFTER</> triggers are now fired immediately
10510       after completion of the triggering query, rather than upon
10511       finishing the current interactive command. This makes a
10512       difference when the triggering query occurred within a function:
10513       the trigger is invoked before the function proceeds to its next
10514       operation.
10515      </para>
10516     </listitem>
10517
10518     <listitem>
10519      <para>
10520       Server configuration parameters <varname>virtual_host</> and
10521       <varname>tcpip_socket</> have been replaced with a more general
10522       parameter <varname>listen_addresses</>. Also, the server now listens on
10523       <literal>localhost</> by default, which eliminates the need for the
10524       <literal>-i</> postmaster switch in many scenarios.
10525      </para>
10526     </listitem>
10527
10528     <listitem>
10529      <para>
10530       Server configuration parameters <varname>SortMem</> and
10531       <varname>VacuumMem</> have been renamed to <varname>work_mem</>
10532       and <varname>maintenance_work_mem</> to better reflect their
10533       use. The original names are still supported in
10534       <command>SET</command> and <command>SHOW</command>.
10535      </para>
10536     </listitem>
10537
10538     <listitem>
10539      <para>
10540       Server configuration parameters <varname>log_pid</>,
10541       <varname>log_timestamp</>, and <varname>log_source_port</> have been
10542       replaced with a more general parameter <varname>log_line_prefix</>.
10543      </para>
10544     </listitem>
10545
10546     <listitem>
10547      <para>
10548       Server configuration parameter <varname>syslog</> has been
10549       replaced with a more logical <varname>log_destination</> variable to
10550       control the log output destination.
10551      </para>
10552     </listitem>
10553
10554     <listitem>
10555      <para>
10556       Server configuration parameter <varname>log_statement</> has been
10557       changed so it can selectively log just database modification or
10558       data definition statements.  Server configuration parameter
10559       <varname>log_duration</> now prints only when <varname>log_statement</>
10560       prints the query.
10561      </para>
10562     </listitem>
10563
10564     <listitem>
10565      <para>
10566       Server configuration parameter <varname>max_expr_depth</> parameter has
10567       been replaced with <varname>max_stack_depth</> which measures the
10568       physical stack size rather than the expression nesting depth. This
10569       helps prevent session termination due to stack overflow caused by
10570       recursive functions.
10571      </para>
10572     </listitem>
10573
10574     <listitem>
10575      <para>
10576       The <function>length()</> function no longer counts trailing spaces in
10577       <type>CHAR(n)</> values.
10578      </para>
10579     </listitem>
10580
10581    <listitem>
10582     <para>
10583      Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the
10584      integer, not the leftmost N bits as before.
10585     </para>
10586    </listitem>
10587
10588    <listitem>
10589     <para>
10590      Updating an element or slice of a NULL array value now produces
10591      a nonnull array result, namely an array containing
10592      just the assigned-to positions.
10593     </para>
10594    </listitem>
10595
10596     <listitem>
10597      <para>
10598       Syntax checking of array input values has been tightened up
10599       considerably. Junk that was previously allowed in odd places with
10600       odd results now causes an error. Empty-string element values
10601       must now be written as <literal>""</>, rather than writing nothing.
10602       Also changed behavior with respect to whitespace surrounding
10603       array elements: trailing whitespace is now ignored, for symmetry
10604       with leading whitespace (which has always been ignored).
10605      </para>
10606     </listitem>
10607
10608     <listitem>
10609      <para>
10610       Overflow in integer arithmetic operations is now detected and
10611       reported as an error.
10612      </para>
10613     </listitem>
10614
10615     <listitem>
10616      <para>
10617       The arithmetic operators associated with the single-byte
10618       <type>"char"</> data type have been removed.
10619      </para>
10620     </listitem>
10621
10622     <listitem>
10623      <para>
10624       The <function>extract()</> function (also called
10625       <function>date_part</>) now returns the proper year for BC dates.
10626       It previously returned one less than the correct year. The
10627       function now also returns the proper values for millennium and
10628       century.
10629      </para>
10630     </listitem>
10631
10632    <listitem>
10633     <para>
10634      <type>CIDR</> values now must have their nonmasked bits be zero.
10635      For example, we no longer allow
10636      <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such
10637      values should never have been accepted by
10638      <productname>PostgreSQL</productname> and will now be rejected.
10639     </para>
10640    </listitem>
10641
10642     <listitem>
10643      <para>
10644       <command>EXECUTE</command> now returns a completion tag that
10645       matches the executed statement.
10646      </para>
10647     </listitem>
10648
10649     <listitem>
10650      <para>
10651       <application>psql</>'s <command>\copy</> command now reads or
10652       writes to the query's <literal>stdin/stdout</>, rather than
10653       <application>psql</>'s <literal>stdin/stdout</>. The previous
10654       behavior can be accessed via new
10655       <option>pstdin</>/<option>pstdout</> parameters.
10656      </para>
10657     </listitem>
10658
10659     <listitem>
10660      <para>
10661      The JDBC client interface has been removed from the core
10662      distribution, and is now hosted at <ulink url=
10663      "http://jdbc.postgresql.org"></ulink>.
10664      </para>
10665     </listitem>
10666
10667     <listitem>
10668      <para>
10669      The Tcl client interface has also been removed. There are several
10670      Tcl interfaces now hosted at <ulink url=
10671      "http://gborg.postgresql.org"></ulink>.
10672      </para>
10673     </listitem>
10674
10675     <listitem>
10676      <para>
10677       The server now uses its own time zone database, rather than the
10678       one supplied by the operating system. This will provide consistent
10679       behavior across all platforms.  In most cases, there should be
10680       little noticeable difference in time zone behavior, except that
10681       the time zone names used by <command>SET</>/<command>SHOW</>
10682       <varname>TimeZone</> might be different from what your platform provides.
10683      </para>
10684     </listitem>
10685
10686     <listitem>
10687      <para>
10688       <application>Configure</>'s threading option no longer requires
10689       users to run tests or edit configuration files; threading options
10690       are now detected automatically.
10691      </para>
10692     </listitem>
10693
10694     <listitem>
10695      <para>
10696       Now that tablespaces have been implemented,
10697       <application>initlocation</> has been removed.
10698      </para>
10699     </listitem>
10700
10701     <listitem>
10702      <para>
10703       The API for user-defined GiST indexes has been changed. The
10704       Union and PickSplit methods are now passed a pointer to a
10705       special <structname>GistEntryVector</structname> structure,
10706       rather than a <type>bytea</type>.
10707      </para>
10708     </listitem>
10709
10710    </itemizedlist>
10711   </sect2>
10712
10713  <sect2>
10714   <title>Deprecated Features</title>
10715
10716   <para>
10717     Some aspects of <productname>PostgreSQL</productname>'s behavior
10718     have been determined to be suboptimal. For the sake of backward
10719     compatibility these have not been removed in 8.0, but they are
10720     considered deprecated and will be removed in the next major
10721     release.
10722     </para>
10723
10724    <itemizedlist>
10725     <listitem>
10726      <para>
10727       The 8.1 release will remove the <function>to_char()</> function
10728       for intervals.
10729      </para>
10730     </listitem>
10731
10732      <listitem>
10733       <para>
10734        The server now warns of empty strings passed to
10735        <type>oid</type>/<type>float4</type>/<type>float8</type> data
10736        types, but continues to interpret them as zeroes as before.
10737        In the next major release, empty strings will be considered
10738        invalid input for these data types.
10739       </para>
10740      </listitem>
10741
10742     <listitem>
10743      <para>
10744       By default, tables in <productname>PostgreSQL</productname> 8.0
10745       and earlier are created with <type>OID</>s. In the next release,
10746       this will <emphasis>not</emphasis> be the case: to create a table
10747       that contains <type>OID</>s, the <option>WITH OIDS</> clause must
10748       be specified or the <varname>default_with_oids</varname>
10749       configuration parameter must be set. Users are encouraged to
10750       explicitly specify <option>WITH OIDS</> if their tables
10751       require OIDs for compatibility with future releases of
10752       <productname>PostgreSQL</productname>.
10753      </para>
10754     </listitem>
10755
10756    </itemizedlist>
10757   </sect2>
10758
10759   <sect2>
10760    <title>Changes</title>
10761
10762    <para>
10763     Below you will find a detailed account of the changes between
10764     release 8.0 and the previous major release.
10765    </para>
10766
10767    <sect3>
10768     <title>Performance Improvements</title>
10769     <itemizedlist>
10770
10771      <listitem>
10772       <para>
10773        Support cross-data-type index usage (Tom)
10774       </para>
10775       <para>
10776        Before this change, many queries would not use an index if the data
10777        types did not match exactly. This improvement makes index usage more
10778        intuitive and consistent.
10779       </para>
10780      </listitem>
10781
10782      <listitem>
10783       <para>
10784        New buffer replacement strategy that improves caching (Jan)
10785       </para>
10786       <para>
10787        Prior releases used a least-recently-used (LRU) cache to keep
10788        recently referenced pages in memory. The LRU algorithm
10789        did not consider the number of times a specific cache entry was
10790        accessed, so large table scans could force out useful cache pages.
10791        The new cache algorithm uses four separate lists to track most
10792        recently used and most frequently used cache pages and dynamically
10793        optimize their replacement based on the work load. This should
10794        lead to much more efficient use of the shared buffer cache.
10795        Administrators who have tested shared buffer sizes in the past
10796        should retest with this new cache replacement policy.
10797       </para>
10798      </listitem>
10799
10800      <listitem>
10801       <para>
10802        Add subprocess to write dirty buffers periodically to reduce
10803        checkpoint writes (Jan)
10804       </para>
10805       <para>
10806        In previous releases, the checkpoint process, which runs every few
10807        minutes, would write all dirty buffers to the operating system's
10808        buffer cache then flush all dirty operating system buffers to
10809        disk. This resulted in a periodic spike in disk usage that often
10810        hurt performance. The new code uses a background writer to trickle
10811        disk writes at a steady pace so checkpoints have far fewer dirty
10812        pages to write to disk. Also, the new code does not issue a global
10813        <function>sync()</> call, but instead <function>fsync()</>s just
10814        the files written since the last checkpoint. This should improve
10815        performance and minimize degradation during checkpoints.
10816       </para>
10817      </listitem>
10818
10819      <listitem>
10820       <para>
10821        Add ability to prolong vacuum to reduce performance impact (Jan)
10822       </para>
10823       <para>
10824        On busy systems, <command>VACUUM</command> performs many I/O
10825        requests which can hurt performance for other users. This
10826        release allows you to slow down <command>VACUUM</command> to
10827        reduce its impact on other users, though this increases the
10828        total duration of <command>VACUUM</command>.
10829       </para>
10830      </listitem>
10831
10832      <listitem>
10833       <para>
10834        Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom)
10835       </para>
10836       <para>
10837        This improves the way indexes are scanned when many duplicate
10838        values exist in the index.
10839       </para>
10840      </listitem>
10841
10842      <listitem>
10843       <para>
10844        Use dynamically-generated table size estimates while planning (Tom)
10845       </para>
10846       <para>
10847        Formerly the planner estimated table sizes using the values seen
10848        by the last <command>VACUUM</command> or <command>ANALYZE</command>,
10849        both as to physical table size (number of pages) and number of rows.
10850        Now, the current physical table size is obtained from the kernel,
10851        and the number of rows is estimated by multiplying the table size
10852        by the row density (rows per page) seen by the last
10853        <command>VACUUM</command> or <command>ANALYZE</command>.  This should
10854        produce more reliable estimates in cases where the table size has
10855        changed significantly since the last housekeeping command.
10856       </para>
10857      </listitem>
10858
10859      <listitem>
10860       <para>
10861        Improved index usage with <literal>OR</> clauses (Tom)
10862       </para>
10863       <para>
10864        This allows the optimizer to use indexes in statements with many OR
10865        clauses that would not have been indexed in the past.  It can also use
10866        multi-column indexes where the first column is specified and the second
10867        column is part of an <literal>OR</> clause.
10868       </para>
10869      </listitem>
10870
10871      <listitem>
10872       <para>
10873        Improve matching of partial index clauses (Tom)
10874       </para>
10875       <para>
10876        The server is now smarter about using partial indexes in queries
10877        involving complex <option>WHERE</> clauses.
10878       </para>
10879      </listitem>
10880
10881      <listitem>
10882       <para>
10883        Improve performance of the GEQO optimizer (Tom)
10884       </para>
10885       <para>
10886        The GEQO optimizer is used to plan queries involving many tables (by
10887        default, twelve or more). This release speeds up the way queries are
10888        analyzed to decrease time spent in optimization.
10889       </para>
10890      </listitem>
10891
10892      <listitem>
10893       <para>
10894        Miscellaneous optimizer improvements
10895       </para>
10896       <para>
10897        There is not room here to list all the minor improvements made, but
10898        numerous special cases work better than in prior releases.
10899       </para>
10900      </listitem>
10901
10902      <listitem>
10903       <para>
10904        Improve lookup speed for C functions (Tom)
10905       </para>
10906       <para>
10907        This release uses a hash table to lookup information for dynamically
10908        loaded C functions. This improves their speed so they perform nearly as
10909        quickly as functions that are built into the server executable.
10910       </para>
10911      </listitem>
10912
10913      <listitem>
10914       <para>
10915        Add type-specific <command>ANALYZE</command> statistics
10916        capability (Mark Cave-Ayland)
10917       </para>
10918       <para>
10919        This feature allows more flexibility in generating statistics
10920        for nonstandard data types.
10921       </para>
10922      </listitem>
10923
10924      <listitem>
10925       <para>
10926        <command>ANALYZE</command> now collects statistics for
10927        expression indexes (Tom)
10928       </para>
10929       <para>
10930        Expression indexes (also called functional indexes) allow users to
10931        index not just columns but the results of expressions and function
10932        calls. With this release, the optimizer can gather and use statistics
10933        about the contents of expression indexes.  This will greatly improve
10934        the quality of planning for queries in which an expression index is
10935        relevant.
10936       </para>
10937      </listitem>
10938
10939      <listitem>
10940       <para>
10941        New two-stage sampling method for <command>ANALYZE</command>
10942        (Manfred Koizar)
10943       </para>
10944       <para>
10945        This gives better statistics when the density of valid rows is very
10946        different in different regions of a table.
10947       </para>
10948      </listitem>
10949
10950      <listitem>
10951       <para>
10952        Speed up <command>TRUNCATE</command> (Tom)
10953       </para>
10954       <para>
10955        This buys back some of the performance loss observed in 7.4, while still
10956        keeping <command>TRUNCATE</command> transaction-safe.
10957       </para>
10958      </listitem>
10959
10960     </itemizedlist>
10961    </sect3>
10962
10963
10964    <sect3>
10965     <title>Server Changes</title>
10966     <itemizedlist>
10967
10968      <listitem>
10969       <para>
10970        Add WAL file archiving and point-in-time recovery (Simon Riggs)
10971       </para>
10972      </listitem>
10973
10974      <listitem>
10975       <para>
10976        Add tablespaces so admins can control disk layout (Gavin)
10977       </para>
10978      </listitem>
10979
10980      <listitem>
10981       <para>
10982        Add a built-in log rotation program (Andreas Pflug)
10983       </para>
10984       <para>
10985        It is now possible to log server messages conveniently without
10986        relying on either <application>syslog</> or an external log
10987        rotation program.
10988       </para>
10989      </listitem>
10990
10991      <listitem>
10992       <para>
10993        Add new read-only server configuration parameters to show server
10994        compile-time settings: <varname>block_size</>,
10995        <varname>integer_datetimes</>, <varname>max_function_args</>,
10996        <varname>max_identifier_length</>, <varname>max_index_keys</>  (Joe)
10997       </para>
10998      </listitem>
10999
11000      <listitem>
11001       <para>
11002        Make quoting of <literal>sameuser</>, <literal>samegroup</>, and
11003        <literal>all</> remove special meaning of these terms in
11004        <filename>pg_hba.conf</> (Andrew)
11005       </para>
11006      </listitem>
11007
11008      <listitem>
11009       <para>
11010        Use clearer IPv6 name <literal>::1/128</> for
11011        <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew)
11012       </para>
11013      </listitem>
11014
11015      <listitem>
11016       <para>
11017        Use CIDR format in <filename>pg_hba.conf</> examples (Andrew)
11018       </para>
11019      </listitem>
11020
11021      <listitem>
11022       <para>
11023        Rename server configuration parameters <varname>SortMem</> and
11024        <varname>VacuumMem</> to <varname>work_mem</> and
11025        <varname>maintenance_work_mem</> (Old names still supported) (Tom)
11026       </para>
11027       <para>
11028        This change was made to clarify that bulk operations such as index and
11029        foreign key creation use <varname>maintenance_work_mem</>, while
11030        <varname>work_mem</> is for workspaces used during query execution.
11031       </para>
11032      </listitem>
11033
11034      <listitem>
11035       <para>
11036        Allow logging of session disconnections using server configuration
11037        <varname>log_disconnections</> (Andrew)
11038       </para>
11039      </listitem>
11040
11041      <listitem>
11042       <para>
11043        Add new server configuration parameter <varname>log_line_prefix</> to
11044        allow control of information emitted in each log line (Andrew)
11045       </para>
11046       <para>
11047        Available information includes user name, database name, remote IP
11048        address, and session start time.
11049       </para>
11050      </listitem>
11051
11052      <listitem>
11053       <para>
11054        Remove server configuration parameters <varname>log_pid</>,
11055        <varname>log_timestamp</>, <varname>log_source_port</>; functionality
11056        superseded by <varname>log_line_prefix</> (Andrew)
11057       </para>
11058      </listitem>
11059
11060      <listitem>
11061       <para>
11062        Replace the <varname>virtual_host</> and <varname>tcpip_socket</>
11063        parameters with a unified <varname>listen_addresses</> parameter
11064        (Andrew, Tom)
11065       </para>
11066       <para>
11067        <varname>virtual_host</> could only specify a single IP address to
11068        listen on.  <varname>listen_addresses</> allows multiple addresses
11069        to be specified.
11070       </para>
11071      </listitem>
11072
11073      <listitem>
11074       <para>
11075        Listen on localhost by default, which eliminates the need for the
11076        <option>-i</> postmaster switch in many scenarios (Andrew)
11077       </para>
11078       <para>
11079        Listening on localhost (<literal>127.0.0.1</>) opens no new
11080        security holes but allows configurations like Windows and JDBC,
11081        which do not support local sockets, to work without special
11082        adjustments.
11083       </para>
11084      </listitem>
11085
11086      <listitem>
11087       <para>
11088        Remove <varname>syslog</> server configuration parameter, and add more
11089        logical <varname>log_destination</> variable to control log output
11090        location (Magnus)
11091       </para>
11092      </listitem>
11093
11094      <listitem>
11095       <para>
11096        Change server configuration parameter <varname>log_statement</> to take
11097        values <varname>all</>, <varname>mod</>, <varname>ddl</>, or
11098        <varname>none</> to select which queries are logged (Bruce)
11099       </para>
11100       <para>
11101        This allows administrators to log only data definition changes or
11102        only data modification statements.
11103       </para>
11104      </listitem>
11105
11106      <listitem>
11107       <para>
11108        Some logging-related configuration parameters could formerly be adjusted
11109        by ordinary users, but only in the <quote>more verbose</> direction.
11110        They are now treated more strictly: only superusers can set them.
11111        However, a superuser can use <command>ALTER USER</> to provide per-user
11112        settings of these values for non-superusers.  Also, it is now possible
11113        for superusers to set values of superuser-only configuration parameters
11114        via <literal>PGOPTIONS</>.
11115       </para>
11116      </listitem>
11117
11118      <listitem>
11119       <para>
11120        Allow configuration files to be placed outside the data directory (mlw)
11121       </para>
11122       <para>
11123        By default, configuration files are kept in the cluster's top directory.
11124        With this addition, configuration files can be placed outside the
11125        data directory, easing administration.
11126       </para>
11127      </listitem>
11128
11129      <listitem>
11130       <para>
11131        Plan prepared queries only when first executed so constants can be
11132        used for statistics (Oliver Jowett)
11133       </para>
11134       <para>
11135        Prepared statements plan queries once and execute them many
11136        times. While prepared queries avoid the overhead of re-planning
11137        on each use, the quality of the plan suffers from not knowing the exact
11138        parameters to be used in the query.  In this release, planning of
11139        unnamed prepared statements is delayed until the first execution,
11140        and the actual parameter values of that execution are used as
11141        optimization hints.  This allows use of out-of-line parameter passing
11142        without incurring a performance penalty.
11143       </para>
11144      </listitem>
11145
11146      <listitem>
11147       <para>
11148        Allow <command>DECLARE CURSOR</command> to take parameters
11149        (Oliver Jowett)
11150       </para>
11151       <para>
11152        It is now useful to issue <command>DECLARE CURSOR</command> in a
11153        <function>Parse</> message with parameters. The parameter values
11154        sent at <function>Bind</> time will be substituted into the
11155        execution of the cursor's query.
11156       </para>
11157      </listitem>
11158
11159      <listitem>
11160       <para>
11161        Fix hash joins and aggregates of <type>inet</type> and
11162        <type>cidr</type> data types (Tom)
11163       </para>
11164       <para>
11165        Release 7.4 handled hashing of mixed <type>inet</type> and
11166        <type>cidr</type> values incorrectly.  (This bug did not exist
11167        in prior releases because they wouldn't try to hash either
11168        data type.)
11169       </para>
11170      </listitem>
11171
11172      <listitem>
11173       <para>
11174        Make <varname>log_duration</> print only when <varname>log_statement</>
11175        prints the query (Ed L.)
11176       </para>
11177      </listitem>
11178
11179     </itemizedlist>
11180    </sect3>
11181
11182
11183    <sect3>
11184     <title>Query Changes</title>
11185     <itemizedlist>
11186
11187      <listitem>
11188       <para>
11189        Add savepoints (nested transactions) (Alvaro)
11190       </para>
11191      </listitem>
11192
11193      <listitem>
11194       <para>
11195        Unsupported isolation levels are now accepted and promoted to the
11196        nearest supported level (Peter)
11197       </para>
11198       <para>
11199        The SQL specification states that if a database doesn't support a
11200        specific isolation level, it should use the next more restrictive level.
11201        This change complies with that recommendation.
11202       </para>
11203      </listitem>
11204
11205      <listitem>
11206       <para>
11207        Allow <command>BEGIN WORK</command> to specify transaction
11208        isolation levels like <command>START TRANSACTION</command> does
11209        (Bruce)
11210       </para>
11211      </listitem>
11212
11213      <listitem>
11214       <para>
11215        Fix table permission checking for cases in which rules generate
11216        a query type different from the originally submitted query (Tom)
11217       </para>
11218      </listitem>
11219
11220      <listitem>
11221       <para>
11222        Implement dollar quoting to simplify single-quote usage (Andrew, Tom,
11223        David Fetter)
11224       </para>
11225       <para>
11226        In previous releases, because single quotes had to be used to
11227        quote a function's body, the use of single quotes inside the
11228        function text required use of two single quotes or other error-prone
11229        notations. With this release we add the ability to use "dollar
11230        quoting" to quote a block of text.  The ability to use different
11231        quoting delimiters at different nesting levels greatly simplifies
11232        the task of quoting correctly, especially in complex functions.
11233        Dollar quoting can be used anywhere quoted text is needed.
11234       </para>
11235      </listitem>
11236
11237      <listitem>
11238       <para>
11239        Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom)
11240       </para>
11241       <para>
11242        <option>CASE</> no longer evaluates the tested expression multiple
11243        times. This has benefits when the expression is complex or is
11244        volatile.
11245       </para>
11246      </listitem>
11247
11248      <listitem>
11249       <para>
11250        Test <option>HAVING</> before computing target list of an
11251        aggregate query (Tom)
11252       </para>
11253       <para>
11254        Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose)
11255        ... GROUP BY ... HAVING SUM(lose) &gt; 0</>.  This should work but formerly
11256        could fail with divide-by-zero.
11257       </para>
11258      </listitem>
11259
11260      <listitem>
11261       <para>
11262        Replace <varname>max_expr_depth</> parameter with
11263        <varname>max_stack_depth</> parameter, measured in kilobytes of stack
11264        size (Tom)
11265       </para>
11266       <para>
11267       This gives us a fairly bulletproof defense against crashing due to
11268       runaway recursive functions. Instead of measuring the depth of expression
11269       nesting, we now directly measure the size of the execution stack.
11270       </para>
11271      </listitem>
11272
11273      <listitem>
11274       <para>
11275        Allow arbitrary row expressions (Tom)
11276       </para>
11277       <para>
11278        This release allows SQL expressions to contain arbitrary composite
11279        types, that is, row values. It also allows functions to more easily
11280        take rows as arguments and return row values.
11281       </para>
11282      </listitem>
11283
11284      <listitem>
11285       <para>
11286        Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator
11287        in row and subselect comparisons (Fabien Coelho)
11288       </para>
11289      </listitem>
11290
11291      <listitem>
11292       <para>
11293        Avoid locale-specific case conversion of basic ASCII letters in
11294        identifiers and keywords (Tom)
11295       </para>
11296       <para>
11297        This solves the <quote>Turkish problem</> with mangling of words
11298        containing <literal>I</> and  <literal>i</>.  Folding of characters
11299        outside the 7-bit-ASCII set is still locale-aware.
11300       </para>
11301      </listitem>
11302
11303      <listitem>
11304       <para>
11305        Improve syntax error reporting (Fabien, Tom)
11306       </para>
11307       <para>
11308        Syntax error reports are more useful than before.
11309       </para>
11310      </listitem>
11311
11312      <listitem>
11313       <para>
11314        Change <command>EXECUTE</command> to return a completion tag
11315        matching the executed statement (Kris Jurka)
11316       </para>
11317       <para>
11318        Previous releases return an <command>EXECUTE</command> tag for
11319        any <command>EXECUTE</command> call. In this release, the tag
11320        returned will reflect the command executed.
11321       </para>
11322      </listitem>
11323
11324      <listitem>
11325       <para>
11326        Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom)
11327       </para>
11328       <para>
11329        Such a clause makes no logical sense, but in some cases the rule
11330        decompiler formerly produced this syntax.
11331       </para>
11332      </listitem>
11333
11334     </itemizedlist>
11335    </sect3>
11336
11337
11338    <sect3>
11339     <title>Object Manipulation Changes</title>
11340     <itemizedlist>
11341
11342      <listitem>
11343       <para>
11344        Add <command>COMMENT ON</> for casts, conversions, languages,
11345        operator classes, and large objects (Christopher)
11346       </para>
11347      </listitem>
11348
11349      <listitem>
11350       <para>
11351        Add new server configuration parameter <varname>default_with_oids</> to
11352        control whether tables are created with <type>OID</>s by default (Neil)
11353       </para>
11354       <para>
11355        This allows administrators to control whether <command>CREATE
11356        TABLE</command> commands create tables with or without <type>OID</>
11357        columns by default.  (Note: the current factory default setting for
11358        <varname>default_with_oids</> is <literal>TRUE</>, but the default
11359        will become <literal>FALSE</> in future releases.)
11360       </para>
11361      </listitem>
11362
11363      <listitem>
11364       <para>
11365        Add <option>WITH</> / <option>WITHOUT OIDS</> clause to
11366        <command>CREATE TABLE AS</command> (Neil)
11367       </para>
11368      </listitem>
11369
11370      <listitem>
11371       <para>
11372        Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</>
11373        column (<command>ALTER TABLE SET WITHOUT OIDS</> still works)
11374        (Tom)
11375       </para>
11376      </listitem>
11377
11378      <listitem>
11379       <para>
11380        Allow composite types as table columns (Tom)
11381       </para>
11382      </listitem>
11383
11384      <listitem>
11385       <para>
11386        Allow <command>ALTER ... ADD COLUMN</> with defaults and
11387        <option>NOT NULL</> constraints; works per SQL spec (Rod)
11388       </para>
11389       <para>
11390        It is now possible for <option>ADD COLUMN</> to create a column
11391        that is not initially filled with NULLs, but with a specified
11392        default value.
11393       </para>
11394      </listitem>
11395
11396      <listitem>
11397       <para>
11398        Add <command>ALTER COLUMN TYPE</> to change column's type (Rod)
11399       </para>
11400       <para>
11401        It is now possible to alter a column's data type without dropping
11402        and re-adding the column.
11403       </para>
11404      </listitem>
11405
11406      <listitem>
11407       <para>
11408        Allow multiple <command>ALTER</> actions in a single <command>ALTER
11409        TABLE</command> command (Rod)
11410       </para>
11411       <para>
11412        This is particularly useful for <command>ALTER</> commands that
11413        rewrite the table (which include <option>ALTER COLUMN TYPE</> and
11414        <option>ADD COLUMN</> with a default). By grouping
11415        <command>ALTER</> commands together, the table need be rewritten
11416        only once.
11417       </para>
11418      </listitem>
11419
11420      <listitem>
11421       <para>
11422        Allow <command>ALTER TABLE</command> to add <type>SERIAL</type>
11423        columns (Tom)
11424       </para>
11425       <para>
11426        This falls out from the new capability of specifying defaults for new
11427        columns.
11428       </para>
11429      </listitem>
11430
11431      <listitem>
11432       <para>
11433        Allow changing the owners of aggregates, conversions, databases,
11434        functions, operators, operator classes, schemas, types, and tablespaces
11435        (Christopher, Euler Taveira de Oliveira)
11436       </para>
11437       <para>
11438        Previously this required modifying the system tables directly.
11439       </para>
11440      </listitem>
11441
11442      <listitem>
11443       <para>
11444        Allow temporary object creation to be limited to <option>SECURITY
11445        DEFINER</> functions (Sean Chittenden)
11446       </para>
11447      </listitem>
11448
11449      <listitem>
11450       <para>
11451        Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher)
11452       </para>
11453       <para>
11454        Prior to this release, there was no way to clear an auto-cluster
11455        specification except to modify the system tables.
11456       </para>
11457      </listitem>
11458
11459      <listitem>
11460       <para>
11461        Constraint/Index/<type>SERIAL</> names are now
11462        <replaceable>table_column_type</>
11463        with numbers appended to guarantee uniqueness within the schema
11464        (Tom)
11465       </para>
11466       <para>
11467        The SQL specification states that such names should be unique
11468        within a schema.
11469       </para>
11470      </listitem>
11471
11472      <listitem>
11473       <para>
11474        Add <function>pg_get_serial_sequence()</> to return a
11475        <type>SERIAL</> column's sequence name (Christopher)
11476       </para>
11477       <para>
11478        This allows automated scripts to reliably find the <type>SERIAL</>
11479        sequence name.
11480       </para>
11481      </listitem>
11482
11483      <listitem>
11484       <para>
11485        Warn when primary/foreign key data type mismatch requires costly lookup
11486       </para>
11487      </listitem>
11488
11489      <listitem>
11490       <para>
11491        New <command>ALTER INDEX</> command to allow moving of indexes
11492        between tablespaces (Gavin)
11493       </para>
11494      </listitem>
11495
11496      <listitem>
11497       <para>
11498        Make <command>ALTER TABLE OWNER</> change dependent sequence
11499        ownership too (Alvaro)
11500       </para>
11501      </listitem>
11502
11503
11504     </itemizedlist>
11505    </sect3>
11506
11507
11508    <sect3>
11509     <title>Utility Command Changes</title>
11510     <itemizedlist>
11511
11512      <listitem>
11513       <para>
11514        Allow <command>CREATE SCHEMA</command> to create triggers,
11515        indexes, and sequences (Neil)
11516       </para>
11517      </listitem>
11518
11519      <listitem>
11520       <para>
11521        Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien
11522        Coelho)
11523       </para>
11524       <para>
11525        This allows <option>ALSO</> to be added to rule creation to contrast it with
11526        <option>INSTEAD</> rules.
11527       </para>
11528      </listitem>
11529
11530      <listitem>
11531       <para>
11532        Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo)
11533       </para>
11534       <para>
11535        This allows the <command>LOCK</command> command to fail if it
11536        would have to wait for the requested lock.
11537       </para>
11538      </listitem>
11539
11540      <listitem>
11541       <para>
11542        Allow <command>COPY</command> to read and write
11543        comma-separated-value (CSV) files (Andrew, Bruce)
11544       </para>
11545      </listitem>
11546
11547      <listitem>
11548       <para>
11549        Generate error if the <command>COPY</command> delimiter and NULL
11550        string conflict (Bruce)
11551       </para>
11552      </listitem>
11553
11554      <listitem>
11555       <para>
11556        <command>GRANT</command>/<command>REVOKE</command> behavior
11557        follows the SQL spec more closely
11558       </para>
11559      </listitem>
11560
11561      <listitem>
11562       <para>
11563        Avoid locking conflict between <command>CREATE INDEX</command>
11564        and <command>CHECKPOINT</command> (Tom)
11565       </para>
11566       <para>
11567        In 7.3 and 7.4, a long-running B-tree index build could block concurrent
11568        <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the
11569        WAL log could not be recycled.
11570       </para>
11571      </listitem>
11572
11573      <listitem>
11574       <para>
11575        Database-wide <command>ANALYZE</command> does not hold locks
11576        across tables (Tom)
11577       </para>
11578       <para>
11579        This reduces the potential for deadlocks against other backends
11580        that want exclusive locks on tables.  To get the benefit of this
11581        change, do not execute database-wide <command>ANALYZE</command>
11582        inside a transaction block (<command>BEGIN</command> block); it
11583        must be able to commit and start a new transaction for each
11584        table.
11585       </para>
11586      </listitem>
11587
11588      <listitem>
11589       <para>
11590        <command>REINDEX</command> does not exclusively lock the index's
11591        parent table anymore
11592       </para>
11593       <para>
11594        The index itself is still exclusively locked, but readers of the
11595        table can continue if they are not using the particular index
11596        being rebuilt.
11597       </para>
11598      </listitem>
11599
11600      <listitem>
11601       <para>
11602        Erase MD5 user passwords when a user is renamed (Bruce)
11603       </para>
11604       <para>
11605        <productname>PostgreSQL</productname> uses the user name as salt
11606        when encrypting passwords via MD5. When a user's name is changed,
11607        the salt will no longer match the stored MD5 password, so the
11608        stored password becomes useless.  In this release a notice is
11609        generated and the password is cleared.  A new password must then
11610        be assigned if the user is to be able to log in with a password.
11611       </para>
11612      </listitem>
11613
11614      <listitem>
11615       <para>
11616        New <application>pg_ctl</> <option>kill</> option for Windows (Andrew)
11617       </para>
11618       <para>
11619        Windows does not have a <literal>kill</> command to send signals to
11620        backends so this capability was added to <application>pg_ctl</>.
11621       </para>
11622      </listitem>
11623
11624      <listitem>
11625       <para>
11626        Information schema improvements
11627       </para>
11628      </listitem>
11629
11630      <listitem>
11631       <para>
11632        Add <option>--pwfile</> option to
11633        <application>initdb</application> so the initial password can be
11634        set by GUI tools (Magnus)
11635       </para>
11636      </listitem>
11637
11638      <listitem>
11639       <para>
11640        Detect locale/encoding mismatch in
11641        <application>initdb</application> (Peter)
11642       </para>
11643      </listitem>
11644
11645      <listitem>
11646       <para>
11647        Add <option>register</> command to <application>pg_ctl</> to
11648        register Windows operating system service (Dave Page)
11649       </para>
11650      </listitem>
11651
11652     </itemizedlist>
11653    </sect3>
11654
11655
11656    <sect3>
11657     <title>Data Type and Function Changes</title>
11658     <itemizedlist>
11659
11660      <listitem>
11661       <para>
11662        More complete support for composite types (row types)  (Tom)
11663       </para>
11664       <para>
11665        Composite values can be used in many places where only scalar values
11666        worked before.
11667       </para>
11668      </listitem>
11669
11670      <listitem>
11671       <para>
11672        Reject nonrectangular array values as erroneous (Joe)
11673       </para>
11674       <para>
11675        Formerly, <function>array_in</> would silently build a
11676        surprising result.
11677       </para>
11678      </listitem>
11679
11680       <listitem>
11681        <para>
11682         Overflow in integer arithmetic operations is now detected (Tom)
11683        </para>
11684       </listitem>
11685
11686       <listitem>
11687        <para>
11688         The arithmetic operators associated with the single-byte
11689         <type>"char"</> data type have been removed.
11690        </para>
11691        <para>
11692         Formerly, the parser would select these operators in many situations
11693         where an <quote>unable to select an operator</> error would be more
11694         appropriate, such as <literal>null * null</>.  If you actually want
11695         to do arithmetic on a <type>"char"</> column, you can cast it to
11696         integer explicitly.
11697        </para>
11698       </listitem>
11699
11700      <listitem>
11701        <para>
11702         Syntax checking of array input values considerably tightened up (Joe)
11703        </para>
11704       <para>
11705         Junk that was previously allowed in odd places with odd results
11706         now causes an <literal>ERROR</>, for example, non-whitespace
11707         after the closing right brace.
11708        </para>
11709      </listitem>
11710
11711      <listitem>
11712        <para>
11713         Empty-string array element values must now be written as
11714         <literal>""</>, rather than writing nothing (Joe)
11715        </para>
11716       <para>
11717         Formerly, both ways of writing an empty-string element value were
11718         allowed, but now a quoted empty string is required.  The case where
11719         nothing at all appears will probably be considered to be a NULL
11720         element value in some future release.
11721        </para>
11722      </listitem>
11723
11724      <listitem>
11725        <para>
11726         Array element trailing whitespace is now ignored (Joe)
11727        </para>
11728       <para>
11729         Formerly leading whitespace was ignored, but trailing whitespace
11730         between an element value and the delimiter or right brace was
11731         significant.  Now trailing whitespace is also ignored.
11732        </para>
11733      </listitem>
11734
11735      <listitem>
11736       <para>
11737        Emit array values with explicit array bounds when lower bound is not one
11738        (Joe)
11739       </para>
11740      </listitem>
11741
11742      <listitem>
11743       <para>
11744        Accept <literal>YYYY-monthname-DD</> as a date string (Tom)
11745       </para>
11746      </listitem>
11747
11748      <listitem>
11749       <para>
11750        Make <function>netmask</> and <function>hostmask</> functions
11751        return maximum-length mask length (Tom)
11752       </para>
11753      </listitem>
11754
11755      <listitem>
11756       <para>
11757        Change factorial function to return <type>numeric</type> (Gavin)
11758       </para>
11759       <para>
11760        Returning <type>numeric</type> allows the factorial function to
11761        work for a wider range of input values.
11762       </para>
11763      </listitem>
11764
11765      <listitem>
11766       <para>
11767        <function>to_char</>/<function>to_date()</> date conversion
11768        improvements (Kurt Roeckx, Fabien Coelho)
11769       </para>
11770      </listitem>
11771
11772      <listitem>
11773       <para>
11774        Make <function>length()</> disregard trailing spaces in
11775        <type>CHAR(n)</> (Gavin)
11776       </para>
11777       <para>
11778        This change was made to improve consistency: trailing spaces are
11779        semantically insignificant in <type>CHAR(n)</> data, so they
11780        should not be counted by <function>length()</>.
11781       </para>
11782      </listitem>
11783
11784      <listitem>
11785       <para>
11786        Warn about empty string being passed to
11787        <type>OID</>/<type>float4</>/<type>float8</> data types (Neil)
11788       </para>
11789       <para>
11790        8.1 will throw an error instead.
11791       </para>
11792      </listitem>
11793
11794      <listitem>
11795       <para>
11796        Allow leading or trailing whitespace in
11797        <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</>
11798        input routines
11799        (Neil)
11800       </para>
11801      </listitem>
11802
11803      <listitem>
11804       <para>
11805        Better support for IEEE <literal>Infinity</> and <literal>NaN</>
11806        values in <type>float4</type>/<type>float8</type> (Neil)
11807       </para>
11808       <para>
11809        These should now work on all platforms that support IEEE-compliant
11810        floating point arithmetic.
11811       </para>
11812      </listitem>
11813
11814      <listitem>
11815       <para>
11816        Add <option>week</> option to <function>date_trunc()</> (Robert Creager)
11817       </para>
11818      </listitem>
11819
11820      <listitem>
11821       <para>
11822        Fix <function>to_char</function> for <literal>1 BC</>
11823        (previously it returned <literal>1 AD</>) (Bruce)
11824       </para>
11825      </listitem>
11826
11827      <listitem>
11828       <para>
11829        Fix <function>date_part(year)</> for BC dates (previously it
11830        returned one less than the correct year) (Bruce)
11831       </para>
11832      </listitem>
11833
11834      <listitem>
11835       <para>
11836        Fix <function>date_part()</> to return the proper millennium and
11837        century (Fabien Coelho)
11838       </para>
11839       <para>
11840        In previous versions, the century and millennium results had a wrong
11841        number and started in the wrong year, as compared to standard
11842        reckoning of such things.
11843       </para>
11844      </listitem>
11845
11846      <listitem>
11847       <para>
11848        Add <function>ceiling()</> as an alias for <function>ceil()</>,
11849        and <function>power()</> as an alias for <function>pow()</> for
11850        standards compliance (Neil)
11851       </para>
11852      </listitem>
11853
11854      <listitem>
11855       <para>
11856        Change <function>ln()</>, <function>log()</>,
11857        <function>power()</>, and <function>sqrt()</> to emit the correct
11858        <literal>SQLSTATE</> error codes for certain error conditions, as
11859        specified by SQL:2003 (Neil)
11860       </para>
11861      </listitem>
11862
11863      <listitem>
11864       <para>
11865        Add <function>width_bucket()</> function as defined by SQL:2003 (Neil)
11866       </para>
11867      </listitem>
11868
11869      <listitem>
11870       <para>
11871        Add <function>generate_series()</> functions to simplify working
11872        with numeric sets (Joe)
11873       </para>
11874      </listitem>
11875
11876      <listitem>
11877       <para>
11878        Fix <function>upper/lower/initcap()</> functions to work with
11879        multibyte encodings (Tom)
11880       </para>
11881      </listitem>
11882
11883      <listitem>
11884       <para>
11885        Add boolean and bitwise integer <option>AND</>/<option>OR</>
11886        aggregates (Fabien Coelho)
11887       </para>
11888      </listitem>
11889
11890      <listitem>
11891       <para>
11892        New session information functions to return network addresses for client
11893        and server (Sean Chittenden)
11894       </para>
11895      </listitem>
11896
11897      <listitem>
11898       <para>
11899        Add function to determine the area of a closed path (Sean Chittenden)
11900       </para>
11901      </listitem>
11902
11903      <listitem>
11904       <para>
11905        Add function to send cancel request to other backends (Magnus)
11906       </para>
11907      </listitem>
11908
11909      <listitem>
11910       <para>
11911        Add <type>interval</> plus <type>datetime</> operators (Tom)
11912       </para>
11913       <para>
11914        The reverse ordering, <type>datetime</> plus <type>interval</>,
11915        was already supported, but both are required by the SQL standard.
11916       </para>
11917      </listitem>
11918
11919      <listitem>
11920       <para>
11921        Casting an integer to <type>BIT(N)</> selects the rightmost N bits
11922        of the integer
11923        (Tom)
11924       </para>
11925       <para>
11926        In prior releases, the leftmost N bits were selected, but this was
11927        deemed unhelpful, not to mention inconsistent with casting from bit
11928        to int.
11929       </para>
11930      </listitem>
11931
11932      <listitem>
11933       <para>
11934        Require <type>CIDR</> values to have all nonmasked bits be zero
11935        (Kevin Brintnall)
11936       </para>
11937      </listitem>
11938
11939     </itemizedlist>
11940    </sect3>
11941
11942
11943    <sect3>
11944     <title>Server-Side Language Changes</title>
11945     <itemizedlist>
11946
11947      <listitem>
11948       <para>
11949        In <literal>READ COMMITTED</> serialization mode, volatile functions
11950        now see the results of concurrent transactions committed up to the
11951        beginning of each statement within the function, rather than up to the
11952        beginning of the interactive command that called the function.
11953       </para>
11954      </listitem>
11955
11956      <listitem>
11957       <para>
11958        Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always
11959        use the snapshot of the calling query, and therefore do not see the
11960        effects of actions taken after the calling query starts, whether in
11961        their own transaction or other transactions.  Such a function must be
11962        read-only, too, meaning that it cannot use any SQL commands other than
11963        <command>SELECT</>.  There is a considerable performance gain from
11964        declaring a function <literal>STABLE</> or <literal>IMMUTABLE</>
11965        rather than <literal>VOLATILE</>.
11966       </para>
11967      </listitem>
11968
11969      <listitem>
11970       <para>
11971        Nondeferred <option>AFTER</> triggers are now fired immediately
11972        after completion of the triggering query, rather than upon
11973        finishing the current interactive command. This makes a difference
11974        when the triggering query occurred within a function: the trigger
11975        is invoked before the function proceeds to its next operation. For
11976        example, if a function inserts a new row into a table, any
11977        nondeferred foreign key checks occur before proceeding with the
11978        function.
11979       </para>
11980      </listitem>
11981
11982      <listitem>
11983       <para>
11984        Allow function parameters to be declared with names (Dennis Bj&ouml;rklund)
11985       </para>
11986       <para>
11987        This allows better documentation of functions.  Whether the names
11988        actually do anything depends on the specific function language
11989        being used.
11990       </para>
11991      </listitem>
11992
11993      <listitem>
11994       <para>
11995        Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bj&ouml;rklund)
11996       </para>
11997       <para>
11998        This basically creates an automatic alias for each named parameter.
11999       </para>
12000      </listitem>
12001
12002      <listitem>
12003       <para>
12004        Do minimal syntax checking of PL/pgSQL functions at creation time (Tom)
12005       </para>
12006       <para>
12007        This allows us to catch simple syntax errors sooner.
12008       </para>
12009      </listitem>
12010
12011      <listitem>
12012       <para>
12013        More support for composite types (row and record variables) in PL/pgSQL
12014       </para>
12015       <para>
12016        For example, it now works to pass a rowtype variable to another function
12017        as a single variable.
12018       </para>
12019      </listitem>
12020
12021      <listitem>
12022       <para>
12023        Default values for PL/pgSQL variables can now reference previously
12024        declared variables
12025       </para>
12026      </listitem>
12027
12028      <listitem>
12029       <para>
12030        Improve parsing of PL/pgSQL FOR loops (Tom)
12031       </para>
12032       <para>
12033        Parsing is now driven by presence of <literal>".."</> rather than
12034        data type of <option>FOR</> variable. This makes no difference for
12035        correct functions, but should result in more understandable error
12036        messages when a mistake is made.
12037       </para>
12038      </listitem>
12039
12040      <listitem>
12041       <para>
12042        Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan)
12043       </para>
12044      </listitem>
12045
12046      <listitem>
12047       <para>
12048        In PL/Tcl, SPI commands are now run in subtransactions.  If an error
12049        occurs, the subtransaction is cleaned up and the error is reported
12050        as an ordinary Tcl error, which can be trapped with <literal>catch</>.
12051        Formerly, it was not possible to catch such errors.
12052       </para>
12053      </listitem>
12054
12055      <listitem>
12056       <para>
12057        Accept <command>ELSEIF</> in PL/pgSQL (Neil)
12058       </para>
12059       <para>
12060        Previously PL/pgSQL only allowed <command>ELSIF</>, but many people
12061        are accustomed to spelling this keyword <command>ELSEIF</>.
12062       </para>
12063      </listitem>
12064
12065     </itemizedlist>
12066    </sect3>
12067
12068
12069    <sect3>
12070     <title><application>psql</> Changes</title>
12071     <itemizedlist>
12072
12073      <listitem>
12074       <para>
12075        Improve <application>psql</> information display about database
12076        objects (Christopher)
12077       </para>
12078      </listitem>
12079
12080      <listitem>
12081       <para>
12082        Allow <application>psql</> to display group membership in
12083        <command>\du</> and <command>\dg</> (Markus Bertheau)
12084       </para>
12085      </listitem>
12086
12087      <listitem>
12088       <para>
12089        Prevent <application>psql</> <command>\dn</command> from showing
12090        temporary schemas (Bruce)
12091       </para>
12092      </listitem>
12093
12094      <listitem>
12095       <para>
12096        Allow <application>psql</> to handle tilde user expansion for file
12097        names (Zach Irmen)
12098       </para>
12099      </listitem>
12100
12101      <listitem>
12102       <para>
12103        Allow <application>psql</> to display fancy prompts, including
12104        color, via <application>readline</> (Reece Hart, Chet Ramey)
12105       </para>
12106      </listitem>
12107
12108      <listitem>
12109       <para>
12110        Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax
12111        fully (Tom)
12112       </para>
12113      </listitem>
12114
12115      <listitem>
12116       <para>
12117        Show the location of syntax errors (Fabien Coelho, Tom)
12118       </para>
12119      </listitem>
12120
12121      <listitem>
12122       <para>
12123        Add <command>CLUSTER</command> information to <application>psql</>
12124        <command>\d</> display
12125        (Bruce)
12126       </para>
12127      </listitem>
12128
12129      <listitem>
12130       <para>
12131        Change <application>psql</> <command>\copy stdin/stdout</> to read
12132        from command input/output (Bruce)
12133       </para>
12134      </listitem>
12135
12136      <listitem>
12137       <para>
12138        Add <option>pstdin</>/<option>pstdout</> to read from
12139        <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark
12140        Feit)
12141       </para>
12142      </listitem>
12143
12144      <listitem>
12145       <para>
12146        Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename>
12147        (Bruce)
12148       </para>
12149       <para>
12150        This allows a central file where global <application>psql</> startup commands can
12151        be stored.
12152       </para>
12153      </listitem>
12154
12155      <listitem>
12156       <para>
12157        Have <application>psql</> <command>\d+</> indicate if the table
12158        has an <type>OID</> column (Neil)
12159       </para>
12160      </listitem>
12161
12162      <listitem>
12163       <para>
12164        On Windows, use binary mode in <application>psql</> when reading files so control-Z
12165        is not seen as end-of-file
12166       </para>
12167      </listitem>
12168
12169      <listitem>
12170       <para>
12171        Have <command>\dn+</> show permissions and description for schemas (Dennis
12172        Bj&ouml;rklund)
12173       </para>
12174      </listitem>
12175
12176      <listitem>
12177       <para>
12178        Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane)
12179       </para>
12180      </listitem>
12181
12182      <listitem>
12183       <para>
12184        Allow boolean settings to be set using upper or lower case (Michael Paesold)
12185       </para>
12186      </listitem>
12187
12188     </itemizedlist>
12189    </sect3>
12190
12191
12192    <sect3>
12193     <title><application>pg_dump</> Changes</title>
12194     <itemizedlist>
12195
12196      <listitem>
12197       <para>
12198        Use dependency information to improve the reliability of
12199        <application>pg_dump</> (Tom)
12200       </para>
12201       <para>
12202        This should solve the longstanding problems with related objects
12203        sometimes being dumped in the wrong order.
12204       </para>
12205      </listitem>
12206
12207      <listitem>
12208       <para>
12209        Have <application>pg_dump</> output objects in alphabetical order if possible (Tom)
12210       </para>
12211       <para>
12212        This should make it easier to identify changes between
12213        dump files.
12214       </para>
12215      </listitem>
12216
12217      <listitem>
12218       <para>
12219        Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho)
12220       </para>
12221       <para>
12222        This makes <application>pg_restore</>'s behavior similar to the
12223        results of feeding a <application>pg_dump</> output script to
12224        <application>psql</>. In most cases, ignoring errors and plowing
12225        ahead is the most useful thing to do. Also added was a pg_restore
12226        option to give the old behavior of exiting on an error.
12227       </para>
12228      </listitem>
12229
12230      <listitem>
12231       <para>
12232        <application>pg_restore</> <option>-l</> display now includes
12233        objects' schema names
12234       </para>
12235      </listitem>
12236
12237      <listitem>
12238       <para>
12239        New begin/end markers in <application>pg_dump</> text output (Bruce)
12240       </para>
12241      </listitem>
12242
12243      <listitem>
12244       <para>
12245        Add start/stop times for
12246        <application>pg_dump</>/<application>pg_dumpall</> in verbose mode
12247        (Bruce)
12248       </para>
12249      </listitem>
12250
12251      <listitem>
12252       <para>
12253        Allow most <application>pg_dump</> options in
12254        <application>pg_dumpall</> (Christopher)
12255       </para>
12256      </listitem>
12257
12258      <listitem>
12259       <para>
12260        Have <application>pg_dump</> use <command>ALTER OWNER</> rather
12261        than <command>SET SESSION AUTHORIZATION</> by default
12262        (Christopher)
12263       </para>
12264      </listitem>
12265
12266     </itemizedlist>
12267    </sect3>
12268
12269
12270    <sect3>
12271     <title>libpq Changes</title>
12272     <itemizedlist>
12273
12274      <listitem>
12275       <para>
12276        Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce)
12277       </para>
12278      </listitem>
12279
12280      <listitem>
12281       <para>
12282        Add <function>PQmbdsplen()</> which returns the display length
12283        of a character (Tatsuo)
12284       </para>
12285      </listitem>
12286
12287      <listitem>
12288       <para>
12289        Add thread locking to <application>SSL</> and
12290        <application>Kerberos</> connections (Manfred Spraul)
12291       </para>
12292      </listitem>
12293
12294      <listitem>
12295       <para>
12296        Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and
12297        <function>PQoidStatus()</> to work on <command>EXECUTE</command>
12298        commands (Neil)
12299       </para>
12300      </listitem>
12301
12302      <listitem>
12303       <para>
12304        Add <function>PQserverVersion()</> to provide more convenient
12305        access to the server version number (Greg Sabino Mullane)
12306       </para>
12307      </listitem>
12308
12309      <listitem>
12310       <para>
12311        Add <function>PQprepare/PQsendPrepared()</> functions to support
12312        preparing statements without necessarily specifying the data types
12313        of their parameters (Abhijit Menon-Sen)
12314       </para>
12315      </listitem>
12316
12317      <listitem>
12318       <para>
12319        Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael)
12320       </para>
12321      </listitem>
12322
12323     </itemizedlist>
12324    </sect3>
12325
12326
12327    <sect3>
12328     <title>Source Code Changes</title>
12329     <itemizedlist>
12330
12331      <listitem>
12332       <para>
12333        Allow the database server to run natively on Windows (Claudio, Magnus, Andrew)
12334       </para>
12335      </listitem>
12336
12337      <listitem>
12338       <para>
12339        Shell script commands converted to C versions for Windows support (Andrew)
12340       </para>
12341      </listitem>
12342
12343      <listitem>
12344       <para>
12345        Create an extension makefile framework (Fabien Coelho, Peter)
12346       </para>
12347       <para>
12348        This simplifies the task of building extensions outside the original
12349        source tree.
12350       </para>
12351      </listitem>
12352
12353      <listitem>
12354       <para>
12355        Support relocatable installations (Bruce)
12356       </para>
12357       <para>
12358        Directory paths for installed files (such as the
12359        <filename>/share</> directory) are now computed relative to the
12360        actual location of the executables, so that an installation tree
12361        can be moved to another place without reconfiguring and
12362        rebuilding.
12363       </para>
12364      </listitem>
12365
12366      <listitem>
12367       <para>
12368        Use <option>--with-docdir</> to choose installation location of documentation; also
12369        allow <option>--infodir</> (Peter)
12370       </para>
12371      </listitem>
12372
12373      <listitem>
12374       <para>
12375        Add <option>--without-docdir</> to prevent installation of documentation (Peter)
12376       </para>
12377      </listitem>
12378
12379      <listitem>
12380       <para>
12381        Upgrade to <application>DocBook</> V4.2 SGML (Peter)
12382       </para>
12383      </listitem>
12384
12385      <listitem>
12386       <para>
12387        New <literal>PostgreSQL</> <application>CVS</> tag (Marc)
12388       </para>
12389       <para>
12390        This was done to make it easier for organizations to manage their
12391        own copies of the <productname>PostgreSQL</productname>
12392        <application>CVS</> repository. File version stamps from the master
12393        repository will not get munged by checking into or out of a copied
12394        repository.
12395       </para>
12396      </listitem>
12397
12398      <listitem>
12399       <para>
12400        Clarify locking code (Manfred Koizar)
12401       </para>
12402      </listitem>
12403
12404      <listitem>
12405       <para>
12406        Buffer manager cleanup (Neil)
12407       </para>
12408      </listitem>
12409
12410      <listitem>
12411       <para>
12412        Decouple platform tests from CPU spinlock code (Bruce, Tom)
12413       </para>
12414      </listitem>
12415
12416      <listitem>
12417       <para>
12418        Add inlined test-and-set code on PA-RISC for <application>gcc</>
12419        (ViSolve, Tom)
12420       </para>
12421      </listitem>
12422
12423      <listitem>
12424       <para>
12425        Improve i386 spinlock code (Manfred Spraul)
12426       </para>
12427      </listitem>
12428
12429      <listitem>
12430       <para>
12431        Clean up spinlock assembly code to avoid warnings from newer
12432        <application>gcc</> releases (Tom)
12433       </para>
12434      </listitem>
12435
12436      <listitem>
12437       <para>
12438        Remove JDBC from source tree; now a separate project
12439       </para>
12440      </listitem>
12441
12442      <listitem>
12443       <para>
12444        Remove the libpgtcl client interface; now a separate project
12445       </para>
12446      </listitem>
12447
12448      <listitem>
12449       <para>
12450        More accurately estimate memory and file descriptor usage (Tom)
12451       </para>
12452      </listitem>
12453
12454      <listitem>
12455       <para>
12456        Improvements to the Mac OS X startup scripts (Ray A.)
12457       </para>
12458      </listitem>
12459
12460      <listitem>
12461       <para>
12462        New <function>fsync()</> test program (Bruce)
12463       </para>
12464      </listitem>
12465
12466      <listitem>
12467       <para>
12468        Major documentation improvements (Neil, Peter)
12469       </para>
12470      </listitem>
12471
12472      <listitem>
12473       <para>
12474        Remove <application>pg_encoding</application>; not needed
12475        anymore
12476       </para>
12477      </listitem>
12478
12479      <listitem>
12480       <para>
12481        Remove <application>pg_id</application>; not needed anymore
12482       </para>
12483      </listitem>
12484
12485      <listitem>
12486       <para>
12487        Remove <application>initlocation</application>; not needed
12488        anymore
12489       </para>
12490      </listitem>
12491
12492      <listitem>
12493       <para>
12494        Auto-detect thread flags (no more manual testing) (Bruce)
12495       </para>
12496      </listitem>
12497
12498      <listitem>
12499       <para>
12500        Use Olson's public domain <application>timezone</> library (Magnus)
12501       </para>
12502      </listitem>
12503
12504      <listitem>
12505       <para>
12506        With threading enabled, use thread flags on Unixware for
12507        backend executables too (Bruce)
12508       </para>
12509       <para>
12510        Unixware cannot mix threaded and nonthreaded object files in the
12511        same executable, so everything must be compiled as threaded.
12512       </para>
12513      </listitem>
12514
12515      <listitem>
12516       <para>
12517        <application>psql</> now uses a <application>flex</>-generated
12518        lexical analyzer to process command strings
12519       </para>
12520      </listitem>
12521
12522      <listitem>
12523       <para>
12524        Reimplement the linked list data structure used throughout the
12525        backend (Neil)
12526       </para>
12527       <para>
12528        This improves performance by allowing list append and length
12529        operations to be more efficient.
12530       </para>
12531      </listitem>
12532
12533      <listitem>
12534       <para>
12535        Allow dynamically loaded modules to create their own server configuration
12536        parameters (Thomas Hallgren)
12537       </para>
12538      </listitem>
12539
12540      <listitem>
12541       <para>
12542        New Brazilian version of FAQ (Euler Taveira de Oliveira)
12543       </para>
12544      </listitem>
12545
12546      <listitem>
12547       <para>
12548        Add French FAQ (Guillaume Lelarge)
12549       </para>
12550      </listitem>
12551
12552      <listitem>
12553       <para>
12554        New <application>pgevent</> for Windows logging
12555       </para>
12556      </listitem>
12557
12558      <listitem>
12559       <para>
12560        Make libpq and ECPG build as proper shared libraries on OS X (Tom)
12561       </para>
12562      </listitem>
12563
12564     </itemizedlist>
12565    </sect3>
12566
12567
12568    <sect3>
12569     <title>Contrib Changes</title>
12570     <itemizedlist>
12571
12572      <listitem>
12573       <para>
12574        Overhaul of <filename>contrib/dblink</> (Joe)
12575       </para>
12576      </listitem>
12577
12578      <listitem>
12579       <para>
12580        <filename>contrib/dbmirror</> improvements (Steven Singer)
12581       </para>
12582      </listitem>
12583
12584      <listitem>
12585       <para>
12586        New <filename>contrib/xml2</> (John Gray, Torchbox)
12587       </para>
12588      </listitem>
12589
12590      <listitem>
12591       <para>
12592        Updated <filename>contrib/mysql</filename>
12593       </para>
12594      </listitem>
12595
12596      <listitem>
12597       <para>
12598        New version of <filename>contrib/btree_gist</> (Teodor)
12599       </para>
12600      </listitem>
12601
12602      <listitem>
12603       <para>
12604        New <filename>contrib/trgm</>, trigram matching for
12605        <productname>PostgreSQL</productname> (Teodor)
12606       </para>
12607      </listitem>
12608
12609      <listitem>
12610       <para>
12611        Many <filename>contrib/tsearch2</> improvements (Teodor)
12612       </para>
12613      </listitem>
12614
12615      <listitem>
12616       <para>
12617        Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew)
12618       </para>
12619      </listitem>
12620
12621      <listitem>
12622       <para>
12623        Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page)
12624       </para>
12625      </listitem>
12626
12627      <listitem>
12628       <para>
12629        Add functions to <filename>contrib/dbsize</> (Andreas Pflug)
12630       </para>
12631      </listitem>
12632
12633      <listitem>
12634       <para>
12635        Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging
12636        subprocess
12637       </para>
12638      </listitem>
12639
12640      <listitem>
12641       <para>
12642        Removed <filename>contrib/rserv</>: obsoleted by various separate projects
12643       </para>
12644      </listitem>
12645
12646     </itemizedlist>
12647    </sect3>
12648
12649   </sect2>
12650  </sect1>
12651
12652  <sect1 id="release-7-4-18">
12653   <title>Release 7.4.18</title>
12654
12655   <note>
12656   <title>Release date</title>
12657   <simpara>2007-09-17</simpara>
12658   </note>
12659
12660   <para>
12661    This release contains fixes from 7.4.17.
12662   </para>
12663
12664   <sect2>
12665    <title>Migration to Version 7.4.18</title>
12666
12667    <para>
12668     A dump/restore is not required for those running 7.4.X.  However,
12669     if you are upgrading from a version earlier than 7.4.11, see the release
12670     notes for 7.4.11.
12671    </para>
12672
12673   </sect2>
12674
12675   <sect2>
12676    <title>Changes</title>
12677
12678    <itemizedlist>
12679
12680     <listitem>
12681      <para>
12682       Prevent index corruption when a transaction inserts rows and
12683       then aborts close to the end of a concurrent <command>VACUUM</>
12684       on the same table (Tom)
12685      </para>
12686     </listitem>
12687
12688     <listitem>
12689      <para>
12690       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
12691      </para>
12692     </listitem>
12693
12694     <listitem>
12695      <para>
12696       Fix excessive logging of <acronym>SSL</> error messages (Tom)
12697      </para>
12698     </listitem>
12699
12700     <listitem>
12701      <para>
12702       Fix crash when <varname>log_min_error_statement</> logging runs out
12703       of memory (Tom)
12704      </para>
12705     </listitem>
12706
12707     <listitem>
12708      <para>
12709       Prevent <command>CLUSTER</> from failing
12710       due to attempting to process temporary tables of other sessions (Alvaro)
12711      </para>
12712     </listitem>
12713
12714     <listitem>
12715      <para>
12716       Require non-superusers who use <filename>/contrib/dblink</> to use only
12717       password authentication, as a security measure (Joe)
12718      </para>
12719     </listitem>
12720
12721    </itemizedlist>
12722
12723   </sect2>
12724  </sect1>
12725
12726  <sect1 id="release-7-4-17">
12727   <title>Release 7.4.17</title>
12728
12729   <note>
12730   <title>Release date</title>
12731   <simpara>2007-04-23</simpara>
12732   </note>
12733
12734   <para>
12735    This release contains fixes from 7.4.16,
12736    including a security fix.
12737   </para>
12738
12739   <sect2>
12740    <title>Migration to Version 7.4.17</title>
12741
12742    <para>
12743     A dump/restore is not required for those running 7.4.X.  However,
12744     if you are upgrading from a version earlier than 7.4.11, see the release
12745     notes for 7.4.11.
12746    </para>
12747
12748   </sect2>
12749
12750   <sect2>
12751    <title>Changes</title>
12752
12753    <itemizedlist>
12754
12755     <listitem>
12756     <para>
12757      Support explicit placement of the temporary-table schema within
12758      <varname>search_path</>, and disable searching it for functions
12759      and operators (Tom)
12760     </para>
12761     <para>
12762      This is needed to allow a security-definer function to set a
12763      truly secure value of <varname>search_path</>.  Without it,
12764      an unprivileged SQL user can use temporary objects to execute code
12765      with the privileges of the security-definer function (CVE-2007-2138).
12766      See <command>CREATE FUNCTION</> for more information.
12767     </para>
12768     </listitem>
12769
12770     <listitem>
12771     <para>
12772      <filename>/contrib/tsearch2</> crash fixes (Teodor)
12773     </para>
12774     </listitem>
12775
12776     <listitem>
12777     <para>
12778      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
12779      <command>UPDATE</> chains (Tom, Pavan Deolasee)
12780     </para>
12781     </listitem>
12782
12783     <listitem>
12784     <para>
12785      Fix PANIC during enlargement of a hash index (bug introduced in 7.4.15)
12786      (Tom)
12787     </para>
12788     </listitem>
12789
12790    </itemizedlist>
12791
12792   </sect2>
12793  </sect1>
12794
12795  <sect1 id="release-7-4-16">
12796   <title>Release 7.4.16</title>
12797
12798   <note>
12799   <title>Release date</title>
12800   <simpara>2007-02-05</simpara>
12801   </note>
12802
12803   <para>
12804    This release contains a variety of fixes from 7.4.15, including
12805    a security fix.
12806   </para>
12807
12808   <sect2>
12809    <title>Migration to Version 7.4.16</title>
12810
12811    <para>
12812     A dump/restore is not required for those running 7.4.X.  However,
12813     if you are upgrading from a version earlier than 7.4.11, see the release
12814     notes for 7.4.11.
12815    </para>
12816
12817   </sect2>
12818
12819   <sect2>
12820    <title>Changes</title>
12821
12822    <itemizedlist>
12823
12824     <listitem>
12825     <para>
12826      Remove security vulnerability that allowed connected users
12827      to read backend memory (Tom)
12828     </para>
12829     <para>
12830      The vulnerability involves suppressing the normal check that a SQL
12831      function returns the data type it's declared to, or changing the
12832      data type of a table column used in a SQL function (CVE-2007-0555).
12833      This error can easily be exploited to cause a backend crash, and in
12834      principle might be used to read database content that the user
12835      should not be able to access.
12836     </para>
12837     </listitem>
12838
12839     <listitem>
12840     <para>
12841      Fix rare bug wherein btree index page splits could fail
12842      due to choosing an infeasible split point (Heikki Linnakangas)
12843     </para>
12844     </listitem>
12845
12846     <listitem>
12847     <para>
12848      Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
12849     </para>
12850     </listitem>
12851
12852     <listitem>
12853     <para>
12854      Tighten security of multi-byte character processing for UTF8 sequences
12855      over three bytes long (Tom)
12856     </para>
12857     </listitem>
12858
12859    </itemizedlist>
12860
12861   </sect2>
12862  </sect1>
12863
12864  <sect1 id="release-7-4-15">
12865   <title>Release 7.4.15</title>
12866
12867   <note>
12868   <title>Release date</title>
12869   <simpara>2007-01-08</simpara>
12870   </note>
12871
12872   <para>
12873    This release contains a variety of fixes from 7.4.14.
12874   </para>
12875
12876   <sect2>
12877    <title>Migration to Version 7.4.15</title>
12878
12879    <para>
12880     A dump/restore is not required for those running 7.4.X.  However,
12881     if you are upgrading from a version earlier than 7.4.11, see the release
12882     notes for 7.4.11.
12883    </para>
12884
12885   </sect2>
12886
12887   <sect2>
12888    <title>Changes</title>
12889
12890    <itemizedlist>
12891
12892     <listitem>
12893      <para>
12894       Improve handling of <function>getaddrinfo()</> on AIX (Tom)
12895      </para>
12896
12897      <para>
12898       This fixes a problem with starting the statistics collector,
12899       among other things.
12900      </para>
12901     </listitem>
12902
12903      <listitem>
12904       <para>
12905        Fix <quote>failed to re-find parent key</> errors in
12906        <command>VACUUM</> (Tom)
12907       </para>
12908      </listitem>
12909
12910      <listitem>
12911       <para>
12912        Fix bugs affecting multi-gigabyte hash indexes (Tom)
12913       </para>
12914      </listitem>
12915
12916     <listitem>
12917      <para>
12918       Fix error when constructing an <literal>ARRAY[]</> made up of multiple
12919       empty elements (Tom)
12920      </para>
12921     </listitem>
12922
12923     <listitem>
12924      <para>
12925       <function>to_number()</> and <function>to_char(numeric)</>
12926       are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
12927       new <application>initdb</> installs (Tom)
12928      </para>
12929
12930      <para>
12931       This is because <varname>lc_numeric</> can potentially
12932       change the output of these functions.
12933      </para>
12934     </listitem>
12935
12936     <listitem>
12937      <para>
12938       Improve index usage of regular expressions that use parentheses (Tom)
12939      </para>
12940
12941      <para>
12942       This improves <application>psql</> <literal>\d</> performance also.
12943      </para>
12944     </listitem>
12945
12946    </itemizedlist>
12947
12948   </sect2>
12949  </sect1>
12950
12951  <sect1 id="release-7-4-14">
12952   <title>Release 7.4.14</title>
12953
12954   <note>
12955   <title>Release date</title>
12956   <simpara>2006-10-16</simpara>
12957   </note>
12958
12959   <para>
12960    This release contains a variety of fixes from 7.4.13.
12961   </para>
12962
12963   <sect2>
12964    <title>Migration to Version 7.4.14</title>
12965
12966    <para>
12967     A dump/restore is not required for those running 7.4.X.  However,
12968     if you are upgrading from a version earlier than 7.4.11, see the release
12969     notes for 7.4.11.
12970    </para>
12971
12972   </sect2>
12973
12974   <sect2>
12975    <title>Changes</title>
12976
12977 <itemizedlist>
12978 <listitem><para>Fix core dump when an untyped literal is taken as
12979 ANYARRAY</para></listitem>
12980 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
12981  matches for the separator string</para>
12982 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
12983 </para></listitem>
12984 <listitem><para>Fix corner cases in pattern matching for
12985  <application>psql</>'s <literal>\d</> commands</para></listitem>
12986 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
12987  (Teodor)</para></listitem>
12988 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
12989 <listitem><para>Adjust regression tests for recent changes in US DST laws
12990 </para> </listitem>
12991 </itemizedlist>
12992
12993   </sect2>
12994  </sect1>
12995
12996  <sect1 id="release-7-4-13">
12997   <title>Release 7.4.13</title>
12998
12999   <note>
13000   <title>Release date</title>
13001   <simpara>2006-05-23</simpara>
13002   </note>
13003
13004   <para>
13005    This release contains a variety of fixes from 7.4.12,
13006    including patches for extremely serious security issues.
13007   </para>
13008
13009   <sect2>
13010    <title>Migration to Version 7.4.13</title>
13011
13012    <para>
13013     A dump/restore is not required for those running 7.4.X.  However,
13014     if you are upgrading from a version earlier than 7.4.11, see the release
13015     notes for 7.4.11.
13016    </para>
13017
13018    <para>
13019     Full security against the SQL-injection attacks described in
13020     CVE-2006-2313 and CVE-2006-2314 might require changes in application
13021     code.  If you have applications that embed untrustworthy strings
13022     into SQL commands, you should examine them as soon as possible to
13023     ensure that they are using recommended escaping techniques.  In
13024     most cases, applications should be using subroutines provided by
13025     libraries or drivers (such as <application>libpq</>'s
13026     <function>PQescapeStringConn()</>) to perform string escaping,
13027     rather than relying on <foreignphrase>ad hoc</> code to do it.
13028    </para>
13029   </sect2>
13030
13031   <sect2>
13032    <title>Changes</title>
13033
13034 <itemizedlist>
13035 <listitem><para>Change the server to reject invalidly-encoded multibyte
13036 characters in all cases (Tatsuo, Tom)</para>
13037 <para>While <productname>PostgreSQL</> has been moving in this direction for
13038 some time, the checks are now applied uniformly to all encodings and all
13039 textual input, and are now always errors not merely warnings.  This change
13040 defends against SQL-injection attacks of the type described in CVE-2006-2313.
13041 </para></listitem>
13042
13043 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
13044 <para>As a server-side defense against SQL-injection attacks of the type
13045 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
13046 <literal>\'</> as a representation of ASCII single quote in SQL string
13047 literals.  By default, <literal>\'</> is rejected only when
13048 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
13049 GB18030, or UHC), which is the scenario in which SQL injection is possible.
13050 A new configuration parameter <varname>backslash_quote</> is available to
13051 adjust this behavior when needed.  Note that full security against
13052 CVE-2006-2314 might require client-side changes; the purpose of
13053 <varname>backslash_quote</> is in part to make it obvious that insecure
13054 clients are insecure.
13055 </para></listitem>
13056
13057 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
13058 aware of encoding considerations and
13059 <varname>standard_conforming_strings</></para>
13060 <para>This fixes <application>libpq</>-using applications for the security
13061 issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
13062 them against the planned changeover to SQL-standard string literal syntax.
13063 Applications that use multiple <productname>PostgreSQL</> connections
13064 concurrently should migrate to <function>PQescapeStringConn()</> and
13065 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
13066 for the settings in use in each database connection.  Applications that
13067 do string escaping <quote>by hand</> should be modified to rely on library
13068 routines instead.
13069 </para></listitem>
13070
13071 <listitem><para>Fix some incorrect encoding conversion functions</para>
13072 <para><function>win1251_to_iso</>, <function>alt_to_iso</>,
13073 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
13074 <function>mic_to_euc_tw</> were all broken to varying
13075 extents.
13076 </para></listitem>
13077
13078 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
13079 (Bruce, Jan)</para></listitem>
13080
13081 <listitem><para>Fix bug that sometimes caused OR'd index scans to
13082 miss rows they should have returned</para></listitem>
13083
13084 <listitem><para>Fix WAL replay for case where a btree index has been
13085 truncated</para></listitem>
13086
13087 <listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
13088 <literal>|</> (Tom)</para></listitem>
13089
13090 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
13091 Fuhr)</para></listitem>
13092
13093 <listitem><para>Fix for Bonjour on Intel Macs (Ashley Clark)</para></listitem>
13094
13095 <listitem><para>Fix various minor memory leaks</para></listitem>
13096 </itemizedlist>
13097
13098   </sect2>
13099  </sect1>
13100
13101  <sect1 id="release-7-4-12">
13102   <title>Release 7.4.12</title>
13103
13104   <note>
13105   <title>Release date</title>
13106   <simpara>2006-02-14</simpara>
13107   </note>
13108
13109   <para>
13110    This release contains a variety of fixes from 7.4.11.
13111   </para>
13112
13113   <sect2>
13114    <title>Migration to Version 7.4.12</title>
13115
13116    <para>
13117     A dump/restore is not required for those running 7.4.X.  However,
13118     if you are upgrading from a version earlier than 7.4.11, see the release
13119     notes for 7.4.11.
13120    </para>
13121   </sect2>
13122
13123   <sect2>
13124    <title>Changes</title>
13125
13126 <itemizedlist>
13127
13128 <listitem><para>Fix potential crash in <command>SET
13129 SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
13130 <para>An unprivileged user could crash the server process, resulting in
13131 momentary denial of service to other users, if the server has been compiled
13132 with Asserts enabled (which is not the default).
13133 Thanks to Akio Ishida for reporting this problem.
13134 </para></listitem>
13135
13136 <listitem><para>Fix bug with row visibility logic in self-inserted
13137 rows (Tom)</para>
13138 <para>Under rare circumstances a row inserted by the current command
13139 could be seen as already valid, when it should not be.  Repairs bug
13140 created in 7.4.9 and 7.3.11 releases.
13141 </para></listitem>
13142
13143 <listitem><para>Fix race condition that could lead to <quote>file already
13144 exists</> errors during pg_clog file creation
13145 (Tom)</para></listitem>
13146
13147 <listitem><para>Properly check <literal>DOMAIN</> constraints for
13148 <literal>UNKNOWN</> parameters in prepared statements
13149 (Neil)</para></listitem>
13150
13151 <listitem><para>Fix to allow restoring dumps that have cross-schema
13152 references to custom operators (Tom)</para></listitem>
13153
13154 <listitem><para>Portability fix for testing presence of <function>finite</>
13155 and <function>isinf</> during configure (Tom)</para></listitem>
13156
13157 </itemizedlist>
13158
13159   </sect2>
13160  </sect1>
13161
13162  <sect1 id="release-7-4-11">
13163   <title>Release 7.4.11</title>
13164
13165   <note>
13166   <title>Release date</title>
13167   <simpara>2006-01-09</simpara>
13168   </note>
13169
13170   <para>
13171    This release contains a variety of fixes from 7.4.10.
13172   </para>
13173
13174   <sect2>
13175    <title>Migration to Version 7.4.11</title>
13176
13177    <para>
13178     A dump/restore is not required for those running 7.4.X.  However,
13179     if you are upgrading from a version earlier than 7.4.8, see the release
13180     notes for 7.4.8.
13181     Also, you might need to <command>REINDEX</> indexes on textual
13182     columns after updating, if you are affected by the locale or
13183     <application>plperl</> issues described below.
13184    </para>
13185   </sect2>
13186
13187   <sect2>
13188    <title>Changes</title>
13189
13190 <itemizedlist>
13191
13192 <listitem><para>Fix for protocol-level Describe messages issued
13193 outside a transaction or in a failed transaction (Tom)</para></listitem>
13194
13195 <listitem><para>Fix character string comparison for locales that consider
13196 different character combinations as equal, such as Hungarian (Tom)</para>
13197 <para>This might require <command>REINDEX</> to fix existing indexes on
13198 textual columns.</para></listitem>
13199
13200 <listitem><para>Set locale environment variables during postmaster startup
13201 to ensure that <application>plperl</> won't change the locale later</para>
13202 <para>This fixes a problem that occurred if the <application>postmaster</> was
13203 started with environment variables specifying a different locale than what
13204 <application>initdb</> had been told.  Under these conditions, any use of
13205 <application>plperl</> was likely to lead to corrupt indexes.  You might need
13206 <command>REINDEX</> to fix existing indexes on
13207 textual columns if this has happened to you.</para></listitem>
13208
13209 <listitem><para>Fix longstanding bug in strpos() and regular expression
13210 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
13211 </para></listitem>
13212
13213 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
13214 which caused it not to use all available salt space for MD5 and
13215 XDES algorithms (Marko Kreen, Solar Designer)</para>
13216 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
13217
13218 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
13219 rather than crashing, when the number of columns specified is different from
13220 what's actually returned by the query (Joe)</para></listitem>
13221
13222 </itemizedlist>
13223
13224   </sect2>
13225  </sect1>
13226
13227  <sect1 id="release-7-4-10">
13228   <title>Release 7.4.10</title>
13229
13230   <note>
13231   <title>Release date</title>
13232   <simpara>2005-12-12</simpara>
13233   </note>
13234
13235   <para>
13236    This release contains a variety of fixes from 7.4.9.
13237   </para>
13238
13239   <sect2>
13240    <title>Migration to Version 7.4.10</title>
13241
13242    <para>
13243     A dump/restore is not required for those running 7.4.X.  However,
13244     if you are upgrading from a version earlier than 7.4.8, see the release
13245     notes for 7.4.8.
13246    </para>
13247   </sect2>
13248
13249   <sect2>
13250    <title>Changes</title>
13251
13252 <itemizedlist>
13253
13254 <listitem><para>Fix race condition in transaction log management</para>
13255 <para>There was a narrow window in which an I/O operation could be initiated
13256 for the wrong page, leading to an Assert failure or data
13257 corruption.</para>
13258 </listitem>
13259
13260 <listitem><para>Prevent failure if client sends Bind protocol message
13261 when current transaction is already aborted</para></listitem>
13262
13263 <listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
13264
13265 <listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
13266
13267 <listitem><para>Fix longstanding planning error for outer joins</para>
13268 <para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
13269 only supported with merge-joinable join conditions</>.</para></listitem>
13270
13271 <listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
13272 table has been dropped</para></listitem>
13273 </itemizedlist>
13274
13275   </sect2>
13276  </sect1>
13277
13278  <sect1 id="release-7-4-9">
13279   <title>Release 7.4.9</title>
13280
13281   <note>
13282   <title>Release date</title>
13283   <simpara>2005-10-04</simpara>
13284   </note>
13285
13286   <para>
13287    This release contains a variety of fixes from 7.4.8.
13288   </para>
13289
13290   <sect2>
13291    <title>Migration to Version 7.4.9</title>
13292
13293    <para>
13294     A dump/restore is not required for those running 7.4.X.  However,
13295     if you are upgrading from a version earlier than 7.4.8, see the release
13296     notes for 7.4.8.
13297    </para>
13298   </sect2>
13299
13300   <sect2>
13301    <title>Changes</title>
13302
13303 <itemizedlist>
13304 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
13305 <literal>ctid</> chains too soon, and add more checking in code that follows
13306 <literal>ctid</> links</para>
13307 <para>This fixes a long-standing problem that could cause crashes in very rare
13308 circumstances.</para></listitem>
13309 <listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
13310 length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
13311 <para>In prior releases, the padding of <type>CHAR()</> was incorrect
13312 because it only padded to the specified number of bytes without
13313 considering how many characters were stored.</para></listitem>
13314 <listitem><para>Fix the sense of the test for read-only transaction
13315 in <command>COPY</></para>
13316 <para>The code formerly prohibited <command>COPY TO</>, where it should
13317 prohibit <command>COPY FROM</>.
13318 </para></listitem>
13319 <listitem><para>Fix planning problem with outer-join ON clauses that reference
13320 only the inner-side relation</para></listitem>
13321 <listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
13322 cases</para></listitem>
13323 <listitem><para>Make <function>array_in</> and <function>array_recv</> more
13324 paranoid about validating their OID parameter</para></listitem>
13325 <listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
13326 a...</> with GiST index on column <literal>a</></para></listitem>
13327 <listitem><para>Improve robustness of datetime parsing</para></listitem>
13328 <listitem><para>Improve checking for partially-written WAL
13329 pages</para></listitem>
13330 <listitem><para>Improve robustness of signal handling when SSL is
13331 enabled</para></listitem>
13332 <listitem><para>Don't try to open more than <literal>max_files_per_process</>
13333 files during postmaster startup</para></listitem>
13334 <listitem><para>Various memory leakage fixes</para></listitem>
13335 <listitem><para>Various portability improvements</para></listitem>
13336 <listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
13337 the variable is of pass-by-reference type</para></listitem>
13338 <listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
13339 code</para></listitem>
13340 </itemizedlist>
13341
13342   </sect2>
13343  </sect1>
13344
13345  <sect1 id="release-7-4-8">
13346   <title>Release 7.4.8</title>
13347
13348   <note>
13349   <title>Release date</title>
13350   <simpara>2005-05-09</simpara>
13351   </note>
13352
13353   <para>
13354    This release contains a variety of fixes from 7.4.7, including several
13355    security-related issues.
13356   </para>
13357
13358   <sect2>
13359    <title>Migration to Version 7.4.8</title>
13360
13361    <para>
13362     A dump/restore is not required for those running 7.4.X.  However,
13363     it is one possible way of handling two significant security problems
13364     that have been found in the initial contents of 7.4.X system
13365     catalogs.  A dump/initdb/reload sequence using 7.4.8's initdb will
13366     automatically correct these problems.
13367    </para>
13368
13369    <para>
13370     The larger security problem is that the built-in character set encoding
13371     conversion functions can be invoked from SQL commands by unprivileged
13372     users, but the functions were not designed for such use and are not
13373     secure against malicious choices of arguments.  The fix involves changing
13374     the declared parameter list of these functions so that they can no longer
13375     be invoked from SQL commands.  (This does not affect their normal use
13376     by the encoding conversion machinery.)
13377    </para>
13378
13379    <para>
13380     The lesser problem is that the <filename>contrib/tsearch2</> module
13381     creates several functions that are misdeclared to return
13382     <type>internal</> when they do not accept <type>internal</> arguments.
13383     This breaks type safety for all functions using <type>internal</>
13384     arguments.
13385    </para>
13386
13387    <para>
13388     It is strongly recommended that all installations repair these errors,
13389     either by initdb or by following the manual repair procedures given
13390     below.  The errors at least allow unprivileged database users to crash
13391     their server process, and might allow unprivileged users to gain the
13392     privileges of a database superuser.
13393    </para>
13394
13395    <para>
13396     If you wish not to do an initdb, perform the following procedures instead.
13397     As the database superuser, do:
13398
13399 <programlisting>
13400 BEGIN;
13401 UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
13402 WHERE pronamespace = 11 AND pronargs = 5
13403      AND proargtypes[2] = 'cstring'::regtype;
13404 -- The command should report having updated 90 rows;
13405 -- if not, rollback and investigate instead of committing!
13406 COMMIT;
13407 </programlisting>
13408
13409     Next, if you have installed <filename>contrib/tsearch2</>, do:
13410
13411 <programlisting>
13412 BEGIN;
13413 UPDATE pg_proc SET proargtypes[0] = 'internal'::regtype
13414 WHERE oid IN (
13415    'dex_init(text)'::regprocedure,
13416    'snb_en_init(text)'::regprocedure,
13417    'snb_ru_init(text)'::regprocedure,
13418    'spell_init(text)'::regprocedure,
13419    'syn_init(text)'::regprocedure
13420 );
13421 -- The command should report having updated 5 rows;
13422 -- if not, rollback and investigate instead of committing!
13423 COMMIT;
13424 </programlisting>
13425
13426     If this command fails with a message like <quote>function
13427     "dex_init(text)" does not exist</>, then either <filename>tsearch2</>
13428     is not installed in this database, or you already did the update.
13429    </para>
13430
13431    <para>
13432     The above procedures must be carried out in <emphasis>each</> database
13433     of an installation, including <literal>template1</>, and ideally
13434     including <literal>template0</> as well.  If you do not fix the
13435     template databases then any subsequently created databases will contain
13436     the same errors.  <literal>template1</> can be fixed in the same way
13437     as any other database, but fixing <literal>template0</> requires
13438     additional steps.  First, from any database issue:
13439 <programlisting>
13440 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
13441 </programlisting>
13442      Next connect to <literal>template0</> and perform the above repair
13443      procedures.  Finally, do:
13444 <programlisting>
13445 -- re-freeze template0:
13446 VACUUM FREEZE;
13447 -- and protect it against future alterations:
13448 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
13449 </programlisting>
13450    </para>
13451   </sect2>
13452
13453   <sect2>
13454    <title>Changes</title>
13455
13456 <itemizedlist>
13457 <listitem><para>Change encoding function signature to prevent
13458 misuse</para></listitem>
13459 <listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
13460 <type>INTERNAL</> function results</para></listitem>
13461 <listitem><para>Repair ancient race condition that allowed a transaction to be
13462 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
13463 than for other purposes</para>
13464 <para>This is an extremely serious bug since it could lead to apparent
13465 data inconsistencies being briefly visible to applications.</para></listitem>
13466 <listitem><para>Repair race condition between relation extension and
13467 VACUUM</para>
13468 <para>This could theoretically have caused loss of a page's worth of
13469 freshly-inserted data, although the scenario seems of very low probability.
13470 There are no known cases of it having caused more than an Assert failure.
13471 </para></listitem>
13472 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
13473 <para>
13474 The comparison code was wrong in the case where the
13475 <literal>--enable-integer-datetimes</> configuration switch had been used.
13476 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
13477 it will need to be <command>REINDEX</>ed after installing this update, because
13478 the fix corrects the sort order of column values.
13479 </para></listitem>
13480 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
13481 <type>TIME WITH TIME ZONE</> values</para></listitem>
13482 <listitem><para>Fix mis-display of negative fractional seconds in
13483 <type>INTERVAL</> values</para>
13484 <para>
13485 This error only occurred when the
13486 <literal>--enable-integer-datetimes</> configuration switch had been used.
13487 </para></listitem>
13488 <listitem><para>Ensure operations done during backend shutdown are counted by
13489 statistics collector</para>
13490 <para>
13491 This is expected to resolve reports of <application>pg_autovacuum</>
13492 not vacuuming the system catalogs often enough &mdash; it was not being
13493 told about catalog deletions caused by temporary table removal during
13494 backend exit.
13495 </para></listitem>
13496 <listitem><para>Additional buffer overrun checks in plpgsql
13497 (Neil)</para></listitem>
13498 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
13499 correctly (Neil)</para></listitem>
13500 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
13501 (Marko Kreen)</para></listitem>
13502 <listitem><para>Still more 64-bit fixes for
13503 <filename>contrib/intagg</></para></listitem>
13504 <listitem><para>Prevent incorrect optimization of functions returning
13505 <type>RECORD</></para></listitem>
13506 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
13507 month-related formats</para></listitem>
13508 <listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
13509 <listitem><para>Fix <function>array_map</> to call PL functions correctly</para></listitem>
13510 <listitem><para>Fix permission checking in <command>ALTER DATABASE RENAME</></para></listitem>
13511 <listitem><para>Fix <command>ALTER LANGUAGE RENAME</></para></listitem>
13512 <listitem><para>Make <function>RemoveFromWaitQueue</> clean up after itself</para>
13513 <para>
13514 This fixes a lock management error that would only be visible if a transaction
13515 was kicked out of a wait for a lock (typically by query cancel) and then the
13516 holder of the lock released it within a very narrow window.
13517 </para></listitem>
13518 <listitem><para>Fix problem with untyped parameter appearing in
13519 <command>INSERT ... SELECT</></para></listitem>
13520 <listitem><para>Fix <command>CLUSTER</> failure after
13521 <command>ALTER TABLE SET WITHOUT OIDS</></para></listitem>
13522 </itemizedlist>
13523
13524   </sect2>
13525  </sect1>
13526
13527  <sect1 id="release-7-4-7">
13528   <title>Release 7.4.7</title>
13529
13530   <note>
13531   <title>Release date</title>
13532   <simpara>2005-01-31</simpara>
13533   </note>
13534
13535   <para>
13536    This release contains a variety of fixes from 7.4.6, including several
13537    security-related issues.
13538   </para>
13539
13540   <sect2>
13541    <title>Migration to Version 7.4.7</title>
13542
13543    <para>
13544     A dump/restore is not required for those running 7.4.X.
13545    </para>
13546   </sect2>
13547
13548   <sect2>
13549    <title>Changes</title>
13550
13551 <itemizedlist>
13552 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
13553 <para>
13554 On platforms that will automatically execute initialization functions of a
13555 shared library (this includes at least Windows and ELF-based Unixen),
13556 <command>LOAD</> can be used to make the server execute arbitrary code.
13557 Thanks to NGS Software for reporting this.</para></listitem>
13558 <listitem><para>Check that creator of an aggregate function has the right to
13559 execute the specified transition functions</para>
13560 <para>
13561 This oversight made it possible to bypass denial of EXECUTE
13562 permission on a function.</para></listitem>
13563 <listitem><para>Fix security and 64-bit issues in
13564 contrib/intagg</para></listitem>
13565 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
13566 Jurka)</para></listitem>
13567 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
13568 many parameters (Neil)</para></listitem>
13569 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
13570 <para>
13571 The result of the join was mistakenly supposed to be sorted the same as the
13572 left input.  This could not only deliver mis-sorted output to the user, but
13573 in case of nested merge joins could give outright wrong answers.
13574 </para></listitem>
13575 <listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
13576 <listitem><para>Fix display of negative intervals in SQL and GERMAN
13577 datestyles</para></listitem>
13578 <listitem><para>Make age(timestamptz) do calculation in local timezone not
13579 GMT</para></listitem>
13580 </itemizedlist>
13581
13582   </sect2>
13583  </sect1>
13584
13585  <sect1 id="release-7-4-6">
13586   <title>Release 7.4.6</title>
13587
13588   <note>
13589   <title>Release date</title>
13590   <simpara>2004-10-22</simpara>
13591   </note>
13592
13593   <para>
13594    This release contains a variety of fixes from 7.4.5.
13595   </para>
13596
13597
13598   <sect2>
13599    <title>Migration to Version 7.4.6</title>
13600
13601    <para>
13602     A dump/restore is not required for those running 7.4.X.
13603    </para>
13604   </sect2>
13605
13606   <sect2>
13607    <title>Changes</title>
13608
13609 <itemizedlist>
13610 <listitem><para>Repair possible failure to update hint bits on disk</para>
13611 <para>
13612 Under rare circumstances this oversight could lead to
13613 <quote>could not access transaction status</> failures, which qualifies
13614 it as a potential-data-loss bug.
13615 </para></listitem>
13616 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
13617 <para>
13618 Very large left joins using a hash join plan could fail to output unmatched
13619 left-side rows given just the right data distribution.
13620 </para></listitem>
13621 <listitem><para>Disallow running <application>pg_ctl</> as root</para>
13622 <para>
13623 This is to guard against any possible security issues.
13624 </para></listitem>
13625 <listitem><para>Avoid using temp files in <filename>/tmp</> in <command>make_oidjoins_check</command></para>
13626 <para>
13627 This has been reported as a security issue, though it's hardly worthy of
13628 concern since there is no reason for non-developers to use this script anyway.
13629 </para></listitem>
13630 <listitem><para>Prevent forced backend shutdown from re-emitting prior command
13631 result</para>
13632 <para>
13633 In rare cases, a client might think that its last command had succeeded when
13634 it really had been aborted by forced database shutdown.
13635 </para></listitem>
13636 <listitem><para>Repair bug in <function>pg_stat_get_backend_idset</function></para>
13637 <para>
13638 This could lead to misbehavior in some of the system-statistics views.
13639 </para></listitem>
13640 <listitem><para>Fix small memory leak in postmaster</para></listitem>
13641 <listitem><para>Fix <quote>expected both swapped tables to have TOAST
13642 tables</> bug</para>
13643 <para>
13644 This could arise in cases such as CLUSTER after ALTER TABLE DROP COLUMN.
13645 </para></listitem>
13646 <listitem><para>Prevent <literal>pg_ctl restart</> from adding <literal>-D</> multiple times</para></listitem>
13647 <listitem><para>Fix problem with NULL values in GiST indexes</para></listitem>
13648 <listitem><para><literal>::</> is no longer interpreted as a variable in an
13649 ECPG prepare statement</para></listitem>
13650 </itemizedlist>
13651
13652   </sect2>
13653  </sect1>
13654
13655  <sect1 id="release-7-4-5">
13656   <title>Release 7.4.5</title>
13657
13658   <note>
13659   <title>Release date</title>
13660   <simpara>2004-08-18</simpara>
13661   </note>
13662
13663   <para>
13664    This release contains one serious bug fix over 7.4.4.
13665   </para>
13666
13667
13668   <sect2>
13669    <title>Migration to Version 7.4.5</title>
13670
13671    <para>
13672     A dump/restore is not required for those running 7.4.X.
13673    </para>
13674   </sect2>
13675
13676   <sect2>
13677    <title>Changes</title>
13678
13679 <itemizedlist>
13680 <listitem><para>Repair possible crash during concurrent B-tree index insertions</para>
13681 <para>
13682 This patch fixes a rare case in which concurrent insertions into a B-tree index
13683 could result in a server panic.  No permanent damage would result, but it's
13684 still worth a re-release.  The bug does not exist in pre-7.4 releases.
13685 </para></listitem>
13686 </itemizedlist>
13687
13688   </sect2>
13689  </sect1>
13690
13691  <sect1 id="release-7-4-4">
13692   <title>Release 7.4.4</title>
13693
13694   <note>
13695   <title>Release date</title>
13696   <simpara>2004-08-16</simpara>
13697   </note>
13698
13699   <para>
13700    This release contains a variety of fixes from 7.4.3.
13701   </para>
13702
13703
13704   <sect2>
13705    <title>Migration to Version 7.4.4</title>
13706
13707    <para>
13708     A dump/restore is not required for those running 7.4.X.
13709    </para>
13710   </sect2>
13711
13712   <sect2>
13713    <title>Changes</title>
13714
13715 <itemizedlist>
13716 <listitem><para>Prevent possible loss of committed transactions during crash</para>
13717 <para>
13718 Due to insufficient interlocking between transaction commit and checkpointing,
13719 it was possible for transactions committed just before the most recent
13720 checkpoint to be lost, in whole or in part, following a database crash and
13721 restart.  This is a serious bug that has existed
13722 since <productname>PostgreSQL</productname> 7.1.
13723 </para></listitem>
13724 <listitem><para>Check HAVING restriction before evaluating result list of an
13725 aggregate plan</para></listitem>
13726 <listitem><para>Avoid crash when session's current user ID is deleted</para></listitem>
13727 <listitem><para>Fix hashed crosstab for zero-rows case (Joe)</para></listitem>
13728 <listitem><para>Force cache update after renaming a column in a foreign key</para></listitem>
13729 <listitem><para>Pretty-print UNION queries correctly</para></listitem>
13730 <listitem><para>Make psql handle <literal>\r\n</> newlines properly in COPY IN</para></listitem>
13731 <listitem><para><application>pg_dump</> handled ACLs with grant options incorrectly</para></listitem>
13732 <listitem><para>Fix thread support for OS X and Solaris</para></listitem>
13733 <listitem><para>Updated JDBC driver (build 215) with various fixes</para></listitem>
13734 <listitem><para>ECPG fixes</para></listitem>
13735 <listitem><para>Translation updates (various contributors)</para></listitem>
13736 </itemizedlist>
13737
13738   </sect2>
13739  </sect1>
13740
13741  <sect1 id="release-7-4-3">
13742   <title>Release 7.4.3</title>
13743
13744   <note>
13745   <title>Release date</title>
13746   <simpara>2004-06-14</simpara>
13747   </note>
13748
13749   <para>
13750    This release contains a variety of fixes from 7.4.2.
13751   </para>
13752
13753
13754   <sect2>
13755    <title>Migration to Version 7.4.3</title>
13756
13757    <para>
13758     A dump/restore is not required for those running 7.4.X.
13759    </para>
13760   </sect2>
13761
13762   <sect2>
13763    <title>Changes</title>
13764
13765 <itemizedlist>
13766 <listitem><para>Fix temporary memory leak when using non-hashed aggregates (Tom)</para></listitem>
13767 <listitem><para>ECPG fixes, including some for Informix compatibility (Michael)</para></listitem>
13768 <listitem><para>Fixes for compiling with thread-safety, particularly Solaris (Bruce)</para></listitem>
13769 <listitem><para>Fix error in COPY IN termination when using the old network protocol (ljb)</para></listitem>
13770 <listitem><para>Several important fixes in pg_autovacuum, including fixes for
13771 large tables, unsigned oids, stability, temp tables, and debug mode
13772 (Matthew T. O'Connor)</para></listitem>
13773 <listitem><para>Fix problem with reading tar-format dumps on NetBSD and BSD/OS (Bruce)</para></listitem>
13774 <listitem><para>Several JDBC fixes</para></listitem>
13775 <listitem><para>Fix ALTER SEQUENCE RESTART where last_value equals the restart value (Tom)</para></listitem>
13776 <listitem><para>Repair failure to recalculate nested sub-selects (Tom)</para></listitem>
13777 <listitem><para>Fix problems with non-constant expressions in LIMIT/OFFSET</para></listitem>
13778 <listitem><para>Support FULL JOIN with no join clause, such as X FULL JOIN Y ON TRUE (Tom)</para></listitem>
13779 <listitem><para>Fix another zero-column table bug (Tom)</para></listitem>
13780 <listitem><para>Improve handling of non-qualified identifiers in GROUP BY clauses in sub-selects (Tom)</para>
13781 <para>
13782 Select-list aliases within the sub-select will now take precedence over
13783 names from outer query levels.
13784 </para></listitem>
13785 <listitem><para>Do not generate <quote>NATURAL CROSS JOIN</> when decompiling rules (Tom)</para></listitem>
13786 <listitem><para>Add checks for invalid field length in binary COPY (Tom)</para>
13787 <para>
13788  This fixes a difficult-to-exploit security hole.
13789 </para></listitem>
13790 <listitem><para>Avoid locking conflict between <command>ANALYZE</command> and <command>LISTEN</command>/<command>NOTIFY</command></para></listitem>
13791 <listitem><para>Numerous translation updates (various contributors)</para></listitem>
13792 </itemizedlist>
13793
13794   </sect2>
13795  </sect1>
13796
13797  <sect1 id="release-7-4-2">
13798   <title>Release 7.4.2</title>
13799
13800   <note>
13801   <title>Release date</title>
13802   <simpara>2004-03-08</simpara>
13803   </note>
13804
13805   <para>
13806    This release contains a variety of fixes from 7.4.1.
13807   </para>
13808
13809
13810   <sect2>
13811    <title>Migration to Version 7.4.2</title>
13812
13813    <para>
13814     A dump/restore is not required for those running 7.4.X.  However,
13815     it might be advisable as the easiest method of incorporating fixes for
13816     two errors that have been found in the initial contents of 7.4.X system
13817     catalogs.  A dump/initdb/reload sequence using 7.4.2's initdb will
13818     automatically correct these problems.
13819    </para>
13820
13821    <para>
13822     The more severe of the two errors is that data type <type>anyarray</>
13823     has the wrong alignment label; this is a problem because the
13824     <structname>pg_statistic</> system catalog uses <type>anyarray</>
13825     columns.  The mislabeling can cause planner misestimations and even
13826     crashes when planning queries that involve <literal>WHERE</> clauses on
13827     double-aligned columns (such as <type>float8</> and <type>timestamp</>).
13828     It is strongly recommended that all installations repair this error,
13829     either by initdb or by following the manual repair procedure given
13830     below.
13831    </para>
13832
13833    <para>
13834     The lesser error is that the system view <structname>pg_settings</>
13835     ought to be marked as having public update access, to allow
13836     <literal>UPDATE pg_settings</> to be used as a substitute for
13837     <command>SET</>.  This can also be fixed either by initdb or manually,
13838     but it is not necessary to fix unless you want to use <literal>UPDATE
13839     pg_settings</>.
13840    </para>
13841
13842    <para>
13843     If you wish not to do an initdb, the following procedure will work
13844     for fixing <structname>pg_statistic</>.  As the database superuser,
13845     do:
13846
13847 <programlisting>
13848 -- clear out old data in pg_statistic:
13849 DELETE FROM pg_statistic;
13850 VACUUM pg_statistic;
13851 -- this should update 1 row:
13852 UPDATE pg_type SET typalign = 'd' WHERE oid = 2277;
13853 -- this should update 6 rows:
13854 UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277;
13855 --
13856 -- At this point you MUST start a fresh backend to avoid a crash!
13857 --
13858 -- repopulate pg_statistic:
13859 ANALYZE;
13860 </programlisting>
13861
13862     This can be done in a live database, but beware that all backends
13863     running in the altered database must be restarted before it is safe to
13864     repopulate <structname>pg_statistic</>.
13865    </para>
13866
13867    <para>
13868     To repair the <structname>pg_settings</> error, simply do:
13869 <programlisting>
13870 GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
13871 </programlisting>
13872    </para>
13873
13874    <para>
13875     The above procedures must be carried out in <emphasis>each</> database
13876     of an installation, including <literal>template1</>, and ideally
13877     including <literal>template0</> as well.  If you do not fix the
13878     template databases then any subsequently created databases will contain
13879     the same errors.  <literal>template1</> can be fixed in the same way
13880     as any other database, but fixing <literal>template0</> requires
13881     additional steps.  First, from any database issue:
13882 <programlisting>
13883 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
13884 </programlisting>
13885      Next connect to <literal>template0</> and perform the above repair
13886      procedures.  Finally, do:
13887 <programlisting>
13888 -- re-freeze template0:
13889 VACUUM FREEZE;
13890 -- and protect it against future alterations:
13891 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
13892 </programlisting>
13893    </para>
13894   </sect2>
13895
13896   <sect2>
13897    <title>Changes</title>
13898
13899 <para>
13900    Release 7.4.2 incorporates all the fixes included in release 7.3.6,
13901    plus the following fixes:
13902 </para>
13903
13904 <itemizedlist>
13905 <listitem><para>Fix <structname>pg_statistics</> alignment bug that could crash optimizer</para>
13906 <para>See above for details about this problem.</para></listitem>
13907 <listitem><para>Allow non-super users to update <structname>pg_settings</></para></listitem>
13908 <listitem><para>Fix several optimizer bugs, most of which led to
13909 <quote>variable not found in subplan target lists</> errors</para></listitem>
13910 <listitem><para>Avoid out-of-memory failure during startup of large multiple
13911 index scan</para></listitem>
13912 <listitem><para>Fix multibyte problem that could lead to <quote>out of
13913 memory</> error during <command>COPY IN</></para></listitem>
13914 <listitem><para>Fix problems with <command>SELECT INTO</> / <command>CREATE
13915 TABLE AS</> from tables without OIDs</para></listitem>
13916 <listitem><para>Fix problems with <filename>alter_table</> regression test
13917 during parallel testing</para></listitem>
13918 <listitem><para>Fix problems with hitting open file limit, especially on OS X (Tom)</para></listitem>
13919 <listitem><para>Partial fix for Turkish-locale issues</para>
13920 <para>initdb will succeed now in Turkish locale, but there are still some
13921 inconveniences associated with the <literal>i/I</> problem.</para></listitem>
13922 <listitem><para>Make pg_dump set client encoding on restore</para></listitem>
13923 <listitem><para>Other minor pg_dump fixes</para></listitem>
13924 <listitem><para>Allow ecpg to again use C keywords as column names (Michael)</para></listitem>
13925 <listitem><para>Added ecpg <literal>WHENEVER NOT_FOUND</> to
13926 <literal>SELECT/INSERT/UPDATE/DELETE</> (Michael)</para></listitem>
13927 <listitem><para>Fix ecpg crash for queries calling set-returning functions (Michael)</para></listitem>
13928 <listitem><para>Various other ecpg fixes (Michael)</para></listitem>
13929 <listitem><para>Fixes for Borland compiler</para></listitem>
13930 <listitem><para>Thread build improvements (Bruce)</para></listitem>
13931 <listitem><para>Various other build fixes</para></listitem>
13932 <listitem><para>Various JDBC fixes</para></listitem>
13933 </itemizedlist>
13934
13935   </sect2>
13936  </sect1>
13937
13938  <sect1 id="release-7-4-1">
13939   <title>Release 7.4.1</title>
13940
13941   <note>
13942   <title>Release date</title>
13943   <simpara>2003-12-22</simpara>
13944   </note>
13945
13946   <para>
13947    This release contains a variety of fixes from 7.4.
13948   </para>
13949
13950
13951   <sect2>
13952    <title>Migration to Version 7.4.1</title>
13953
13954    <para>
13955     A dump/restore is <emphasis>not</emphasis> required for those
13956     running 7.4.
13957    </para>
13958
13959    <para>
13960     If you want to install the fixes in the information schema
13961     you need to reload it into the database.
13962     This is either accomplished by initializing a new cluster
13963     by running <command>initdb</command>, or by running the following
13964     sequence of SQL commands in each database (ideally including
13965     <literal>template1</literal>) as a superuser in
13966     <application>psql</application>, after installing the new release:
13967 <programlisting>
13968 DROP SCHEMA information_schema CASCADE;
13969 \i /usr/local/pgsql/share/information_schema.sql
13970 </programlisting>
13971     Substitute your installation path in the second command.
13972    </para>
13973
13974   </sect2>
13975
13976   <sect2>
13977    <title>Changes</title>
13978
13979 <itemizedlist>
13980 <listitem><para>Fixed bug in <command>CREATE SCHEMA</command> parsing in ECPG (Michael)</para></listitem>
13981 <listitem><para>Fix compile error when <option>--enable-thread-safety</option> and <option>--with-perl</option> are used together (Peter)</para></listitem>
13982 <listitem><para>Fix for subqueries that used hash joins (Tom)</para>
13983 <para>
13984    Certain subqueries that used hash joins would crash because of
13985    improperly shared structures.
13986 </para></listitem>
13987 <listitem><para>Fix free space map compaction bug (Tom)</para>
13988 <para>
13989    This fixes a bug where compaction of the free space map could lead
13990    to a database server shutdown.
13991 </para>
13992 </listitem>
13993 <listitem><para>Fix for Borland compiler build of libpq (Bruce)</para></listitem>
13994 <listitem><para>Fix <function>netmask()</function> and <function>hostmask()</function> to return the maximum-length masklen (Tom)</para>
13995 <para>
13996    Fix these functions to return values consistent with pre-7.4
13997    releases.
13998 </para>
13999 </listitem>
14000 <listitem><para>Several <filename>contrib/pg_autovacuum</filename> fixes</para>
14001 <para>
14002    Fixes include improper variable initialization, missing vacuum after
14003    <command>TRUNCATE</command>, and duration computation overflow for long vacuums.
14004 </para>
14005 </listitem>
14006 <listitem><para>Allow compile of <filename>contrib/cube</filename> under Cygwin (Jason Tishler)</para></listitem>
14007 <listitem><para>Fix Solaris use of password file when no passwords are defined (Tom)</para>
14008 <para>
14009    Fix crash on Solaris caused by use of any type of password
14010    authentication when no passwords were defined.
14011 </para>
14012 </listitem>
14013 <listitem><para>JDBC fix for thread problems, other fixes</para></listitem>
14014 <listitem><para>Fix for <type>bytea</type> index lookups (Joe)</para></listitem>
14015 <listitem><para>Fix information schema for bit data types (Peter)</para></listitem>
14016 <listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
14017 <listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
14018 <listitem><para>Make <function>PQescapeBytea</function> and <function>byteaout</function> consistent with each other (Joe)</para></listitem>
14019 <listitem><para>Escape <type>bytea</type> output for bytes &gt; 0x7e(Joe)</para>
14020 <para>
14021  If different client encodings are used for <type>bytea</type> output and input, it
14022  is possible for <type>bytea</type> values to be corrupted by the differing
14023  encodings.  This fix escapes all bytes that might be affected.
14024 </para>
14025 </listitem>
14026 <listitem><para>Added missing <function>SPI_finish()</function> calls to dblink's <function>get_tuple_of_interest()</function> (Joe)</para></listitem>
14027 <listitem><para>New Czech FAQ</para></listitem>
14028 <listitem><para>Fix information schema view <literal>constraint_column_usage</literal> for foreign keys (Peter)</para></listitem>
14029 <listitem><para>ECPG fixes (Michael)</para></listitem>
14030 <listitem><para>Fix bug with multiple <literal>IN</literal> subqueries and joins in the subqueries (Tom)</para></listitem>
14031 <listitem><para>Allow <literal>COUNT('x')</literal> to work (Tom)</para></listitem>
14032 <listitem><para>Install ECPG include files for Informix compatibility into separate directory (Peter)</para>
14033 <para>
14034  Some names of ECPG include files for Informix compatibility conflicted with operating system include files.
14035  By installing them in their own directory, name conflicts have been reduced.
14036 </para>
14037 </listitem>
14038 <listitem><para>Fix SSL memory leak (Neil)</para>
14039 <para>
14040  This release fixes a bug in 7.4 where SSL didn't free all memory it allocated.
14041 </para>
14042 </listitem>
14043 <listitem><para>Prevent <filename>pg_service.conf</filename> from using service name as default dbname (Bruce)</para></listitem>
14044 <listitem><para>Fix local ident authentication on FreeBSD (Tom)</para></listitem>
14045 </itemizedlist>
14046
14047  </sect2>
14048 </sect1>
14049
14050 <sect1 id="release-7-4">
14051  <title>Release 7.4</title>
14052
14053  <note>
14054   <title>Release date</title>
14055   <simpara>2003-11-17</simpara>
14056  </note>
14057
14058  <sect2>
14059   <title>Overview</title>
14060
14061   <para>
14062    Major changes in this release:
14063   </para>
14064
14065   <variablelist>
14066    <varlistentry>
14067     <term>
14068      <literal>IN</literal> / <literal>NOT IN</literal> subqueries are
14069      now much more efficient
14070     </term>
14071
14072     <listitem>
14073      <para>
14074       In previous releases, <literal>IN</literal>/<literal>NOT
14075       IN</literal> subqueries were joined to the upper query by
14076       sequentially scanning the subquery looking for a match.  The
14077       7.4 code uses the same sophisticated techniques used by
14078       ordinary joins and so is much faster.  An
14079       <literal>IN</literal> will now usually be as fast as or faster
14080       than an equivalent <literal>EXISTS</literal> subquery; this
14081       reverses the conventional wisdom that applied to previous
14082       releases.
14083      </para>
14084     </listitem>
14085    </varlistentry>
14086
14087    <varlistentry>
14088     <term>
14089      Improved <literal>GROUP BY</literal> processing by using hash buckets
14090     </term>
14091
14092     <listitem>
14093      <para>
14094       In previous releases, rows to be grouped had to be sorted
14095       first.  The 7.4 code can do <literal>GROUP BY</literal>
14096       without sorting, by accumulating results into a hash table
14097       with one entry per group.  It will still use the sort
14098       technique, however, if the hash table is estimated to be too
14099       large to fit in <varname>sort_mem</>.
14100      </para>
14101     </listitem>
14102    </varlistentry>
14103
14104    <varlistentry>
14105     <term>
14106      New multikey hash join capability
14107     </term>
14108
14109     <listitem>
14110      <para>
14111       In previous releases, hash joins could only occur on single
14112       keys.  This release allows multicolumn hash joins.
14113      </para>
14114     </listitem>
14115    </varlistentry>
14116
14117    <varlistentry>
14118     <term>
14119      Queries using the explicit <literal>JOIN</literal> syntax are
14120      now better optimized
14121     </term>
14122
14123     <listitem>
14124      <para>
14125       Prior releases evaluated queries using the explicit
14126       <literal>JOIN</literal> syntax only in the order implied by
14127       the syntax. 7.4 allows full optimization of these queries,
14128       meaning the optimizer considers all possible join orderings
14129       and chooses the most efficient.  Outer joins, however, must
14130       still follow the declared ordering.
14131      </para>
14132     </listitem>
14133    </varlistentry>
14134
14135    <varlistentry>
14136     <term>
14137      Faster and more powerful regular expression code
14138     </term>
14139
14140     <listitem>
14141      <para>
14142       The entire regular expression module has been replaced with a
14143       new version by Henry Spencer, originally written for Tcl.  The
14144       code greatly improves performance and supports several flavors
14145       of regular expressions.
14146      </para>
14147     </listitem>
14148    </varlistentry>
14149
14150    <varlistentry>
14151     <term>
14152      Function-inlining for simple SQL functions
14153     </term>
14154
14155     <listitem>
14156      <para>
14157       Simple SQL functions can now be inlined by including their SQL
14158       in the main query.  This improves performance by eliminating
14159       per-call overhead.  That means simple SQL functions now
14160       behave like macros.
14161      </para>
14162     </listitem>
14163    </varlistentry>
14164
14165    <varlistentry>
14166     <term>
14167      Full support for IPv6 connections and IPv6 address data types
14168     </term>
14169
14170     <listitem>
14171      <para>
14172       Previous releases allowed only IPv4 connections, and the IP
14173       data types only supported IPv4 addresses. This release adds
14174       full IPv6 support in both of these areas.
14175      </para>
14176     </listitem>
14177    </varlistentry>
14178
14179    <varlistentry>
14180     <term>
14181      Major improvements in SSL performance and reliability
14182     </term>
14183
14184     <listitem>
14185      <para>
14186       Several people very familiar with the SSL API have overhauled
14187       our SSL code to improve SSL key negotiation and error
14188       recovery.
14189      </para>
14190     </listitem>
14191    </varlistentry>
14192
14193    <varlistentry>
14194     <term>
14195      Make free space map efficiently reuse empty index pages,
14196      and other free space management improvements
14197     </term>
14198
14199     <listitem>
14200      <para>
14201       In previous releases, B-tree index pages that were left empty
14202       because of deleted rows could only be reused by rows with
14203       index values similar to the rows originally indexed on that
14204       page. In 7.4, <command>VACUUM</command> records empty index
14205       pages and allows them to be reused for any future index rows.
14206      </para>
14207     </listitem>
14208    </varlistentry>
14209
14210    <varlistentry>
14211     <term>
14212      SQL-standard information schema
14213     </term>
14214
14215     <listitem>
14216      <para>
14217       The information schema provides a standardized and stable way
14218       to access information about the schema objects defined in a
14219       database.
14220      </para>
14221     </listitem>
14222    </varlistentry>
14223
14224    <varlistentry>
14225     <term>
14226      Cursors conform more closely to the SQL standard
14227     </term>
14228
14229     <listitem>
14230      <para>
14231       The commands <command>FETCH</command> and
14232       <command>MOVE</command> have been overhauled to conform more
14233       closely to the SQL standard.
14234      </para>
14235     </listitem>
14236    </varlistentry>
14237
14238    <varlistentry>
14239     <term>
14240      Cursors can exist outside transactions
14241     </term>
14242
14243     <listitem>
14244      <para>
14245       These cursors are also called holdable cursors.
14246      </para>
14247     </listitem>
14248    </varlistentry>
14249
14250    <varlistentry>
14251     <term>
14252      New client-to-server protocol
14253     </term>
14254
14255     <listitem>
14256      <para>
14257       The new protocol adds error codes, more status information,
14258       faster startup, better support for binary data transmission,
14259       parameter values separated from SQL commands, prepared
14260       statements available at the protocol level, and cleaner
14261       recovery from <command>COPY</command> failures.  The older
14262       protocol is still supported by both server and clients.
14263      </para>
14264     </listitem>
14265    </varlistentry>
14266
14267    <varlistentry>
14268     <term>
14269      <application>libpq</application> and
14270      <application>ECPG</application> applications are now fully
14271      thread-safe
14272     </term>
14273
14274     <listitem>
14275      <para>
14276       While previous <application>libpq</application> releases
14277       already supported threads, this release improves thread safety
14278       by fixing some non-thread-safe code that was used during
14279       database connection startup.  The <command>configure</command>
14280       option <option>--enable-thread-safety</option> must be used to
14281       enable this feature.
14282      </para>
14283     </listitem>
14284    </varlistentry>
14285
14286    <varlistentry>
14287     <term>
14288      New version of full-text indexing
14289     </term>
14290
14291     <listitem>
14292      <para>
14293       A new full-text indexing suite is available in
14294       <filename>contrib/tsearch2</filename>.
14295      </para>
14296     </listitem>
14297    </varlistentry>
14298
14299    <varlistentry>
14300     <term>
14301      New autovacuum tool
14302     </term>
14303
14304     <listitem>
14305      <para>
14306       The new autovacuum tool in
14307       <filename>contrib/autovacuum</filename> monitors the database
14308       statistics tables for
14309       <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>
14310       activity and automatically vacuums tables when needed.
14311      </para>
14312     </listitem>
14313    </varlistentry>
14314
14315    <varlistentry>
14316     <term>
14317      Array handling has been improved and moved into the server core
14318     </term>
14319
14320     <listitem>
14321      <para>
14322       Many array limitations have been removed, and arrays behave
14323       more like fully-supported data types.
14324      </para>
14325     </listitem>
14326    </varlistentry>
14327
14328   </variablelist>
14329  </sect2>
14330
14331  <sect2>
14332   <title>Migration to Version 7.4</title>
14333
14334   <para>
14335    A dump/restore using <application>pg_dump</application> is
14336    required for those wishing to migrate data from any previous
14337    release.
14338   </para>
14339
14340   <para>
14341    Observe the following incompatibilities:
14342   </para>
14343
14344   <itemizedlist>
14345    <listitem>
14346     <para>
14347      The server-side autocommit setting was removed and
14348      reimplemented in client applications and languages.
14349      Server-side autocommit was causing too many problems with
14350      languages and applications that wanted to control their own
14351      autocommit behavior, so autocommit was removed from the server
14352      and added to individual client APIs as appropriate.
14353     </para>
14354    </listitem>
14355
14356    <listitem>
14357     <para>
14358      Error message wording has changed substantially in this
14359      release.  Significant effort was invested to make the messages
14360      more consistent and user-oriented.  If your applications try to
14361      detect different error conditions by parsing the error message,
14362      you are strongly encouraged to use the new error code facility instead.
14363     </para>
14364    </listitem>
14365
14366    <listitem>
14367     <para>
14368      Inner joins using the explicit <literal>JOIN</literal> syntax
14369      might behave differently because they are now better
14370      optimized.
14371     </para>
14372    </listitem>
14373
14374    <listitem>
14375     <para>
14376      A number of server configuration parameters have been renamed
14377      for clarity, primarily those related to
14378      logging.
14379     </para>
14380    </listitem>
14381
14382    <listitem>
14383     <para>
14384      <literal>FETCH 0</literal> or <literal>MOVE 0</literal> now
14385      does nothing.  In prior releases, <literal>FETCH 0</literal>
14386      would fetch all remaining rows, and <literal>MOVE 0</literal>
14387      would move to the end of the cursor.
14388     </para>
14389    </listitem>
14390
14391    <listitem>
14392     <para>
14393      <command>FETCH</command> and <command>MOVE</command> now return
14394      the actual number of rows fetched/moved, or zero if at the
14395      beginning/end of the cursor.  Prior releases would return the
14396      row count passed to the command, not the number of rows
14397      actually fetched or moved.
14398     </para>
14399    </listitem>
14400
14401    <listitem>
14402     <para>
14403      <command>COPY</command> now can process files that use
14404      carriage-return or carriage-return/line-feed end-of-line
14405      sequences. Literal carriage-returns and line-feeds are no
14406      longer accepted in data values; use <literal>\r</literal> and
14407      <literal>\n</literal> instead.
14408     </para>
14409    </listitem>
14410
14411    <listitem>
14412     <para>
14413      Trailing spaces are now trimmed when converting from type
14414      <type>char(<replaceable>n</>)</type> to
14415      <type>varchar(<replaceable>n</>)</type> or <type>text</type>.
14416      This is what most people always expected to happen anyway.
14417     </para>
14418    </listitem>
14419
14420    <listitem>
14421     <para>
14422      The data type <type>float(<replaceable>p</>)</type> now
14423      measures <replaceable>p</> in binary digits, not decimal
14424      digits.  The new behavior follows the SQL standard.
14425     </para>
14426    </listitem>
14427
14428    <listitem>
14429     <para>
14430      Ambiguous date values now must match the ordering specified by
14431      the <varname>datestyle</varname> setting.  In prior releases, a
14432      date specification of <literal>10/20/03</> was interpreted as a
14433      date in October even if <varname>datestyle</> specified that
14434      the day should be first.  7.4 will throw an error if a date
14435      specification is invalid for the current setting of
14436      <varname>datestyle</>.
14437     </para>
14438    </listitem>
14439
14440    <listitem>
14441     <para>
14442      The functions <function>oidrand</function>,
14443      <function>oidsrand</function>, and
14444      <function>userfntest</function> have been removed.  These
14445      functions were determined to be no longer useful.
14446     </para>
14447    </listitem>
14448
14449    <listitem>
14450     <para>
14451      String literals specifying time-varying date/time values, such
14452      as <literal>'now'</literal> or <literal>'today'</literal> will
14453      no longer work as expected in column default expressions; they
14454      now cause the time of the table creation to be the default, not
14455      the time of the insertion.  Functions such as
14456      <function>now()</>, <function>current_timestamp</>, or
14457      <function>current_date</function> should be used instead.
14458     </para>
14459
14460     <para>
14461      In previous releases, there was special code so that strings
14462      such as <literal>'now'</literal> were interpreted at
14463      <command>INSERT</> time and not at table creation time, but
14464      this work around didn't cover all cases.  Release 7.4 now
14465      requires that defaults be defined properly using functions such
14466      as <function>now()</> or <function>current_timestamp</>. These
14467      will work in all situations.
14468     </para>
14469    </listitem>
14470
14471    <listitem>
14472     <para>
14473      The dollar sign (<literal>$</>) is no longer allowed in
14474      operator names.  It can instead be a non-first character in
14475      identifiers.  This was done to improve compatibility with other
14476      database systems, and to avoid syntax problems when parameter
14477      placeholders (<literal>$<replaceable>n</></>) are written
14478      adjacent to operators.
14479     </para>
14480    </listitem>
14481
14482   </itemizedlist>
14483  </sect2>
14484
14485  <sect2>
14486   <title>Changes</title>
14487
14488   <para>
14489    Below you will find a detailed account of the changes between
14490    release 7.4 and the previous major release.
14491   </para>
14492
14493  <sect3>
14494   <title>Server Operation Changes</title>
14495
14496   <itemizedlist>
14497    <listitem>
14498     <para>
14499      Allow IPv6 server connections (Nigel Kukard, Johan Jordaan,
14500      Bruce, Tom, Kurt Roeckx, Andrew Dunstan)
14501     </para>
14502    </listitem>
14503
14504    <listitem>
14505     <para>
14506      Fix SSL to handle errors cleanly (Nathan Mueller)
14507     </para>
14508     <para>
14509      In prior releases, certain SSL API error reports were not
14510      handled correctly.  This release fixes those problems.
14511     </para>
14512    </listitem>
14513
14514    <listitem>
14515     <para>
14516      SSL protocol security and performance improvements (Sean Chittenden)
14517     </para>
14518     <para>
14519      SSL key renegotiation was happening too frequently, causing poor
14520      SSL performance.  Also, initial key handling was improved.
14521     </para>
14522    </listitem>
14523
14524    <listitem>
14525     <para>
14526      Print lock information when a deadlock is detected (Tom)
14527     </para>
14528     <para>
14529      This allows easier debugging of deadlock situations.
14530     </para>
14531    </listitem>
14532
14533    <listitem>
14534     <para>
14535      Update <filename>/tmp</filename> socket modification times
14536      regularly to avoid their removal (Tom)
14537     </para>
14538     <para>
14539      This should help prevent <filename>/tmp</filename> directory
14540      cleaner administration scripts from removing server socket
14541      files.
14542     </para>
14543    </listitem>
14544
14545    <listitem><para>Enable PAM for Mac OS X (Aaron Hillegass)</para></listitem>
14546
14547    <listitem>
14548     <para>Make B-tree indexes fully WAL-safe (Tom)</para>
14549     <para>
14550      In prior releases, under certain rare cases, a server crash
14551      could cause B-tree indexes to become corrupt. This release
14552      removes those last few rare cases.
14553     </para>
14554    </listitem>
14555
14556    <listitem><para>Allow B-tree index compaction and empty page reuse (Tom)</para></listitem>
14557
14558    <listitem>
14559     <para>
14560      Fix inconsistent index lookups during split of first root page (Tom)
14561     </para>
14562     <para>
14563      In prior releases, when a single-page index split into two
14564      pages, there was a brief period when another database session
14565      could miss seeing an index entry.  This release fixes that rare
14566      failure case.
14567     </para>
14568    </listitem>
14569
14570    <listitem><para>Improve free space map allocation logic (Tom)</para></listitem>
14571
14572    <listitem>
14573     <para>Preserve free space information between server restarts (Tom)</para>
14574     <para>
14575      In prior releases, the free space map was not saved when the
14576      postmaster was stopped, so newly started servers had no free
14577      space information. This release saves the free space map, and
14578      reloads it when the server is restarted.
14579     </para>
14580    </listitem>
14581
14582    <listitem><para>Add start time to <literal>pg_stat_activity</literal> (Neil)</para></listitem>
14583    <listitem><para>New code to detect corrupt disk pages; erase with <varname>zero_damaged_pages</varname> (Tom)</para></listitem>
14584    <listitem><para>New client/server protocol: faster, no username length limit, allow clean exit from <command>COPY</command> (Tom)</para></listitem>
14585    <listitem><para>Add transaction status, table ID, column ID to client/server protocol (Tom)</para></listitem>
14586    <listitem><para>Add binary I/O to client/server protocol (Tom)</para></listitem>
14587    <listitem><para>Remove autocommit server setting; move to client applications (Tom)</para></listitem>
14588    <listitem><para>New error message wording, error codes, and three levels of error detail (Tom, Joe, Peter)</para></listitem>
14589   </itemizedlist>
14590  </sect3>
14591
14592  <sect3>
14593   <title>Performance Improvements</title>
14594
14595   <itemizedlist>
14596    <listitem><para>Add hashing for <literal>GROUP BY</literal> aggregates (Tom)</para></listitem>
14597    <listitem><para>Make nested-loop joins be smarter about multicolumn indexes (Tom)</para></listitem>
14598    <listitem><para>Allow multikey hash joins (Tom)</para></listitem>
14599    <listitem><para>Improve constant folding (Tom)</para></listitem>
14600    <listitem><para>Add ability to inline simple SQL functions (Tom)</para></listitem>
14601
14602    <listitem>
14603     <para>Reduce memory usage for queries using complex functions (Tom)</para>
14604     <para>
14605      In prior releases, functions returning allocated memory would
14606      not free it until the query completed. This release allows the
14607      freeing of function-allocated memory when the function call
14608      completes, reducing the total memory used by functions.
14609     </para>
14610    </listitem>
14611
14612    <listitem>
14613     <para>Improve GEQO optimizer performance (Tom)</para>
14614     <para>
14615      This release fixes several inefficiencies in the way the GEQO optimizer
14616      manages potential query paths.
14617     </para>
14618    </listitem>
14619
14620    <listitem>
14621     <para>
14622      Allow <literal>IN</>/<literal>NOT IN</> to be handled via hash
14623      tables (Tom)
14624     </para>
14625    </listitem>
14626
14627    <listitem>
14628     <para>
14629      Improve <literal>NOT IN (<replaceable>subquery</>)</literal>
14630      performance (Tom)
14631     </para>
14632    </listitem>
14633
14634    <listitem>
14635     <para>
14636      Allow most <literal>IN</literal> subqueries to be processed as
14637      joins (Tom)
14638     </para>
14639    </listitem>
14640
14641    <listitem>
14642     <para>
14643      Pattern matching operations can use indexes regardless of
14644      locale (Peter)
14645     </para>
14646     <para>
14647      There is no way for non-ASCII locales to use the standard
14648      indexes for <literal>LIKE</literal> comparisons. This release
14649      adds a way to create a special index for
14650      <literal>LIKE</literal>.
14651     </para>
14652    </listitem>
14653
14654    <listitem>
14655     <para>Allow the postmaster to preload libraries using <varname>preload_libraries</varname> (Joe)</para>
14656     <para>
14657      For shared libraries that require a long time to load, this
14658      option is available so the library can be preloaded in the
14659      postmaster and inherited by all database sessions.
14660     </para>
14661    </listitem>
14662
14663    <listitem>
14664     <para>
14665      Improve optimizer cost computations, particularly for subqueries (Tom)
14666     </para>
14667    </listitem>
14668
14669    <listitem>
14670     <para>
14671      Avoid sort when subquery <literal>ORDER BY</literal> matches upper query (Tom)
14672     </para>
14673    </listitem>
14674
14675    <listitem>
14676     <para>
14677      Deduce that <literal>WHERE a.x = b.y AND b.y = 42</literal> also
14678      means <literal>a.x = 42</literal> (Tom)
14679     </para>
14680    </listitem>
14681
14682    <listitem>
14683     <para>
14684      Allow hash/merge joins on complex joins (Tom)
14685     </para>
14686    </listitem>
14687
14688    <listitem>
14689     <para>
14690      Allow hash joins for more data types (Tom)
14691     </para>
14692    </listitem>
14693
14694    <listitem>
14695     <para>
14696      Allow join optimization of explicit inner joins, disable with
14697      <varname>join_collapse_limit</varname> (Tom)
14698     </para>
14699    </listitem>
14700
14701    <listitem>
14702     <para>
14703      Add parameter <varname>from_collapse_limit</varname> to control
14704      conversion of subqueries to joins (Tom)
14705     </para>
14706    </listitem>
14707
14708    <listitem>
14709     <para>
14710      Use faster and more powerful regular expression code from Tcl
14711      (Henry Spencer, Tom)
14712     </para>
14713    </listitem>
14714
14715    <listitem>
14716     <para>
14717      Use bit-mapped relation sets in the optimizer (Tom)
14718     </para>
14719    </listitem>
14720
14721    <listitem>
14722     <para>Improve connection startup time (Tom)</para>
14723     <para>
14724      The new client/server protocol requires fewer network packets to
14725      start a database session.
14726     </para>
14727    </listitem>
14728
14729    <listitem>
14730     <para>
14731      Improve trigger/constraint performance (Stephan)
14732     </para>
14733    </listitem>
14734
14735    <listitem>
14736     <para>
14737      Improve speed of <literal>col IN (const, const, const, ...)</literal> (Tom)
14738     </para>
14739    </listitem>
14740
14741    <listitem>
14742     <para>
14743      Fix hash indexes which were broken in rare cases (Tom)
14744     </para>
14745    </listitem>
14746
14747    <listitem><para>Improve hash index concurrency and speed (Tom)</para>
14748     <para>
14749      Prior releases suffered from poor hash index performance,
14750      particularly for high concurrency situations. This release fixes
14751      that, and the development group is interested in reports
14752      comparing B-tree and hash index performance.
14753     </para>
14754    </listitem>
14755
14756    <listitem>
14757     <para>Align shared buffers on 32-byte boundary for copy speed improvement (Manfred Spraul)</para>
14758     <para>
14759      Certain CPU's perform faster data copies when addresses are
14760      32-byte aligned.
14761     </para>
14762    </listitem>
14763
14764    <listitem>
14765     <para>Data type <type>numeric</type> reimplemented for better performance (Tom)</para>
14766     <para>
14767      <type>numeric</type> used to be stored in base 100. The new code
14768      uses base 10000, for significantly better performance.
14769     </para>
14770    </listitem>
14771   </itemizedlist>
14772  </sect3>
14773
14774  <sect3>
14775   <title>Server Configuration Changes</title>
14776
14777   <itemizedlist>
14778    <listitem>
14779     <para>Rename server parameter <varname>server_min_messages</> to <varname>log_min_messages</> (Bruce)</para>
14780     <para>
14781      This was done so most parameters that control the server logs
14782      begin with <literal>log_</>.
14783     </para>
14784    </listitem>
14785
14786    <listitem><para>Rename <varname>show_*_stats</> to <varname>log_*_stats</> (Bruce)</para></listitem>
14787    <listitem><para>Rename <varname>show_source_port</> to <varname>log_source_port</> (Bruce)</para></listitem>
14788    <listitem><para>Rename <varname>hostname_lookup</> to <varname>log_hostname</> (Bruce)</para></listitem>
14789
14790    <listitem>
14791     <para>Add <varname>checkpoint_warning</> to warn of excessive checkpointing (Bruce)</para>
14792     <para>
14793      In prior releases, it was difficult to determine if checkpoint
14794      was happening too frequently. This feature adds a warning to the
14795      server logs when excessive checkpointing happens.
14796     </para>
14797    </listitem>
14798
14799    <listitem><para>New read-only server parameters for localization (Tom)</para></listitem>
14800
14801    <listitem>
14802     <para>
14803      Change debug server log messages to output as <literal>DEBUG</>
14804      rather than <literal>LOG</> (Bruce)
14805     </para>
14806    </listitem>
14807
14808    <listitem>
14809     <para>Prevent server log variables from being turned off by non-superusers (Bruce)</para>
14810     <para>
14811      This is a security feature so non-superusers cannot disable
14812      logging that was enabled by the administrator.
14813     </para>
14814    </listitem>
14815
14816    <listitem>
14817     <para>
14818      <varname>log_min_messages</>/<varname>client_min_messages</> now
14819      controls <varname>debug_*</> output (Bruce)
14820     </para>
14821     <para>
14822      This centralizes client debug information so all debug output
14823      can be sent to either the client or server logs.
14824     </para>
14825    </listitem>
14826
14827    <listitem>
14828     <para>Add Mac OS X Rendezvous server support (Chris Campbell)</para>
14829     <para>
14830      This allows Mac OS X hosts to query the network for available
14831      <productname>PostgreSQL</productname> servers.
14832     </para>
14833    </listitem>
14834
14835    <listitem>
14836     <para>
14837      Add ability to print only slow statements using
14838      <varname>log_min_duration_statement</varname>
14839      (Christopher)
14840     </para>
14841     <para>
14842      This is an often requested debugging feature that allows
14843      administrators to see only slow queries in their server logs.
14844     </para>
14845    </listitem>
14846
14847    <listitem>
14848     <para>Allow <filename>pg_hba.conf</filename> to accept netmasks in CIDR format (Andrew Dunstan)</para>
14849     <para>
14850      This allows administrators to merge the host IP address and
14851      netmask fields into a single CIDR field in <filename>pg_hba.conf</filename>.
14852     </para>
14853    </listitem>
14854
14855    <listitem><para>New read-only parameter <varname>is_superuser</varname> (Tom)</para></listitem>
14856
14857    <listitem>
14858     <para>New parameter <varname>log_error_verbosity</varname> to control error detail (Tom)</para>
14859     <para>
14860      This works with the new error reporting feature to supply
14861      additional error information like hints, file names and line
14862      numbers.
14863     </para>
14864    </listitem>
14865
14866    <listitem>
14867     <para><literal>postgres --describe-config</literal> now dumps server config variables (Aizaz Ahmed, Peter)</para>
14868     <para>
14869      This option is useful for administration tools that need to know
14870      the configuration variable names and their minimums, maximums,
14871      defaults, and descriptions.
14872     </para>
14873    </listitem>
14874
14875    <listitem>
14876     <para>
14877      Add new columns in <literal>pg_settings</literal>:
14878      <literal>context</>, <literal>type</>, <literal>source</>,
14879      <literal>min_val</>, <literal>max_val</> (Joe)
14880     </para>
14881    </listitem>
14882
14883    <listitem>
14884     <para>
14885      Make default <varname>shared_buffers</> 1000 and
14886      <varname>max_connections</> 100, if possible (Tom)
14887     </para>
14888     <para>
14889      Prior versions defaulted to 64 shared buffers so <productname>PostgreSQL</productname>
14890      would start on even very old systems. This release tests the
14891      amount of shared memory allowed by the platform and selects more
14892      reasonable default values if possible.  Of course, users are
14893      still encouraged to evaluate their resource load and size
14894      <varname>shared_buffers</varname> accordingly.
14895     </para>
14896    </listitem>
14897
14898    <listitem>
14899     <para>
14900      New <filename>pg_hba.conf</filename> record type
14901      <literal>hostnossl</> to prevent SSL connections (Jon
14902      Jensen)
14903     </para>
14904     <para>
14905      In prior releases, there was no way to prevent SSL connections
14906      if both the client and server supported SSL. This option allows
14907      that capability.
14908     </para>
14909    </listitem>
14910
14911    <listitem>
14912     <para>
14913      Remove parameter <varname>geqo_random_seed</varname>
14914      (Tom)
14915     </para>
14916    </listitem>
14917
14918    <listitem>
14919     <para>
14920      Add server parameter <varname>regex_flavor</varname> to control regular expression processing (Tom)
14921     </para>
14922    </listitem>
14923
14924    <listitem>
14925     <para>
14926      Make <command>pg_ctl</command> better handle nonstandard ports (Greg)
14927     </para>
14928    </listitem>
14929   </itemizedlist>
14930  </sect3>
14931
14932  <sect3>
14933   <title>Query Changes</title>
14934
14935   <itemizedlist>
14936    <listitem><para>New SQL-standard information schema (Peter)</para></listitem>
14937    <listitem><para>Add read-only transactions (Peter)</para></listitem>
14938    <listitem><para>Print key name and value in foreign-key violation messages (Dmitry Tkach)</para></listitem>
14939
14940    <listitem>
14941     <para>Allow users to see their own queries in <literal>pg_stat_activity</literal> (Kevin Brown)</para>
14942     <para>
14943      In prior releases, only the superuser could see query strings
14944      using <literal>pg_stat_activity</literal>. Now ordinary users
14945      can see their own query strings.
14946     </para>
14947    </listitem>
14948
14949    <listitem>
14950     <para>Fix aggregates in subqueries to match SQL standard (Tom)</para>
14951     <para>
14952      The SQL standard says that an aggregate function appearing
14953      within a nested subquery belongs to the outer query if its
14954      argument contains only outer-query variables.  Prior
14955      <productname>PostgreSQL</productname> releases did not handle
14956      this fine point correctly.
14957     </para>
14958    </listitem>
14959
14960    <listitem>
14961     <para>Add option to prevent auto-addition of tables referenced in query (Nigel J. Andrews)</para>
14962     <para>
14963      By default, tables mentioned in the query are automatically
14964      added to the <literal>FROM</> clause if they are not already
14965      there.  This is compatible with historic
14966      <productname>POSTGRES</productname> behavior but is contrary to
14967      the SQL standard.  This option allows selecting
14968      standard-compatible behavior.
14969     </para>
14970    </listitem>
14971
14972    <listitem>
14973     <para>Allow <literal>UPDATE ... SET col = DEFAULT</literal> (Rod)</para>
14974     <para>
14975      This allows <command>UPDATE</command> to set a column to its
14976      declared default value.
14977     </para>
14978    </listitem>
14979
14980    <listitem>
14981     <para>Allow expressions to be used in <literal>LIMIT</>/<literal>OFFSET</> (Tom)</para>
14982     <para>
14983      In prior releases, <literal>LIMIT</>/<literal>OFFSET</> could
14984      only use constants, not expressions.
14985     </para>
14986    </listitem>
14987
14988    <listitem>
14989     <para>Implement <literal>CREATE TABLE AS EXECUTE</literal> (Neil, Peter)</para>
14990    </listitem>
14991   </itemizedlist>
14992  </sect3>
14993
14994  <sect3>
14995   <title>Object Manipulation Changes</title>
14996
14997   <itemizedlist>
14998    <listitem>
14999     <para>Make <command>CREATE SEQUENCE</command> grammar more conforming to SQL:2003 (Neil)</para>
15000    </listitem>
15001
15002    <listitem>
15003     <para>Add statement-level triggers (Neil)</para>
15004     <para>
15005      While this allows a trigger to fire at the end of a statement,
15006      it does not allow the trigger to access all rows modified by the
15007      statement.  This capability is planned for a future release.
15008     </para>
15009    </listitem>
15010
15011    <listitem>
15012     <para>Add check constraints for domains (Rod)</para>
15013     <para>
15014      This greatly increases the usefulness of domains by allowing
15015      them to use check constraints.
15016     </para>
15017    </listitem>
15018
15019    <listitem>
15020     <para>Add <command>ALTER DOMAIN</command> (Rod)</para>
15021     <para>
15022      This allows manipulation of existing domains.
15023     </para>
15024    </listitem>
15025
15026    <listitem>
15027     <para>Fix several zero-column table bugs (Tom)</para>
15028     <para>
15029      <productname>PostgreSQL</productname> supports zero-column tables. This fixes various bugs
15030      that occur when using such tables.
15031     </para>
15032    </listitem>
15033
15034    <listitem>
15035     <para>Have <literal>ALTER TABLE ... ADD PRIMARY KEY</literal> add not-null constraint (Rod)</para>
15036     <para>
15037      In prior releases, <literal>ALTER TABLE ... ADD
15038      PRIMARY</literal> would add a unique index, but not a not-null
15039      constraint.  That is fixed in this release.
15040     </para>
15041    </listitem>
15042
15043    <listitem><para>Add <literal>ALTER TABLE ... WITHOUT OIDS</literal> (Rod)</para>
15044     <para>
15045      This allows control over whether new and updated rows will have
15046      an OID column.  This is most useful for saving storage space.
15047     </para>
15048    </listitem>
15049
15050    <listitem>
15051     <para>
15052      Add <literal>ALTER SEQUENCE</literal> to modify minimum, maximum,
15053      increment, cache, cycle values (Rod)
15054     </para>
15055    </listitem>
15056
15057    <listitem>
15058     <para>Add <literal>ALTER TABLE ... CLUSTER ON</literal> (Alvaro Herrera)</para>
15059     <para>
15060      This command is used by <command>pg_dump</command> to record the
15061      cluster column for each table previously clustered. This
15062      information is used by database-wide cluster to cluster all
15063      previously clustered tables.
15064     </para>
15065    </listitem>
15066
15067    <listitem><para>Improve automatic type casting for domains (Rod, Tom)</para></listitem>
15068    <listitem><para>Allow dollar signs in identifiers, except as first character (Tom)</para></listitem>
15069    <listitem><para>Disallow dollar signs in operator names, so <literal>x=$1</> works (Tom)</para></listitem>
15070
15071    <listitem>
15072     <para>
15073      Allow copying table schema using <literal>LIKE
15074      <replaceable>subtable</replaceable></literal>, also SQL:2003
15075      feature <literal>INCLUDING DEFAULTS</literal> (Rod)
15076     </para>
15077    </listitem>
15078
15079    <listitem>
15080     <para>
15081      Add <literal>WITH GRANT OPTION</literal> clause to
15082      <command>GRANT</command> (Peter)
15083     </para>
15084     <para>
15085      This enabled <command>GRANT</command> to give other users the
15086      ability to grant privileges on a object.
15087     </para>
15088    </listitem>
15089   </itemizedlist>
15090  </sect3>
15091
15092  <sect3>
15093   <title>Utility Command Changes</title>
15094
15095   <itemizedlist>
15096    <listitem>
15097     <para>Add <literal>ON COMMIT</literal> clause to <command>CREATE TABLE</command> for temporary tables (Gavin)</para>
15098     <para>
15099      This adds the ability for a table to be dropped or all rows
15100      deleted on transaction commit.
15101     </para>
15102    </listitem>
15103
15104    <listitem>
15105     <para>Allow cursors outside transactions using <literal>WITH HOLD</literal> (Neil)</para>
15106     <para>
15107      In previous releases, cursors were removed at the end of the
15108      transaction that created them. Cursors can now be created with
15109      the <literal>WITH HOLD</literal> option, which allows them to
15110      continue to be accessed after the creating transaction has
15111      committed.
15112     </para>
15113    </listitem>
15114
15115    <listitem>
15116     <para><literal>FETCH 0</literal> and <literal>MOVE 0 </literal> now do nothing (Bruce)</para>
15117     <para>
15118      In previous releases, <literal>FETCH 0</literal> fetched all
15119      remaining rows, and <literal>MOVE 0</literal> moved to the end
15120      of the cursor.
15121     </para>
15122    </listitem>
15123
15124    <listitem>
15125     <para>
15126      Cause <command>FETCH</command> and <command>MOVE</command> to
15127      return the number of rows fetched/moved, or zero if at the
15128      beginning/end of cursor, per SQL standard (Bruce)
15129     </para>
15130     <para>
15131      In prior releases, the row count returned by
15132      <command>FETCH</command> and <command>MOVE</command> did not
15133      accurately reflect the number of rows processed.
15134     </para>
15135    </listitem>
15136
15137    <listitem>
15138     <para>Properly handle <literal>SCROLL</literal> with cursors, or
15139     report an error (Neil)</para>
15140     <para>
15141      Allowing random access (both forward and backward scrolling) to
15142      some kinds of queries cannot be done without some additional
15143      work. If <literal>SCROLL</literal> is specified when the cursor
15144      is created, this additional work will be performed. Furthermore,
15145      if the cursor has been created with <literal>NO SCROLL</literal>,
15146      no random access is allowed.
15147     </para>
15148    </listitem>
15149
15150    <listitem>
15151     <para>
15152      Implement SQL-compatible options <literal>FIRST</>,
15153      <literal>LAST</>, <literal>ABSOLUTE <replaceable>n</></>,
15154      <literal>RELATIVE <replaceable>n</></> for
15155      <command>FETCH</command> and <command>MOVE</command> (Tom)
15156     </para>
15157    </listitem>
15158
15159    <listitem>
15160     <para>Allow <command>EXPLAIN</command> on <command>DECLARE CURSOR</command> (Tom)</para>
15161    </listitem>
15162
15163    <listitem>
15164     <para>Allow <command>CLUSTER</command> to use index marked as pre-clustered by default (Alvaro Herrera)</para>
15165    </listitem>
15166
15167    <listitem>
15168     <para>Allow <command>CLUSTER</command> to cluster all tables (Alvaro Herrera)</para>
15169     <para>
15170      This allows all previously clustered tables in a database to be
15171      reclustered with a single command.
15172     </para>
15173    </listitem>
15174
15175    <listitem><para>Prevent <command>CLUSTER</command> on partial indexes (Tom)</para></listitem>
15176
15177    <listitem><para>Allow DOS and Mac line-endings in <command>COPY</> files (Bruce)</para></listitem>
15178
15179    <listitem>
15180     <para>
15181      Disallow literal carriage return as a data value,
15182      backslash-carriage-return and <literal>\r</> are still allowed
15183      (Bruce)
15184     </para>
15185    </listitem>
15186
15187    <listitem>
15188     <para><command>COPY</> changes (binary, <literal>\.</>) (Tom)</para>
15189    </listitem>
15190
15191    <listitem>
15192     <para>Recover from <command>COPY</command> failure cleanly (Tom)</para>
15193    </listitem>
15194
15195    <listitem>
15196     <para>Prevent possible memory leaks in <command>COPY</command> (Tom)</para>
15197    </listitem>
15198
15199    <listitem>
15200     <para>Make <command>TRUNCATE</command> transaction-safe (Rod)</para>
15201     <para>
15202      <command>TRUNCATE</command> can now be used inside a
15203      transaction. If the transaction aborts, the changes made by the
15204      <command>TRUNCATE</command> are automatically rolled back.
15205     </para>
15206    </listitem>
15207
15208    <listitem>
15209     <para>
15210      Allow prepare/bind of utility commands like
15211      <command>FETCH</command> and <command>EXPLAIN</command> (Tom)
15212     </para>
15213    </listitem>
15214
15215    <listitem>
15216     <para>Add <command>EXPLAIN EXECUTE</command> (Neil)</para>
15217    </listitem>
15218
15219    <listitem>
15220     <para>Improve <command>VACUUM</command> performance on indexes by reducing WAL traffic (Tom)</para>
15221    </listitem>
15222
15223    <listitem>
15224     <para>Functional indexes have been generalized into indexes on expressions (Tom)</para>
15225     <para>
15226      In prior releases, functional indexes only supported a simple
15227      function applied to one or more column names.  This release
15228      allows any type of scalar expression.
15229     </para>
15230    </listitem>
15231
15232    <listitem>
15233     <para>
15234      Have <command>SHOW TRANSACTION ISOLATION</command> match input
15235      to <command>SET TRANSACTION ISOLATION</command>
15236      (Tom)
15237     </para>
15238    </listitem>
15239
15240    <listitem>
15241     <para>
15242       Have <command>COMMENT ON DATABASE</command> on nonlocal
15243       database generate a warning, rather than an error (Rod)
15244      </para>
15245
15246     <para>
15247      Database comments are stored in database-local tables so
15248      comments on a database have to be stored in each database.
15249     </para>
15250    </listitem>
15251
15252    <listitem>
15253     <para>
15254      Improve reliability of <command>LISTEN</>/<command>NOTIFY</> (Tom)
15255     </para>
15256    </listitem>
15257
15258    <listitem>
15259     <para>Allow <command>REINDEX</command> to reliably reindex nonshared system catalog indexes (Tom)</para>
15260     <para>
15261      This allows system tables to be reindexed without the
15262      requirement of a standalone session, which was necessary in
15263      previous releases. The only tables that now require a standalone
15264      session for reindexing are the global system tables
15265      <literal>pg_database</>, <literal>pg_shadow</>, and
15266      <literal>pg_group</>.
15267     </para>
15268    </listitem>
15269   </itemizedlist>
15270  </sect3>
15271
15272  <sect3>
15273   <title>Data Type and Function Changes</title>
15274
15275   <itemizedlist>
15276    <listitem>
15277     <para>
15278      New server parameter <varname>extra_float_digits</varname> to
15279      control precision display of floating-point numbers (Pedro
15280      Ferreira, Tom)
15281     </para>
15282     <para>
15283      This controls output precision which was causing regression
15284      testing problems.
15285     </para>
15286    </listitem>
15287
15288    <listitem><para>Allow <literal>+1300</literal> as a numeric time-zone specifier, for FJST (Tom)</para></listitem>
15289
15290    <listitem>
15291     <para>
15292      Remove rarely used functions <function>oidrand</>,
15293      <function>oidsrand</>, and <function>userfntest</> functions
15294      (Neil)
15295     </para>
15296    </listitem>
15297
15298    <listitem>
15299     <para>Add <function>md5()</> function to main server, already in <filename>contrib/pgcrypto</filename> (Joe)</para>
15300     <para>
15301      An MD5 function was frequently requested. For more complex
15302      encryption capabilities, use
15303      <filename>contrib/pgcrypto</filename>.
15304     </para>
15305    </listitem>
15306
15307    <listitem><para>Increase date range of <type>timestamp</type> (John Cochran)</para></listitem>
15308
15309    <listitem>
15310     <para>
15311      Change <literal>EXTRACT(EPOCH FROM timestamp)</literal> so
15312      <type>timestamp without time zone</type> is assumed to be in
15313      local time, not GMT (Tom)
15314     </para>
15315    </listitem>
15316
15317    <listitem><para>Trap division by zero in case the operating system doesn't prevent it (Tom)</para></listitem>
15318    <listitem><para>Change the <type>numeric</type> data type internally to base 10000 (Tom)</para></listitem>
15319    <listitem><para>New <function>hostmask()</function> function (Greg Wickham)</para></listitem>
15320    <listitem><para>Fixes for <function>to_char()</function> and <function>to_timestamp()</function> (Karel)</para></listitem>
15321
15322    <listitem>
15323     <para>
15324      Allow functions that can take any argument data type and return
15325      any data type, using <type>anyelement</type> and
15326      <type>anyarray</type> (Joe)
15327     </para>
15328     <para>
15329      This allows the creation of functions that can work with any
15330      data type.
15331     </para>
15332    </listitem>
15333
15334    <listitem>
15335     <para>
15336      Arrays can now be specified as <literal>ARRAY[1,2,3]</literal>,
15337      <literal>ARRAY[['a','b'],['c','d']]</literal>, or
15338      <literal>ARRAY[ARRAY[ARRAY[2]]]</literal> (Joe)
15339     </para>
15340    </listitem>
15341
15342    <listitem>
15343     <para>
15344      Allow proper comparisons for arrays, including <literal>ORDER
15345      BY</literal> and <literal>DISTINCT</literal> support
15346      (Joe)
15347     </para>
15348    </listitem>
15349
15350    <listitem><para>Allow indexes on array columns (Joe)</para></listitem>
15351    <listitem><para>Allow array concatenation with <literal>||</literal> (Joe)</para></listitem>
15352
15353    <listitem>
15354     <para>
15355      Allow <literal>WHERE</literal> qualification
15356      <literal><replaceable>expr</> <replaceable>op</> ANY/SOME/ALL
15357      (<replaceable>array_expr</>)</literal> (Joe)
15358     </para>
15359     <para>
15360      This allows arrays to behave like a list of values, for purposes
15361      like <literal>SELECT * FROM tab WHERE col IN
15362      (array_val)</literal>.
15363     </para>
15364    </listitem>
15365
15366    <listitem>
15367     <para>
15368      New array functions <function>array_append</>,
15369      <function>array_cat</>, <function>array_lower</>,
15370      <function>array_prepend</>, <function>array_to_string</>,
15371      <function>array_upper</>, <function>string_to_array</> (Joe)
15372     </para>
15373    </listitem>
15374
15375    <listitem><para>Allow user defined aggregates to use polymorphic functions (Joe)</para></listitem>
15376    <listitem><para>Allow assignments to empty arrays (Joe)</para></listitem>
15377
15378    <listitem>
15379     <para>
15380      Allow 60 in seconds fields of <type>time</type>,
15381      <type>timestamp</type>, and <type>interval</type> input values
15382      (Tom)
15383     </para>
15384     <para>
15385      Sixty-second values are needed for leap seconds.
15386     </para>
15387    </listitem>
15388
15389    <listitem><para>Allow <type>cidr</type> data type to be cast to <type>text</type> (Tom)</para></listitem>
15390
15391    <listitem><para>Disallow invalid time zone names in SET TIMEZONE</para></listitem>
15392
15393    <listitem>
15394     <para>
15395      Trim trailing spaces when <type>char</type> is cast to
15396      <type>varchar</> or <type>text</> (Tom)
15397     </para>
15398    </listitem>
15399
15400    <listitem>
15401     <para>
15402      Make <type>float(<replaceable>p</>)</> measure the precision
15403      <replaceable>p</> in binary digits, not decimal digits
15404      (Tom)
15405     </para>
15406    </listitem>
15407
15408    <listitem>
15409     <para>Add IPv6 support to the <type>inet</type> and <type>cidr</type> data types (Michael Graff)</para>
15410    </listitem>
15411
15412    <listitem>
15413     <para>Add <function>family()</function> function to report whether address is IPv4 or IPv6 (Michael Graff)</para>
15414    </listitem>
15415
15416    <listitem>
15417     <para>
15418      Have <literal>SHOW datestyle</literal> generate output similar
15419      to that used by <literal>SET datestyle</literal> (Tom)
15420     </para>
15421    </listitem>
15422
15423    <listitem>
15424     <para>
15425      Make <literal>EXTRACT(TIMEZONE)</literal> and <literal>SET/SHOW
15426      TIME ZONE</literal> follow the SQL convention for the sign of
15427      time zone offsets, i.e., positive is east from UTC (Tom)
15428     </para>
15429    </listitem>
15430
15431    <listitem>
15432     <para>Fix <literal>date_trunc('quarter', ...)</literal> (Böjthe Zoltán)</para>
15433     <para>
15434      Prior releases returned an incorrect value for this function call.
15435     </para>
15436    </listitem>
15437
15438    <listitem>
15439     <para>Make <function>initcap()</function> more compatible with Oracle (Mike Nolan)</para>
15440     <para>
15441      <function>initcap()</function> now uppercases a letter appearing
15442      after any non-alphanumeric character, rather than only after
15443      whitespace.
15444     </para>
15445    </listitem>
15446
15447    <listitem>
15448     <para>Allow only <varname>datestyle</varname> field order for date values not in ISO-8601 format (Greg)</para>
15449    </listitem>
15450
15451    <listitem>
15452     <para>
15453      Add new <varname>datestyle</varname> values <literal>MDY</>,
15454      <literal>DMY</>, and <literal>YMD</> to set input field order;
15455      honor <literal>US</> and <literal>European</> for backward
15456      compatibility (Tom)
15457     </para>
15458    </listitem>
15459
15460    <listitem>
15461     <para>
15462      String literals like <literal>'now'</literal> or
15463      <literal>'today'</literal> will no longer work as a column
15464      default. Use functions such as <function>now()</function>,
15465      <function>current_timestamp</function> instead.  (change
15466      required for prepared statements) (Tom)
15467     </para>
15468    </listitem>
15469
15470    <listitem>
15471     <para>Treat NaN as larger than any other value in <function>min()</>/<function>max()</> (Tom)</para>
15472     <para>
15473      NaN was already sorted after ordinary numeric values for most
15474      purposes, but <function>min()</> and <function>max()</> didn't
15475      get this right.
15476     </para>
15477    </listitem>
15478
15479    <listitem>
15480     <para>Prevent interval from suppressing <literal>:00</literal>
15481     seconds display</para>
15482    </listitem>
15483
15484    <listitem>
15485     <para>
15486      New functions <function>pg_get_triggerdef(prettyprint)</function>
15487      and <function>pg_conversion_is_visible()</function> (Christopher)
15488     </para>
15489    </listitem>
15490
15491    <listitem>
15492     <para>Allow time to be specified as <literal>040506</> or <literal>0405</> (Tom)</para>
15493    </listitem>
15494
15495    <listitem>
15496     <para>
15497      Input date order must now be <literal>YYYY-MM-DD</literal> (with 4-digit year) or
15498      match <varname>datestyle</varname>
15499     </para>
15500    </listitem>
15501
15502    <listitem>
15503     <para>
15504      Make <function>pg_get_constraintdef</function> support
15505      unique, primary-key, and check constraints (Christopher)
15506     </para>
15507    </listitem>
15508   </itemizedlist>
15509  </sect3>
15510
15511  <sect3>
15512   <title>Server-Side Language Changes</title>
15513
15514   <itemizedlist>
15515    <listitem>
15516     <para>
15517      Prevent PL/pgSQL crash when <literal>RETURN NEXT</literal> is
15518      used on a zero-row record variable (Tom)
15519     </para>
15520    </listitem>
15521
15522    <listitem>
15523     <para>
15524      Make PL/Python's <function>spi_execute</function> interface
15525      handle null values properly (Andrew Bosma)
15526     </para>
15527    </listitem>
15528
15529    <listitem>
15530     <para>Allow PL/pgSQL to declare variables of composite types without <literal>%ROWTYPE</literal> (Tom)</para>
15531    </listitem>
15532
15533    <listitem>
15534     <para>Fix PL/Python's <function>_quote()</function> function to handle big integers</para>
15535    </listitem>
15536
15537    <listitem>
15538     <para>Make PL/Python an untrusted language, now called <literal>plpythonu</literal> (Kevin Jacobs, Tom)</para>
15539     <para>
15540      The Python language no longer supports a restricted execution
15541      environment, so the trusted version of PL/Python was removed. If
15542      this situation changes, a version of PL/Python that can be used
15543      by non-superusers will be readded.
15544     </para>
15545    </listitem>
15546
15547    <listitem>
15548     <para>Allow polymorphic PL/pgSQL functions (Joe, Tom)</para>
15549    </listitem>
15550
15551    <listitem>
15552     <para>Allow polymorphic SQL functions (Joe)</para>
15553    </listitem>
15554
15555    <listitem>
15556     <para>
15557      Improved compiled function caching mechanism in PL/pgSQL with
15558      full support for polymorphism (Joe)
15559     </para>
15560    </listitem>
15561
15562    <listitem>
15563     <para>
15564      Add new parameter <literal>$0</> in PL/pgSQL representing the
15565      function's actual return type (Joe)
15566     </para>
15567    </listitem>
15568
15569    <listitem>
15570     <para>
15571      Allow PL/Tcl and PL/Python to use the same trigger on multiple tables (Tom)
15572     </para>
15573    </listitem>
15574
15575    <listitem>
15576     <para>
15577      Fixed PL/Tcl's <function>spi_prepare</function> to accept fully
15578      qualified type names in the parameter type list
15579      (Jan)
15580     </para>
15581    </listitem>
15582   </itemizedlist>
15583  </sect3>
15584
15585  <sect3>
15586   <title>psql Changes</title>
15587
15588   <itemizedlist>
15589    <listitem>
15590     <para>Add <literal>\pset pager always</literal> to always use pager (Greg)</para>
15591     <para>
15592      This forces the pager to be used even if the number of rows is
15593      less than the screen height.  This is valuable for rows that
15594      wrap across several screen rows.
15595     </para>
15596    </listitem>
15597
15598    <listitem><para>Improve tab completion (Rod, Ross Reedstrom, Ian Barwick)</para></listitem>
15599    <listitem><para>Reorder <literal>\?</> help into groupings (Harald Armin Massa, Bruce)</para></listitem>
15600    <listitem><para>Add backslash commands for listing schemas, casts, and conversions (Christopher)</para></listitem>
15601
15602    <listitem>
15603     <para>
15604      <command>\encoding</> now changes based on the server parameter
15605      <varname>client_encoding</varname> (Tom)
15606     </para>
15607     <para>
15608      In previous versions, <command>\encoding</command> was not aware
15609      of encoding changes made using <literal>SET
15610      client_encoding</literal>.
15611     </para>
15612    </listitem>
15613
15614    <listitem>
15615     <para>Save editor buffer into readline history (Ross)</para>
15616     <para>
15617      When <command>\e</> is used to edit a query, the result is saved
15618      in the readline history for retrieval using the up arrow.
15619     </para>
15620    </listitem>
15621
15622    <listitem><para>Improve <command>\d</command> display (Christopher)</para></listitem>
15623    <listitem><para>Enhance HTML mode to be more standards-conforming (Greg)</para></listitem>
15624
15625    <listitem>
15626     <para>New <command>\set AUTOCOMMIT off</command> capability (Tom)</para>
15627     <para>
15628      This takes the place of the removed server parameter <varname>autocommit</varname>.
15629     </para>
15630    </listitem>
15631
15632    <listitem>
15633     <para>New <command>\set VERBOSITY</command> to control error detail (Tom)</para>
15634     <para>
15635      This controls the new error reporting details.
15636     </para>
15637    </listitem>
15638
15639    <listitem><para>New prompt escape sequence <literal>%x</literal> to show transaction status (Tom)</para></listitem>
15640    <listitem><para>Long options for <application>psql</application> are now available on all platforms</para></listitem>
15641   </itemizedlist>
15642  </sect3>
15643
15644  <sect3>
15645   <title>pg_dump Changes</title>
15646
15647   <itemizedlist>
15648    <listitem><para>Multiple pg_dump fixes, including tar format and large objects</para></listitem>
15649    <listitem><para>Allow pg_dump to dump specific schemas (Neil)</para></listitem>
15650
15651    <listitem>
15652     <para>Make pg_dump preserve column storage characteristics (Christopher)</para>
15653     <para>
15654      This preserves <literal>ALTER TABLE ... SET STORAGE</literal> information.
15655     </para>
15656    </listitem>
15657
15658    <listitem><para>Make pg_dump preserve <command>CLUSTER</command> characteristics (Christopher)</para></listitem>
15659
15660    <listitem>
15661     <para>
15662      Have pg_dumpall use <command>GRANT</>/<command>REVOKE</> to dump database-level privileges (Tom)
15663     </para>
15664    </listitem>
15665
15666    <listitem>
15667     <para>
15668      Allow pg_dumpall to support the options <option>-a</>,
15669      <option>-s</>, <option>-x</> of pg_dump (Tom)
15670     </para>
15671    </listitem>
15672
15673    <listitem><para>Prevent pg_dump from lowercasing identifiers specified on the command line (Tom)</para></listitem>
15674
15675    <listitem>
15676     <para>
15677      pg_dump options <option>--use-set-session-authorization</option>
15678      and <option>--no-reconnect</option> now do nothing, all dumps
15679      use <command>SET SESSION AUTHORIZATION</command>
15680     </para>
15681     <para>
15682      pg_dump no longer reconnects to switch users, but instead always
15683      uses <command>SET SESSION AUTHORIZATION</command>. This will
15684      reduce password prompting during restores.
15685     </para>
15686    </listitem>
15687
15688    <listitem>
15689     <para>Long options for <application>pg_dump</application> are now available on all platforms</para>
15690     <para>
15691      <productname>PostgreSQL</productname> now includes its own
15692      long-option processing routines.
15693     </para>
15694    </listitem>
15695   </itemizedlist>
15696  </sect3>
15697
15698  <sect3>
15699   <title>libpq Changes</title>
15700
15701   <itemizedlist>
15702    <listitem>
15703     <para>
15704      Add function <function>PQfreemem</function> for freeing memory on
15705      Windows, suggested for <command>NOTIFY</command> (Bruce)
15706     </para>
15707     <para>
15708      Windows requires that memory allocated in a library be freed by
15709      a function in the same library, hence
15710      <function>free()</function> doesn't work for freeing memory
15711      allocated by libpq. <function>PQfreemem</function> is the proper
15712      way to free libpq memory, especially on Windows, and is
15713      recommended for other platforms as well.
15714     </para>
15715    </listitem>
15716
15717    <listitem>
15718     <para>Document service capability, and add sample file (Bruce)</para>
15719     <para>
15720      This allows clients to look up connection information in a
15721      central file on the client machine.
15722     </para>
15723    </listitem>
15724
15725    <listitem>
15726     <para>
15727      Make <function>PQsetdbLogin</function> have the same defaults as
15728      <function>PQconnectdb</function> (Tom)
15729     </para>
15730    </listitem>
15731
15732    <listitem><para>Allow libpq to cleanly fail when result sets are too large (Tom)</para></listitem>
15733
15734    <listitem>
15735     <para>
15736      Improve performance of function <function>PQunescapeBytea</function> (Ben Lamb)
15737     </para>
15738    </listitem>
15739
15740    <listitem>
15741     <para>
15742      Allow thread-safe libpq with <filename>configure</filename>
15743      option <option>--enable-thread-safety</option> (Lee Kindness,
15744      Philip Yarra)
15745     </para>
15746    </listitem>
15747
15748    <listitem>
15749     <para>
15750      Allow function <function>pqInternalNotice</function> to accept a
15751      format string and arguments instead of just a preformatted
15752      message (Tom, Sean Chittenden)
15753     </para>
15754    </listitem>
15755
15756    <listitem>
15757     <para>
15758      Control SSL negotiation with <literal>sslmode</literal> values
15759      <literal>disable</literal>, <literal>allow</literal>,
15760      <literal>prefer</literal>, and <literal>require</literal> (Jon
15761      Jensen)
15762     </para>
15763    </listitem>
15764
15765    <listitem>
15766     <para>Allow new error codes and levels of text (Tom)</para>
15767    </listitem>
15768
15769    <listitem>
15770     <para>Allow access to the underlying table and column of a query result (Tom)</para>
15771     <para>
15772      This is helpful for query-builder applications that want to know
15773      the underlying table and column names associated with a specific
15774      result set.
15775     </para>
15776    </listitem>
15777
15778    <listitem><para>Allow access to the current transaction status (Tom)</para></listitem>
15779    <listitem><para>Add ability to pass binary data directly to the server (Tom)</para></listitem>
15780
15781    <listitem>
15782     <para>
15783      Add function <function>PQexecPrepared</function> and
15784      <function>PQsendQueryPrepared</function> functions which perform
15785      bind/execute of previously prepared statements (Tom)
15786      </para>
15787     </listitem>
15788   </itemizedlist>
15789  </sect3>
15790
15791  <sect3>
15792   <title>JDBC Changes</title>
15793
15794   <itemizedlist>
15795    <listitem><para>Allow <function>setNull</function> on updateable result sets</para></listitem>
15796    <listitem><para>Allow <function>executeBatch</function> on a prepared statement (Barry)</para></listitem>
15797    <listitem><para>Support SSL connections (Barry)</para></listitem>
15798    <listitem><para>Handle schema names in result sets (Paul Sorenson)</para></listitem>
15799    <listitem><para>Add refcursor support (Nic Ferrier)</para></listitem>
15800   </itemizedlist>
15801  </sect3>
15802
15803  <sect3>
15804   <title>Miscellaneous Interface Changes</title>
15805
15806   <itemizedlist>
15807    <listitem>
15808     <para>Prevent possible memory leak or core dump during libpgtcl shutdown (Tom)</para>
15809    </listitem>
15810    <listitem>
15811     <para>Add Informix compatibility to ECPG (Michael)</para>
15812     <para>
15813      This allows ECPG to process embedded C programs that were
15814      written using certain Informix extensions.
15815     </para>
15816    </listitem>
15817
15818    <listitem>
15819     <para>Add type <type>decimal</type> to ECPG that is fixed length, for Informix (Michael)</para>
15820    </listitem>
15821
15822    <listitem>
15823     <para>
15824      Allow thread-safe embedded SQL programs with
15825      <filename>configure</filename> option
15826      <option>--enable-thread-safety</option> (Lee Kindness, Bruce)
15827     </para>
15828     <para>
15829      This allows multiple threads to access the database at the same
15830      time.
15831     </para>
15832    </listitem>
15833
15834    <listitem>
15835     <para>Moved Python client PyGreSQL to <ulink url="http://www.pygresql.org"></ulink> (Marc)</para>
15836    </listitem>
15837   </itemizedlist>
15838  </sect3>
15839
15840  <sect3>
15841   <title>Source Code Changes</title>
15842
15843   <itemizedlist>
15844    <listitem><para>Prevent need for separate platform geometry regression result files (Tom)</para></listitem>
15845    <listitem><para>Improved PPC locking primitive (Reinhard Max)</para></listitem>
15846    <listitem><para>New function <function>palloc0</function> to allocate and clear memory (Bruce)</para></listitem>
15847    <listitem><para>Fix locking code for s390x CPU (64-bit) (Tom)</para></listitem>
15848    <listitem><para>Allow OpenBSD to use local ident credentials (William Ahern)</para></listitem>
15849    <listitem><para>Make query plan trees read-only to executor (Tom)</para></listitem>
15850    <listitem><para>Add Darwin startup scripts (David Wheeler)</para></listitem>
15851    <listitem><para>Allow libpq to compile with Borland C++ compiler (Lester Godwin, Karl Waclawek)</para></listitem>
15852    <listitem><para>Use our own version of <function>getopt_long()</function> if needed (Peter)</para></listitem>
15853    <listitem><para>Convert administration scripts to C (Peter)</para></listitem>
15854    <listitem><para> Bison &gt;= 1.85 is now required to build the <productname>PostgreSQL</> grammar, if building from CVS</para></listitem>
15855    <listitem><para>Merge documentation into one book (Peter)</para></listitem>
15856    <listitem><para>Add Windows compatibility functions (Bruce)</para></listitem>
15857    <listitem><para>Allow client interfaces to compile under MinGW (Bruce)</para></listitem>
15858    <listitem><para>New <function>ereport()</function> function for error reporting (Tom)</para></listitem>
15859    <listitem><para>Support Intel compiler on Linux (Peter)</para></listitem>
15860    <listitem><para>Improve Linux startup scripts (Slawomir Sudnik, Darko Prenosil)</para></listitem>
15861    <listitem><para>Add support for AMD Opteron and Itanium (Jeffrey W. Baker, Bruce)</para></listitem>
15862    <listitem>
15863     <para>Remove <option>--enable-recode</option> option from <command>configure</command></para>
15864     <para>
15865      This was no longer needed now that we have <command>CREATE CONVERSION</command>.
15866     </para>
15867    </listitem>
15868    <listitem>
15869     <para>Generate a compile error if spinlock code is not found (Bruce)</para>
15870     <para>
15871      Platforms without spinlock code will now fail to compile, rather
15872      than silently using semaphores. This failure can be disabled
15873      with a new <command>configure</command> option.
15874     </para>
15875    </listitem>
15876   </itemizedlist>
15877  </sect3>
15878
15879  <sect3>
15880   <title>Contrib Changes</title>
15881
15882   <itemizedlist>
15883    <listitem><para>Change dbmirror license to BSD</para></listitem>
15884    <listitem><para>Improve earthdistance (Bruno Wolff III)</para></listitem>
15885    <listitem><para>Portability improvements to pgcrypto (Marko Kreen)</para></listitem>
15886    <listitem><para>Prevent crash in xml (John Gray, Michael Richards)</para></listitem>
15887    <listitem><para>Update oracle</para></listitem>
15888    <listitem><para>Update mysql</para></listitem>
15889    <listitem><para>Update cube (Bruno Wolff III)</para></listitem>
15890    <listitem><para>Update earthdistance to use cube (Bruno Wolff III)</para></listitem>
15891    <listitem><para>Update btree_gist (Oleg)</para></listitem>
15892    <listitem><para>New tsearch2 full-text search module (Oleg, Teodor)</para></listitem>
15893    <listitem><para>Add hash-based crosstab function to tablefuncs (Joe)</para></listitem>
15894    <listitem><para>Add serial column to order <function>connectby()</> siblings in tablefuncs (Nabil Sayegh,Joe)</para></listitem>
15895    <listitem><para>Add named persistent connections to dblink (Shridhar Daithanka)</para></listitem>
15896    <listitem><para>New pg_autovacuum allows automatic <command>VACUUM</command> (Matthew T. O'Connor)</para></listitem>
15897    <listitem><para>Make pgbench honor environment variables <envar>PGHOST</>, <envar>PGPORT</>, <envar>PGUSER</> (Tatsuo)</para></listitem>
15898    <listitem><para>Improve intarray (Teodor Sigaev)</para></listitem>
15899    <listitem><para>Improve pgstattuple (Rod)</para></listitem>
15900    <listitem><para>Fix bug in <function>metaphone()</function> in fuzzystrmatch</para></listitem>
15901    <listitem><para>Improve adddepend (Rod)</para></listitem>
15902    <listitem><para>Update spi/timetravel (Böjthe Zoltán)</para></listitem>
15903    <listitem><para>Fix dbase <option>-s</> option and improve non-ASCII handling (Thomas Behr, Márcio Smiderle)</para></listitem>
15904    <listitem><para>Remove array module because features now included by default (Joe)</para></listitem>
15905   </itemizedlist>
15906  </sect3>
15907  </sect2>
15908 </sect1>
15909
15910  <sect1 id="release-7-3-20">
15911   <title>Release 7.3.20</title>
15912
15913   <note>
15914   <title>Release date</title>
15915   <simpara>2007-09-17</simpara>
15916   </note>
15917
15918   <para>
15919    This release contains fixes from 7.3.19.
15920   </para>
15921
15922   <sect2>
15923    <title>Migration to Version 7.3.20</title>
15924
15925    <para>
15926     A dump/restore is not required for those running 7.3.X.  However,
15927     if you are upgrading from a version earlier than 7.3.13, see the release
15928     notes for 7.3.13.
15929    </para>
15930
15931   </sect2>
15932
15933   <sect2>
15934    <title>Changes</title>
15935
15936    <itemizedlist>
15937
15938     <listitem>
15939      <para>
15940       Prevent index corruption when a transaction inserts rows and
15941       then aborts close to the end of a concurrent <command>VACUUM</>
15942       on the same table (Tom)
15943      </para>
15944     </listitem>
15945
15946     <listitem>
15947      <para>
15948       Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
15949      </para>
15950     </listitem>
15951
15952     <listitem>
15953      <para>
15954       Fix crash when <varname>log_min_error_statement</> logging runs out
15955       of memory (Tom)
15956      </para>
15957     </listitem>
15958
15959     <listitem>
15960      <para>
15961       Require non-superusers who use <filename>/contrib/dblink</> to use only
15962       password authentication, as a security measure (Joe)
15963      </para>
15964     </listitem>
15965
15966    </itemizedlist>
15967
15968   </sect2>
15969  </sect1>
15970
15971  <sect1 id="release-7-3-19">
15972   <title>Release 7.3.19</title>
15973
15974   <note>
15975   <title>Release date</title>
15976   <simpara>2007-04-23</simpara>
15977   </note>
15978
15979   <para>
15980    This release contains fixes from 7.3.18,
15981    including a security fix.
15982   </para>
15983
15984   <sect2>
15985    <title>Migration to Version 7.3.19</title>
15986
15987    <para>
15988     A dump/restore is not required for those running 7.3.X.  However,
15989     if you are upgrading from a version earlier than 7.3.13, see the release
15990     notes for 7.3.13.
15991    </para>
15992
15993   </sect2>
15994
15995   <sect2>
15996    <title>Changes</title>
15997
15998    <itemizedlist>
15999
16000     <listitem>
16001     <para>
16002      Support explicit placement of the temporary-table schema within
16003      <varname>search_path</>, and disable searching it for functions
16004      and operators (Tom)
16005     </para>
16006     <para>
16007      This is needed to allow a security-definer function to set a
16008      truly secure value of <varname>search_path</>.  Without it,
16009      an unprivileged SQL user can use temporary objects to execute code
16010      with the privileges of the security-definer function (CVE-2007-2138).
16011      See <command>CREATE FUNCTION</> for more information.
16012     </para>
16013     </listitem>
16014
16015     <listitem>
16016     <para>
16017      Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
16018      <command>UPDATE</> chains (Tom, Pavan Deolasee)
16019     </para>
16020     </listitem>
16021
16022    </itemizedlist>
16023
16024   </sect2>
16025  </sect1>
16026
16027  <sect1 id="release-7-3-18">
16028   <title>Release 7.3.18</title>
16029
16030   <note>
16031   <title>Release date</title>
16032   <simpara>2007-02-05</simpara>
16033   </note>
16034
16035   <para>
16036    This release contains a variety of fixes from 7.3.17, including
16037    a security fix.
16038   </para>
16039
16040   <sect2>
16041    <title>Migration to Version 7.3.18</title>
16042
16043    <para>
16044     A dump/restore is not required for those running 7.3.X.  However,
16045     if you are upgrading from a version earlier than 7.3.13, see the release
16046     notes for 7.3.13.
16047    </para>
16048
16049   </sect2>
16050
16051   <sect2>
16052    <title>Changes</title>
16053
16054    <itemizedlist>
16055
16056     <listitem>
16057     <para>
16058      Remove security vulnerability that allowed connected users
16059      to read backend memory (Tom)
16060     </para>
16061     <para>
16062      The vulnerability involves changing the
16063      data type of a table column used in a SQL function (CVE-2007-0555).
16064      This error can easily be exploited to cause a backend crash, and in
16065      principle might be used to read database content that the user
16066      should not be able to access.
16067     </para>
16068     </listitem>
16069
16070     <listitem>
16071     <para>
16072      Fix rare bug wherein btree index page splits could fail
16073      due to choosing an infeasible split point (Heikki Linnakangas)
16074     </para>
16075     </listitem>
16076
16077     <listitem>
16078     <para>
16079      Tighten security of multi-byte character processing for UTF8 sequences
16080      over three bytes long (Tom)
16081     </para>
16082     </listitem>
16083
16084    </itemizedlist>
16085
16086   </sect2>
16087  </sect1>
16088
16089  <sect1 id="release-7-3-17">
16090   <title>Release 7.3.17</title>
16091
16092   <note>
16093   <title>Release date</title>
16094   <simpara>2007-01-08</simpara>
16095   </note>
16096
16097   <para>
16098    This release contains a variety of fixes from 7.3.16.
16099   </para>
16100
16101   <sect2>
16102    <title>Migration to Version 7.3.17</title>
16103
16104    <para>
16105     A dump/restore is not required for those running 7.3.X.  However,
16106     if you are upgrading from a version earlier than 7.3.13, see the release
16107     notes for 7.3.13.
16108    </para>
16109
16110   </sect2>
16111
16112   <sect2>
16113    <title>Changes</title>
16114
16115    <itemizedlist>
16116
16117     <listitem>
16118      <para>
16119       <function>to_number()</> and <function>to_char(numeric)</>
16120       are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
16121       new <application>initdb</> installs (Tom)
16122      </para>
16123
16124      <para>
16125       This is because <varname>lc_numeric</> can potentially
16126       change the output of these functions.
16127      </para>
16128     </listitem>
16129
16130     <listitem>
16131      <para>
16132       Improve index usage of regular expressions that use parentheses (Tom)
16133      </para>
16134
16135      <para>
16136       This improves <application>psql</> <literal>\d</> performance also.
16137      </para>
16138     </listitem>
16139
16140    </itemizedlist>
16141
16142   </sect2>
16143  </sect1>
16144
16145  <sect1 id="release-7-3-16">
16146   <title>Release 7.3.16</title>
16147
16148   <note>
16149   <title>Release date</title>
16150   <simpara>2006-10-16</simpara>
16151   </note>
16152
16153   <para>
16154    This release contains a variety of fixes from 7.3.15.
16155   </para>
16156
16157   <sect2>
16158    <title>Migration to Version 7.3.16</title>
16159
16160    <para>
16161     A dump/restore is not required for those running 7.3.X.  However,
16162     if you are upgrading from a version earlier than 7.3.13, see the release
16163     notes for 7.3.13.
16164    </para>
16165
16166   </sect2>
16167
16168   <sect2>
16169    <title>Changes</title>
16170
16171 <itemizedlist>
16172 <listitem><para>Fix corner cases in pattern matching for
16173  <application>psql</>'s <literal>\d</> commands</para></listitem>
16174 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
16175  (Teodor)</para></listitem>
16176 <listitem><para>Back-port 7.4 spinlock code to improve performance and support
16177 64-bit architectures better</para> </listitem>
16178 <listitem><para>Fix SSL-related memory leak in libpq</para> </listitem>
16179 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
16180 <listitem><para>Adjust regression tests for recent changes in US DST laws
16181 </para> </listitem>
16182 </itemizedlist>
16183
16184   </sect2>
16185  </sect1>
16186
16187  <sect1 id="release-7-3-15">
16188   <title>Release 7.3.15</title>
16189
16190   <note>
16191   <title>Release date</title>
16192   <simpara>2006-05-23</simpara>
16193   </note>
16194
16195   <para>
16196    This release contains a variety of fixes from 7.3.14,
16197    including patches for extremely serious security issues.
16198   </para>
16199
16200   <sect2>
16201    <title>Migration to Version 7.3.15</title>
16202
16203    <para>
16204     A dump/restore is not required for those running 7.3.X.  However,
16205     if you are upgrading from a version earlier than 7.3.13, see the release
16206     notes for 7.3.13.
16207    </para>
16208
16209    <para>
16210     Full security against the SQL-injection attacks described in
16211     CVE-2006-2313 and CVE-2006-2314 might require changes in application
16212     code.  If you have applications that embed untrustworthy strings
16213     into SQL commands, you should examine them as soon as possible to
16214     ensure that they are using recommended escaping techniques.  In
16215     most cases, applications should be using subroutines provided by
16216     libraries or drivers (such as <application>libpq</>'s
16217     <function>PQescapeStringConn()</>) to perform string escaping,
16218     rather than relying on <foreignphrase>ad hoc</> code to do it.
16219    </para>
16220   </sect2>
16221
16222   <sect2>
16223    <title>Changes</title>
16224
16225 <itemizedlist>
16226 <listitem><para>Change the server to reject invalidly-encoded multibyte
16227 characters in all cases (Tatsuo, Tom)</para>
16228 <para>While <productname>PostgreSQL</> has been moving in this direction for
16229 some time, the checks are now applied uniformly to all encodings and all
16230 textual input, and are now always errors not merely warnings.  This change
16231 defends against SQL-injection attacks of the type described in CVE-2006-2313.
16232 </para></listitem>
16233
16234 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
16235 <para>As a server-side defense against SQL-injection attacks of the type
16236 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
16237 <literal>\'</> as a representation of ASCII single quote in SQL string
16238 literals.  By default, <literal>\'</> is rejected only when
16239 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
16240 GB18030, or UHC), which is the scenario in which SQL injection is possible.
16241 A new configuration parameter <varname>backslash_quote</> is available to
16242 adjust this behavior when needed.  Note that full security against
16243 CVE-2006-2314 might require client-side changes; the purpose of
16244 <varname>backslash_quote</> is in part to make it obvious that insecure
16245 clients are insecure.
16246 </para></listitem>
16247
16248 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
16249 aware of encoding considerations</para>
16250 <para>This fixes <application>libpq</>-using applications for the security
16251 issues described in CVE-2006-2313 and CVE-2006-2314.
16252 Applications that use multiple <productname>PostgreSQL</> connections
16253 concurrently should migrate to <function>PQescapeStringConn()</> and
16254 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
16255 for the settings in use in each database connection.  Applications that
16256 do string escaping <quote>by hand</> should be modified to rely on library
16257 routines instead.
16258 </para></listitem>
16259
16260 <listitem><para>Fix some incorrect encoding conversion functions</para>
16261 <para><function>win1251_to_iso</>, <function>alt_to_iso</>,
16262 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
16263 <function>mic_to_euc_tw</> were all broken to varying
16264 extents.
16265 </para></listitem>
16266
16267 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
16268 (Bruce, Jan)</para></listitem>
16269
16270 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
16271 Fuhr)</para></listitem>
16272
16273 <listitem><para>Fix various minor memory leaks</para></listitem>
16274 </itemizedlist>
16275
16276   </sect2>
16277  </sect1>
16278
16279  <sect1 id="release-7-3-14">
16280   <title>Release 7.3.14</title>
16281
16282   <note>
16283   <title>Release date</title>
16284   <simpara>2006-02-14</simpara>
16285   </note>
16286
16287   <para>
16288    This release contains a variety of fixes from 7.3.13.
16289   </para>
16290
16291   <sect2>
16292    <title>Migration to Version 7.3.14</title>
16293
16294    <para>
16295     A dump/restore is not required for those running 7.3.X.  However,
16296     if you are upgrading from a version earlier than 7.3.13, see the release
16297     notes for 7.3.13.
16298    </para>
16299   </sect2>
16300
16301   <sect2>
16302    <title>Changes</title>
16303
16304 <itemizedlist>
16305
16306 <listitem><para>Fix potential crash in <command>SET
16307 SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
16308 <para>An unprivileged user could crash the server process, resulting in
16309 momentary denial of service to other users, if the server has been compiled
16310 with Asserts enabled (which is not the default).
16311 Thanks to Akio Ishida for reporting this problem.
16312 </para></listitem>
16313
16314 <listitem><para>Fix bug with row visibility logic in self-inserted
16315 rows (Tom)</para>
16316 <para>Under rare circumstances a row inserted by the current command
16317 could be seen as already valid, when it should not be.  Repairs bug
16318 created in 7.3.11 release.
16319 </para></listitem>
16320
16321 <listitem><para>Fix race condition that could lead to <quote>file already
16322 exists</> errors during pg_clog file creation
16323 (Tom)</para></listitem>
16324
16325 <listitem><para>Fix to allow restoring dumps that have cross-schema
16326 references to custom operators (Tom)</para></listitem>
16327
16328 <listitem><para>Portability fix for testing presence of <function>finite</>
16329 and <function>isinf</> during configure (Tom)</para></listitem>
16330
16331 </itemizedlist>
16332
16333   </sect2>
16334  </sect1>
16335
16336  <sect1 id="release-7-3-13">
16337   <title>Release 7.3.13</title>
16338
16339   <note>
16340   <title>Release date</title>
16341   <simpara>2006-01-09</simpara>
16342   </note>
16343
16344   <para>
16345    This release contains a variety of fixes from 7.3.12.
16346   </para>
16347
16348   <sect2>
16349    <title>Migration to Version 7.3.13</title>
16350
16351    <para>
16352     A dump/restore is not required for those running 7.3.X.  However,
16353     if you are upgrading from a version earlier than 7.3.10, see the release
16354     notes for 7.3.10.
16355     Also, you might need to <command>REINDEX</> indexes on textual
16356     columns after updating, if you are affected by the locale or
16357     <application>plperl</> issues described below.
16358    </para>
16359   </sect2>
16360
16361   <sect2>
16362    <title>Changes</title>
16363
16364 <itemizedlist>
16365
16366 <listitem><para>Fix character string comparison for locales that consider
16367 different character combinations as equal, such as Hungarian (Tom)</para>
16368 <para>This might require <command>REINDEX</> to fix existing indexes on
16369 textual columns.</para></listitem>
16370
16371 <listitem><para>Set locale environment variables during postmaster startup
16372 to ensure that <application>plperl</> won't change the locale later</para>
16373 <para>This fixes a problem that occurred if the <application>postmaster</> was
16374 started with environment variables specifying a different locale than what
16375 <application>initdb</> had been told.  Under these conditions, any use of
16376 <application>plperl</> was likely to lead to corrupt indexes.  You might need
16377 <command>REINDEX</> to fix existing indexes on
16378 textual columns if this has happened to you.</para></listitem>
16379
16380 <listitem><para>Fix longstanding bug in strpos() and regular expression
16381 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
16382 </para></listitem>
16383
16384 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
16385 which caused it not to use all available salt space for MD5 and
16386 XDES algorithms (Marko Kreen, Solar Designer)</para>
16387 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
16388
16389 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
16390 rather than crashing, when the number of columns specified is different from
16391 what's actually returned by the query (Joe)</para></listitem>
16392
16393 </itemizedlist>
16394
16395   </sect2>
16396  </sect1>
16397
16398  <sect1 id="release-7-3-12">
16399   <title>Release 7.3.12</title>
16400
16401   <note>
16402   <title>Release date</title>
16403   <simpara>2005-12-12</simpara>
16404   </note>
16405
16406   <para>
16407    This release contains a variety of fixes from 7.3.11.
16408   </para>
16409
16410   <sect2>
16411    <title>Migration to Version 7.3.12</title>
16412
16413    <para>
16414     A dump/restore is not required for those running 7.3.X.  However,
16415     if you are upgrading from a version earlier than 7.3.10, see the release
16416     notes for 7.3.10.
16417    </para>
16418   </sect2>
16419
16420   <sect2>
16421    <title>Changes</title>
16422
16423 <itemizedlist>
16424
16425 <listitem><para>Fix race condition in transaction log management</para>
16426 <para>There was a narrow window in which an I/O operation could be initiated
16427 for the wrong page, leading to an Assert failure or data
16428 corruption.</para>
16429 </listitem>
16430
16431 <listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
16432
16433 <listitem><para>Fix longstanding planning error for outer joins</para>
16434 <para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
16435 only supported with merge-joinable join conditions</>.</para></listitem>
16436
16437 <listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
16438 table has been dropped</para></listitem>
16439
16440 </itemizedlist>
16441
16442   </sect2>
16443  </sect1>
16444
16445  <sect1 id="release-7-3-11">
16446   <title>Release 7.3.11</title>
16447
16448   <note>
16449   <title>Release date</title>
16450   <simpara>2005-10-04</simpara>
16451   </note>
16452
16453   <para>
16454    This release contains a variety of fixes from 7.3.10.
16455   </para>
16456
16457   <sect2>
16458    <title>Migration to Version 7.3.11</title>
16459
16460    <para>
16461     A dump/restore is not required for those running 7.3.X.  However,
16462     if you are upgrading from a version earlier than 7.3.10, see the release
16463     notes for 7.3.10.
16464    </para>
16465   </sect2>
16466
16467   <sect2>
16468    <title>Changes</title>
16469
16470 <itemizedlist>
16471 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
16472 <literal>ctid</> chains too soon, and add more checking in code that follows
16473 <literal>ctid</> links</para>
16474 <para>This fixes a long-standing problem that could cause crashes in very rare
16475 circumstances.</para></listitem>
16476 <listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
16477 length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
16478 <para>In prior releases, the padding of <type>CHAR()</> was incorrect
16479 because it only padded to the specified number of bytes without
16480 considering how many characters were stored.</para></listitem>
16481 <listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
16482 a...</> with GiST index on column <literal>a</></para></listitem>
16483 <listitem><para>Improve checking for partially-written WAL
16484 pages</para></listitem>
16485 <listitem><para>Improve robustness of signal handling when SSL is
16486 enabled</para></listitem>
16487 <listitem><para>Various memory leakage fixes</para></listitem>
16488 <listitem><para>Various portability improvements</para></listitem>
16489 <listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
16490 the variable is of pass-by-reference type</para></listitem>
16491 </itemizedlist>
16492
16493   </sect2>
16494  </sect1>
16495
16496  <sect1 id="release-7-3-10">
16497   <title>Release 7.3.10</title>
16498
16499   <note>
16500   <title>Release date</title>
16501   <simpara>2005-05-09</simpara>
16502   </note>
16503
16504   <para>
16505    This release contains a variety of fixes from 7.3.9, including several
16506    security-related issues.
16507   </para>
16508
16509   <sect2>
16510    <title>Migration to Version 7.3.10</title>
16511
16512    <para>
16513     A dump/restore is not required for those running 7.3.X.  However,
16514     it is one possible way of handling a significant security problem
16515     that has been found in the initial contents of 7.3.X system
16516     catalogs.  A dump/initdb/reload sequence using 7.3.10's initdb will
16517     automatically correct this problem.
16518    </para>
16519
16520    <para>
16521     The security problem is that the built-in character set encoding
16522     conversion functions can be invoked from SQL commands by unprivileged
16523     users, but the functions were not designed for such use and are not
16524     secure against malicious choices of arguments.  The fix involves changing
16525     the declared parameter list of these functions so that they can no longer
16526     be invoked from SQL commands.  (This does not affect their normal use
16527     by the encoding conversion machinery.)
16528     It is strongly recommended that all installations repair this error,
16529     either by initdb or by following the manual repair procedure given
16530     below.  The error at least allows unprivileged database users to crash
16531     their server process, and might allow unprivileged users to gain the
16532     privileges of a database superuser.
16533    </para>
16534
16535    <para>
16536     If you wish not to do an initdb, perform the following procedure instead.
16537     As the database superuser, do:
16538
16539 <programlisting>
16540 BEGIN;
16541 UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
16542 WHERE pronamespace = 11 AND pronargs = 5
16543      AND proargtypes[2] = 'cstring'::regtype;
16544 -- The command should report having updated 90 rows;
16545 -- if not, rollback and investigate instead of committing!
16546 COMMIT;
16547 </programlisting>
16548    </para>
16549
16550    <para>
16551     The above procedure must be carried out in <emphasis>each</> database
16552     of an installation, including <literal>template1</>, and ideally
16553     including <literal>template0</> as well.  If you do not fix the
16554     template databases then any subsequently created databases will contain
16555     the same error.  <literal>template1</> can be fixed in the same way
16556     as any other database, but fixing <literal>template0</> requires
16557     additional steps.  First, from any database issue:
16558 <programlisting>
16559 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
16560 </programlisting>
16561      Next connect to <literal>template0</> and perform the above repair
16562      procedure.  Finally, do:
16563 <programlisting>
16564 -- re-freeze template0:
16565 VACUUM FREEZE;
16566 -- and protect it against future alterations:
16567 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
16568 </programlisting>
16569    </para>
16570   </sect2>
16571
16572   <sect2>
16573    <title>Changes</title>
16574
16575 <itemizedlist>
16576 <listitem><para>Change encoding function signature to prevent
16577 misuse</para></listitem>
16578 <listitem><para>Repair ancient race condition that allowed a transaction to be
16579 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
16580 than for other purposes</para>
16581 <para>This is an extremely serious bug since it could lead to apparent
16582 data inconsistencies being briefly visible to applications.</para></listitem>
16583 <listitem><para>Repair race condition between relation extension and
16584 VACUUM</para>
16585 <para>This could theoretically have caused loss of a page's worth of
16586 freshly-inserted data, although the scenario seems of very low probability.
16587 There are no known cases of it having caused more than an Assert failure.
16588 </para></listitem>
16589 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
16590 <para>
16591 The comparison code was wrong in the case where the
16592 <literal>--enable-integer-datetimes</> configuration switch had been used.
16593 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
16594 it will need to be <command>REINDEX</>ed after installing this update, because
16595 the fix corrects the sort order of column values.
16596 </para></listitem>
16597 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
16598 <type>TIME WITH TIME ZONE</> values</para></listitem>
16599 <listitem><para>Fix mis-display of negative fractional seconds in
16600 <type>INTERVAL</> values</para>
16601 <para>
16602 This error only occurred when the
16603 <literal>--enable-integer-datetimes</> configuration switch had been used.
16604 </para></listitem>
16605 <listitem><para>Additional buffer overrun checks in plpgsql
16606 (Neil)</para></listitem>
16607 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
16608 correctly (Neil)</para></listitem>
16609 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
16610 month-related formats</para></listitem>
16611 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
16612 (Marko Kreen)</para></listitem>
16613 <listitem><para>Still more 64-bit fixes for
16614 <filename>contrib/intagg</></para></listitem>
16615 <listitem><para>Prevent incorrect optimization of functions returning
16616 <type>RECORD</></para></listitem>
16617 </itemizedlist>
16618
16619  </sect2>
16620 </sect1>
16621
16622  <sect1 id="release-7-3-9">
16623   <title>Release 7.3.9</title>
16624
16625   <note>
16626   <title>Release date</title>
16627   <simpara>2005-01-31</simpara>
16628   </note>
16629
16630   <para>
16631    This release contains a variety of fixes from 7.3.8, including several
16632    security-related issues.
16633   </para>
16634
16635   <sect2>
16636    <title>Migration to Version 7.3.9</title>
16637
16638    <para>
16639     A dump/restore is not required for those running 7.3.X.
16640    </para>
16641   </sect2>
16642
16643   <sect2>
16644    <title>Changes</title>
16645
16646 <itemizedlist>
16647 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
16648 <para>
16649 On platforms that will automatically execute initialization functions of a
16650 shared library (this includes at least Windows and ELF-based Unixen),
16651 <command>LOAD</> can be used to make the server execute arbitrary code.
16652 Thanks to NGS Software for reporting this.</para></listitem>
16653 <listitem><para>Check that creator of an aggregate function has the right to
16654 execute the specified transition functions</para>
16655 <para>
16656 This oversight made it possible to bypass denial of EXECUTE
16657 permission on a function.</para></listitem>
16658 <listitem><para>Fix security and 64-bit issues in
16659 contrib/intagg</para></listitem>
16660 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
16661 Jurka)</para></listitem>
16662 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
16663 many parameters (Neil)</para></listitem>
16664 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
16665 <para>
16666 The result of the join was mistakenly supposed to be sorted the same as the
16667 left input.  This could not only deliver mis-sorted output to the user, but
16668 in case of nested merge joins could give outright wrong answers.
16669 </para></listitem>
16670 <listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
16671 <listitem><para>Fix display of negative intervals in SQL and GERMAN
16672 datestyles</para></listitem>
16673 </itemizedlist>
16674
16675  </sect2>
16676 </sect1>
16677
16678  <sect1 id="release-7-3-8">
16679   <title>Release 7.3.8</title>
16680
16681   <note>
16682   <title>Release date</title>
16683   <simpara>2004-10-22</simpara>
16684   </note>
16685
16686   <para>
16687    This release contains a variety of fixes from 7.3.7.
16688   </para>
16689
16690
16691   <sect2>
16692    <title>Migration to Version 7.3.8</title>
16693
16694    <para>
16695     A dump/restore is not required for those running 7.3.X.
16696    </para>
16697   </sect2>
16698
16699   <sect2>
16700    <title>Changes</title>
16701
16702 <itemizedlist>
16703 <listitem><para>Repair possible failure to update hint bits on disk</para>
16704 <para>
16705 Under rare circumstances this oversight could lead to
16706 <quote>could not access transaction status</> failures, which qualifies
16707 it as a potential-data-loss bug.
16708 </para></listitem>
16709 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
16710 <para>
16711 Very large left joins using a hash join plan could fail to output unmatched
16712 left-side rows given just the right data distribution.
16713 </para></listitem>
16714 <listitem><para>Disallow running pg_ctl as root</para>
16715 <para>
16716 This is to guard against any possible security issues.
16717 </para></listitem>
16718 <listitem><para>Avoid using temp files in /tmp in make_oidjoins_check</para>
16719 <para>
16720 This has been reported as a security issue, though it's hardly worthy of
16721 concern since there is no reason for non-developers to use this script anyway.
16722 </para></listitem>
16723 </itemizedlist>
16724
16725  </sect2>
16726 </sect1>
16727
16728  <sect1 id="release-7-3-7">
16729   <title>Release 7.3.7</title>
16730
16731   <note>
16732   <title>Release date</title>
16733   <simpara>2004-08-16</simpara>
16734   </note>
16735
16736   <para>
16737    This release contains one critical fix over 7.3.6, and some minor items.
16738   </para>
16739
16740
16741   <sect2>
16742    <title>Migration to Version 7.3.7</title>
16743
16744    <para>
16745     A dump/restore is not required for those running 7.3.X.
16746    </para>
16747   </sect2>
16748
16749   <sect2>
16750    <title>Changes</title>
16751
16752 <itemizedlist>
16753 <listitem><para>Prevent possible loss of committed transactions during crash</para>
16754 <para>
16755 Due to insufficient interlocking between transaction commit and checkpointing,
16756 it was possible for transactions committed just before the most recent
16757 checkpoint to be lost, in whole or in part, following a database crash and
16758 restart.  This is a serious bug that has existed
16759 since <productname>PostgreSQL</productname> 7.1.
16760 </para></listitem>
16761 <listitem><para>Remove asymmetrical word processing in tsearch (Teodor)</para></listitem>
16762 <listitem><para>Properly schema-qualify function names when pg_dump'ing a CAST</para></listitem>
16763 </itemizedlist>
16764
16765  </sect2>
16766 </sect1>
16767
16768  <sect1 id="release-7-3-6">
16769   <title>Release 7.3.6</title>
16770
16771   <note>
16772   <title>Release date</title>
16773   <simpara>2004-03-02</simpara>
16774   </note>
16775
16776   <para>
16777    This release contains a variety of fixes from 7.3.5.
16778   </para>
16779
16780
16781   <sect2>
16782    <title>Migration to Version 7.3.6</title>
16783
16784    <para>
16785     A dump/restore is <emphasis>not</emphasis> required for those
16786     running 7.3.*.
16787    </para>
16788
16789   </sect2>
16790
16791   <sect2>
16792    <title>Changes</title>
16793
16794 <itemizedlist>
16795 <listitem><para>Revert erroneous changes in rule permissions checking</para>
16796 <para>A patch applied in 7.3.3 to fix a corner case in rule permissions checks
16797 turns out to have disabled rule-related permissions checks in many
16798 not-so-corner cases.  This would for example allow users to insert into views
16799 they weren't supposed to have permission to insert into.  We have therefore
16800 reverted the 7.3.3 patch.  The original bug will be fixed in 8.0.
16801 </para></listitem>
16802 <listitem><para>Repair incorrect order of operations in
16803 GetNewTransactionId()</para>
16804 <para>
16805 This bug could result in failure under out-of-disk-space conditions, including
16806 inability to restart even after disk space is freed.
16807 </para></listitem>
16808 <listitem><para>Ensure configure selects -fno-strict-aliasing even when
16809 an external value for CFLAGS is supplied</para>
16810 <para>
16811 On some platforms, building with -fstrict-aliasing causes bugs.
16812 </para></listitem>
16813 <listitem><para>Make pg_restore handle 64-bit off_t correctly</para>
16814 <para>
16815 This bug prevented proper restoration from archive files exceeding 4 GB.
16816 </para></listitem>
16817 <listitem><para>Make contrib/dblink not assume that local and remote type OIDs
16818 match (Joe)</para></listitem>
16819 <listitem><para>Quote connectby()'s start_with argument properly (Joe)</para></listitem>
16820 <listitem><para>Don't crash when a rowtype argument to a plpgsql function is
16821 NULL</para></listitem>
16822 <listitem><para>Avoid generating invalid character encoding sequences in
16823 corner cases when planning LIKE operations</para></listitem>
16824 <listitem><para>Ensure text_position() cannot scan past end of source string
16825 in multibyte cases (Korea PostgreSQL Users' Group)</para></listitem>
16826 <listitem><para>Fix index optimization and selectivity estimates for LIKE
16827 operations on bytea columns (Joe)</para></listitem>
16828 </itemizedlist>
16829
16830  </sect2>
16831 </sect1>
16832
16833  <sect1 id="release-7-3-5">
16834   <title>Release 7.3.5</title>
16835
16836   <note>
16837   <title>Release date</title>
16838   <simpara>2003-12-03</simpara>
16839   </note>
16840
16841   <para>
16842    This has a variety of fixes from 7.3.4.
16843   </para>
16844
16845
16846   <sect2>
16847    <title>Migration to Version 7.3.5</title>
16848
16849    <para>
16850     A dump/restore is <emphasis>not</emphasis> required for those
16851     running 7.3.*.
16852    </para>
16853   </sect2>
16854
16855   <sect2>
16856    <title>Changes</title>
16857
16858 <itemizedlist>
16859 <listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
16860 <listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
16861 <listitem><para>Force stats processes to detach from shared memory, ensuring cleaner shutdown</para></listitem>
16862 <listitem><para>Make PQescapeBytea and byteaout consistent with each other (Joe)</para></listitem>
16863 <listitem><para>Added missing SPI_finish() calls to dblink's get_tuple_of_interest() (Joe)</para></listitem>
16864 <listitem><para>Fix for possible foreign key violation when rule rewrites INSERT (Jan)</para></listitem>
16865 <listitem><para>Support qualified type names in PL/Tcl's spi_prepare command (Jan)</para></listitem>
16866 <listitem><para>Make pg_dump handle a procedural language handler located in pg_catalog</para></listitem>
16867 <listitem><para>Make pg_dump handle cases where a custom opclass is in another schema</para></listitem>
16868 <listitem><para>Make pg_dump dump binary-compatible casts correctly (Jan)</para></listitem>
16869 <listitem><para>Fix insertion of expressions containing subqueries into rule bodies</para></listitem>
16870 <listitem><para>Fix incorrect argument processing in clusterdb script (Anand Ranganathan)</para></listitem>
16871 <listitem><para>Fix problems with dropped columns in plpython triggers</para></listitem>
16872 <listitem><para>Repair problems with to_char() reading past end of its input string (Karel)</para></listitem>
16873 <listitem><para>Fix GB18030 mapping errors (Tatsuo)</para></listitem>
16874 <listitem><para>Fix several problems with SSL error handling and asynchronous SSL I/O</para></listitem>
16875 <listitem><para>Remove ability to bind a list of values to a single parameter in JDBC
16876 (prevents possible SQL-injection attacks)</para></listitem>
16877 <listitem><para>Fix some errors in HAVE_INT64_TIMESTAMP code paths</para></listitem>
16878 <listitem><para>Fix corner case for btree search in parallel with first root page split</para></listitem>
16879 </itemizedlist>
16880
16881  </sect2>
16882 </sect1>
16883
16884  <sect1 id="release-7-3-4">
16885   <title>Release 7.3.4</title>
16886
16887   <note>
16888   <title>Release date</title>
16889   <simpara>2003-07-24</simpara>
16890   </note>
16891
16892   <para>
16893    This has a variety of fixes from 7.3.3.
16894   </para>
16895
16896
16897   <sect2>
16898    <title>Migration to Version 7.3.4</title>
16899
16900    <para>
16901     A dump/restore is <emphasis>not</emphasis> required for those
16902     running 7.3.*.
16903    </para>
16904   </sect2>
16905
16906   <sect2>
16907    <title>Changes</title>
16908
16909 <itemizedlist>
16910 <listitem><para>Repair breakage in timestamp-to-date conversion for dates before 2000</para></listitem>
16911 <listitem><para>Prevent rare possibility of server startup failure (Tom)</para></listitem>
16912 <listitem><para>Fix bugs in interval-to-time conversion (Tom)</para></listitem>
16913 <listitem><para>Add constraint names in a few places in pg_dump (Rod)</para></listitem>
16914 <listitem><para>Improve performance of functions with many parameters (Tom)</para></listitem>
16915 <listitem><para>Fix to_ascii() buffer overruns (Tom)</para></listitem>
16916 <listitem><para>Prevent restore of database comments from throwing an error (Tom)</para></listitem>
16917 <listitem><para>Work around buggy strxfrm() present in some Solaris releases (Tom)</para></listitem>
16918 <listitem><para>Properly escape jdbc setObject() strings to improve security (Barry)</para></listitem>
16919 </itemizedlist>
16920   </sect2>
16921  </sect1>
16922
16923
16924 <sect1 id="release-7-3-3">
16925  <title>Release 7.3.3</title>
16926
16927  <note>
16928   <title>Release date</title>
16929   <simpara>2003-05-22</simpara>
16930  </note>
16931
16932  <para>
16933   This release contains a variety of fixes for version 7.3.2.
16934  </para>
16935
16936  <sect2>
16937   <title>Migration to Version 7.3.3</title>
16938
16939   <para>
16940    A dump/restore is <emphasis>not</emphasis> required for those
16941    running version 7.3.*.
16942   </para>
16943  </sect2>
16944
16945  <sect2>
16946   <title>Changes</title>
16947
16948 <itemizedlist>
16949 <listitem><para>Repair sometimes-incorrect computation of StartUpID after a crash</para></listitem>
16950 <listitem><para>Avoid slowness with lots of deferred triggers in one transaction (Stephan)</para></listitem>
16951 <listitem><para>Don't lock referenced row when <command>UPDATE</command> doesn't change foreign key's value (Jan)</para></listitem>
16952 <listitem><para>Use <command>-fPIC</command> not <command>-fpic</command> on Sparc (Tom Callaway)</para></listitem>
16953 <listitem><para>Repair lack of schema-awareness in contrib/reindexdb</para></listitem>
16954 <listitem><para>Fix contrib/intarray error for zero-element result array (Teodor)</para></listitem>
16955 <listitem><para>Ensure createuser script will exit on control-C (Oliver)</para></listitem>
16956 <listitem><para>Fix errors when the type of a dropped column has itself been dropped</para></listitem>
16957 <listitem><para><command>CHECKPOINT</command> does not cause database panic on failure in noncritical steps</para></listitem>
16958 <listitem><para>Accept 60 in seconds fields of timestamp, time, interval input values</para></listitem>
16959 <listitem><para>Issue notice, not error, if <type>TIMESTAMP</type>,
16960 <type> TIME</type>, or <type>INTERVAL</type> precision too large</para></listitem>
16961 <listitem><para>Fix <function>abstime-to-time</function> cast function (fix is
16962       not applied unless you <application>initdb</application>)</para></listitem>
16963 <listitem><para>Fix <application>pg_proc</application> entry for
16964      <type>timestampt_izone</type> (fix is not applied unless you
16965        <application>initdb</application>)</para></listitem>
16966 <listitem><para>Make <function>EXTRACT(EPOCH FROM timestamp without time zone)</function> treat input as local time</para></listitem>
16967 <listitem><para><command>'now'::timestamptz</command> gave wrong answer if timezone changed earlier in transaction</para></listitem>
16968 <listitem><para><envar>HAVE_INT64_TIMESTAMP</envar> code for time with timezone overwrote its input</para></listitem>
16969 <listitem><para>Accept <command>GLOBAL TEMP/TEMPORARY</command> as a
16970       synonym for <command>TEMPORARY</command></para></listitem>
16971 <listitem><para>Avoid improper schema-privilege-check failure in foreign-key triggers</para></listitem>
16972 <listitem><para>Fix bugs in foreign-key triggers for <command>SET DEFAULT</command> action</para></listitem>
16973 <listitem><para>Fix incorrect time-qual check in row fetch for
16974       <command>UPDATE</command> and <command>DELETE</command> triggers</para></listitem>
16975 <listitem><para>Foreign-key clauses were parsed but ignored in
16976       <command>ALTER TABLE ADD COLUMN</command></para></listitem>
16977 <listitem><para>Fix createlang script breakage for case where handler function already exists</para></listitem>
16978 <listitem><para>Fix misbehavior on zero-column tables in <application>pg_dump</application>, COPY, ANALYZE, other places</para></listitem>
16979 <listitem><para>Fix misbehavior of <function>func_error()</function> on type names containing '%'</para></listitem>
16980 <listitem><para>Fix misbehavior of <function>replace()</function> on strings containing '%'</para></listitem>
16981 <listitem><para>Regular-expression patterns containing certain multibyte characters failed</para></listitem>
16982 <listitem><para>Account correctly for <command>NULL</command>s in more cases in join size estimation</para></listitem>
16983 <listitem><para>Avoid conflict with system definition of <function>isblank()</function> function or macro</para></listitem>
16984 <listitem><para>Fix failure to convert large code point values in EUC_TW conversions (Tatsuo)</para></listitem>
16985 <listitem><para>Fix error recovery for <function>SSL_read</function>/<function>SSL_write</function> calls</para></listitem>
16986 <listitem><para>Don't do early constant-folding of type coercion expressions</para></listitem>
16987 <listitem><para>Validate page header fields immediately after reading in any page</para></listitem>
16988 <listitem><para>Repair incorrect check for ungrouped variables in unnamed joins</para></listitem>
16989 <listitem><para>Fix buffer overrun in <function>to_ascii</function> (Guido Notari)</para></listitem>
16990 <listitem><para>contrib/ltree fixes (Teodor)</para></listitem>
16991 <listitem><para>Fix core dump in deadlock detection on machines where char is unsigned</para></listitem>
16992 <listitem><para>Avoid running out of buffers in many-way indexscan (bug introduced in 7.3)</para></listitem>
16993 <listitem><para>Fix planner's selectivity estimation functions to handle domains properly</para></listitem>
16994 <listitem><para>Fix <application>dbmirror</application> memory-allocation bug (Steven Singer)</para></listitem>
16995 <listitem><para>Prevent infinite loop in <function>ln(numeric)</function> due to roundoff error</para></listitem>
16996 <listitem><para><command>GROUP BY</command> got confused if there were multiple equal GROUP BY items</para></listitem>
16997 <listitem><para>Fix bad plan when inherited <command>UPDATE</command>/<command>DELETE</command> references another inherited table</para></listitem>
16998 <listitem><para>Prevent clustering on incomplete (partial or non-NULL-storing) indexes</para></listitem>
16999 <listitem><para>Service shutdown request at proper time if it arrives while still starting up</para></listitem>
17000 <listitem><para>Fix left-links in temporary indexes (could make backwards scans miss entries)</para></listitem>
17001 <listitem><para>Fix incorrect handling of client_encoding setting in postgresql.conf (Tatsuo)</para></listitem>
17002 <listitem><para>Fix failure to respond to <command>pg_ctl stop -m fast</command> after Async_NotifyHandler runs</para></listitem>
17003 <listitem><para>Fix SPI for case where rule contains multiple statements of the same type</para></listitem>
17004 <listitem><para>Fix problem with checking for wrong type of access privilege in rule query</para></listitem>
17005 <listitem><para>Fix problem with <command>EXCEPT</command> in <command>CREATE RULE</command></para></listitem>
17006 <listitem><para>Prevent problem with dropping temp tables having serial columns</para></listitem>
17007 <listitem><para>Fix replace_vars_with_subplan_refs failure in complex views</para></listitem>
17008 <listitem><para>Fix regexp slowness in single-byte encodings (Tatsuo)</para></listitem>
17009 <listitem><para>Allow qualified type names in <command>CREATE CAST</command>
17010       and <command> DROP CAST</command></para></listitem>
17011 <listitem><para>Accept <function>SETOF type[]</function>, which formerly had to
17012       be written <function>SETOF _type</function></para></listitem>
17013 <listitem><para>Fix <application>pg_dump</application> core dump in some cases with procedural languages</para></listitem>
17014 <listitem><para>Force ISO datestyle in <application>pg_dump</application> output, for portability (Oliver)</para></listitem>
17015 <listitem><para><application>pg_dump</application> failed to handle error return
17016       from <function>lo_read</function> (Oleg Drokin)</para></listitem>
17017 <listitem><para><application>pg_dumpall</application> failed with groups having no members (Nick Eskelinen)</para></listitem>
17018 <listitem><para><application>pg_dumpall</application> failed to recognize --globals-only switch</para></listitem>
17019 <listitem><para>pg_restore failed to restore blobs if -X disable-triggers is specified</para></listitem>
17020 <listitem><para>Repair intrafunction memory leak in plpgsql</para></listitem>
17021 <listitem><para>pltcl's <command>elog</command> command dumped core if given wrong parameters (Ian Harding)</para></listitem>
17022 <listitem><para>plpython used wrong value of <envar>atttypmod</envar> (Brad McLean)</para></listitem>
17023 <listitem><para>Fix improper quoting of boolean values in Python interface (D'Arcy)</para></listitem>
17024 <listitem><para>Added <function>addDataType()</function> method to PGConnection interface for JDBC</para></listitem>
17025 <listitem><para>Fixed various problems with updateable ResultSets for JDBC (Shawn Green)</para></listitem>
17026 <listitem><para>Fixed various problems with DatabaseMetaData for JDBC (Kris Jurka, Peter Royal)</para></listitem>
17027 <listitem><para>Fixed problem with parsing table ACLs in JDBC</para></listitem>
17028 <listitem><para>Better error message for character set conversion problems in JDBC</para></listitem>
17029 </itemizedlist>
17030  </sect2>
17031 </sect1>
17032
17033
17034 <sect1 id="release-7-3-2">
17035  <title>Release 7.3.2</title>
17036
17037  <note>
17038   <title>Release date</title>
17039   <simpara>2003-02-04</simpara>
17040  </note>
17041
17042  <para>
17043   This release contains a variety of fixes for version 7.3.1.
17044  </para>
17045
17046
17047  <sect2>
17048   <title>Migration to Version 7.3.2</title>
17049
17050   <para>
17051    A dump/restore is <emphasis>not</emphasis> required for those
17052    running version 7.3.*.
17053   </para>
17054  </sect2>
17055
17056  <sect2>
17057   <title>Changes</title>
17058
17059 <itemizedlist>
17060 <listitem><para>Restore creation of OID column in CREATE TABLE AS / SELECT INTO</para></listitem>
17061 <listitem><para>Fix <application>pg_dump</> core dump when dumping views having comments</para></listitem>
17062 <listitem><para>Dump DEFERRABLE/INITIALLY DEFERRED constraints properly</para></listitem>
17063 <listitem><para>Fix UPDATE when child table's column numbering differs from parent</para></listitem>
17064 <listitem><para>Increase default value of max_fsm_relations</para></listitem>
17065 <listitem><para>Fix problem when fetching backwards in a cursor for a single-row query</para></listitem>
17066 <listitem><para>Make backward fetch work properly with cursor on SELECT DISTINCT query</para></listitem>
17067 <listitem><para>Fix problems with loading <application>pg_dump</> files containing contrib/lo usage</para></listitem>
17068 <listitem><para>Fix problem with all-numeric user names</para></listitem>
17069 <listitem><para>Fix possible memory leak and core dump during disconnect in libpgtcl</para></listitem>
17070 <listitem><para>Make plpython's spi_execute command handle nulls properly (Andrew Bosma)</para></listitem>
17071 <listitem><para>Adjust plpython error reporting so that its regression test passes again</para></listitem>
17072 <listitem><para>Work with bison 1.875</para></listitem>
17073 <listitem><para>Handle mixed-case names properly in plpgsql's %type (Neil)</para></listitem>
17074 <listitem><para>Fix core dump in pltcl when executing a query rewritten by a rule</para></listitem>
17075 <listitem><para>Repair array subscript overruns (per report from Yichen Xie)</para></listitem>
17076 <listitem><para>Reduce MAX_TIME_PRECISION from 13 to 10 in floating-point case</para></listitem>
17077 <listitem><para>Correctly case-fold variable names in per-database and per-user settings</para></listitem>
17078 <listitem><para>Fix coredump in plpgsql's RETURN NEXT when SELECT into record returns no rows</para></listitem>
17079 <listitem><para>Fix outdated use of pg_type.typprtlen in python client interface</para></listitem>
17080 <listitem><para>Correctly handle fractional seconds in timestamps in JDBC driver</para></listitem>
17081 <listitem><para>Improve performance of getImportedKeys() in JDBC</para></listitem>
17082 <listitem><para>Make shared-library symlinks work standardly on HPUX (Giles)</para></listitem>
17083 <listitem><para>Repair inconsistent rounding behavior for timestamp, time, interval</para></listitem>
17084 <listitem><para>SSL negotiation fixes (Nathan Mueller)</para></listitem>
17085 <listitem><para>Make libpq's ~/.pgpass feature work when connecting with PQconnectDB</para></listitem>
17086 <listitem><para>Update my2pg, ora2pg</para></listitem>
17087 <listitem><para>Translation updates</para></listitem>
17088 <listitem><para>Add casts between types lo and oid in contrib/lo</para></listitem>
17089 <listitem><para>fastpath code now checks for privilege to call function</para></listitem>
17090 </itemizedlist>
17091  </sect2>
17092 </sect1>
17093
17094
17095 <sect1 id="release-7-3-1">
17096  <title>Release 7.3.1</title>
17097
17098  <note>
17099   <title>Release date</title>
17100   <simpara>2002-12-18</simpara>
17101  </note>
17102
17103  <para>
17104   This release contains a variety of fixes for version 7.3.
17105  </para>
17106
17107
17108  <sect2>
17109   <title>Migration to Version 7.3.1</title>
17110
17111   <para>
17112    A dump/restore is <emphasis>not</emphasis> required for those
17113    running version 7.3. However, it should be noted that the main
17114    <productname>PostgreSQL</productname> interface library, libpq,
17115    has a new major version number for this release, which might require
17116    recompilation of client code in certain cases.
17117   </para>
17118  </sect2>
17119
17120  <sect2>
17121   <title>Changes</title>
17122
17123 <itemizedlist>
17124 <listitem><para>Fix a core dump of COPY TO when client/server encodings don't match (Tom)</para></listitem>
17125 <listitem><para>Allow <application>pg_dump</> to work with pre-7.2 servers (Philip)</para></listitem>
17126 <listitem><para>contrib/adddepend fixes (Tom)</para></listitem>
17127 <listitem><para>Fix problem with deletion of per-user/per-database config settings (Tom)</para></listitem>
17128 <listitem><para>contrib/vacuumlo fix (Tom)</para></listitem>
17129 <listitem><para>Allow 'password' encryption even when pg_shadow contains MD5 passwords (Bruce)</para></listitem>
17130 <listitem><para>contrib/dbmirror fix (Steven Singer)</para></listitem>
17131 <listitem><para>Optimizer fixes (Tom)</para></listitem>
17132 <listitem><para>contrib/tsearch fixes (Teodor Sigaev, Magnus)</para></listitem>
17133 <listitem><para>Allow locale names to be mixed case (Nicolai Tufar)</para></listitem>
17134 <listitem><para>Increment libpq library's major version number (Bruce)</para></listitem>
17135 <listitem><para>pg_hba.conf error reporting fixes (Bruce, Neil)</para></listitem>
17136 <listitem><para>Add SCO Openserver 5.0.4 as a supported platform (Bruce)</para></listitem>
17137 <listitem><para>Prevent EXPLAIN from crashing server (Tom)</para></listitem>
17138 <listitem><para>SSL fixes (Nathan Mueller)</para></listitem>
17139 <listitem><para>Prevent composite column creation via ALTER TABLE (Tom)</para></listitem>
17140 </itemizedlist>
17141  </sect2>
17142 </sect1>
17143
17144
17145 <sect1 id="release-7-3">
17146  <title>Release 7.3</title>
17147
17148  <note>
17149   <title>Release date</title>
17150   <simpara>2002-11-27</simpara>
17151  </note>
17152
17153  <sect2>
17154   <title>Overview</title>
17155
17156   <para>
17157    Major changes in this release:
17158   </para>
17159
17160   <variablelist>
17161    <varlistentry>
17162     <term>Schemas</term>
17163     <listitem>
17164      <para>
17165       Schemas allow users to create objects in separate namespaces,
17166       so two people or applications can have tables with the same
17167       name. There is also a public schema for shared tables.
17168       Table/index creation can be restricted by removing privileges
17169       on the public schema.
17170      </para>
17171     </listitem>
17172    </varlistentry>
17173
17174    <varlistentry>
17175     <term>Drop Column</term>
17176     <listitem>
17177      <para>
17178       <productname>PostgreSQL</productname> now supports the
17179       <literal>ALTER TABLE ... DROP COLUMN</literal> functionality.
17180      </para>
17181     </listitem>
17182    </varlistentry>
17183
17184    <varlistentry>
17185     <term>Table Functions</term>
17186     <listitem>
17187      <para>
17188       Functions returning multiple rows and/or multiple columns are
17189       now much easier to use than before.  You can call such a
17190       <quote>table function</quote> in the <literal>SELECT</literal>
17191       <literal>FROM</literal> clause, treating its output like a
17192       table. Also, <application>PL/pgSQL</application> functions can
17193       now return sets.
17194      </para>
17195     </listitem>
17196    </varlistentry>
17197
17198    <varlistentry>
17199     <term>Prepared Queries</term>
17200     <listitem>
17201      <para>
17202       <productname>PostgreSQL</productname> now supports prepared
17203       queries, for improved performance.
17204      </para>
17205     </listitem>
17206    </varlistentry>
17207
17208    <varlistentry>
17209     <term>Dependency Tracking</term>
17210     <listitem>
17211      <para>
17212       <productname>PostgreSQL</productname> now records object
17213       dependencies, which allows improvements in many areas.
17214       <command>DROP</command> statements now take either
17215       <literal>CASCADE</> or <literal>RESTRICT</> to control whether
17216       dependent objects are also dropped.
17217      </para>
17218     </listitem>
17219    </varlistentry>
17220
17221    <varlistentry>
17222     <term>Privileges</term>
17223     <listitem>
17224      <para>
17225       Functions and procedural languages now have privileges, and
17226       functions can be defined to run with the privileges of their
17227       creator.
17228      </para>
17229     </listitem>
17230    </varlistentry>
17231
17232    <varlistentry>
17233     <term>Internationalization</term>
17234     <listitem>
17235      <para>
17236       Both multibyte and locale support are now always enabled.
17237      </para>
17238     </listitem>
17239    </varlistentry>
17240
17241    <varlistentry>
17242     <term>Logging</term>
17243     <listitem>
17244      <para>
17245       A variety of logging options have been enhanced.
17246      </para>
17247     </listitem>
17248    </varlistentry>
17249
17250    <varlistentry>
17251     <term>Interfaces</term>
17252     <listitem>
17253      <para>
17254       A large number of interfaces have been moved to <ulink
17255       url="http://gborg.postgresql.org">http://gborg.postgresql.org</>
17256       where they can be developed and released independently.
17257      </para>
17258     </listitem>
17259    </varlistentry>
17260
17261    <varlistentry>
17262     <term>Functions/Identifiers</term>
17263     <listitem>
17264      <para>
17265       By default, functions can now take up to 32 parameters, and
17266       identifiers can be up to 63 bytes long.  Also, <literal>OPAQUE</>
17267       is now deprecated: there are specific <quote>pseudo-datatypes</>
17268       to represent each of the former meanings of <literal>OPAQUE</>
17269       in function argument and result types.
17270      </para>
17271     </listitem>
17272    </varlistentry>
17273
17274   </variablelist>
17275  </sect2>
17276
17277  <sect2>
17278   <title>Migration to Version 7.3</title>
17279
17280   <para>
17281    A dump/restore using <application>pg_dump</> is required for those
17282    wishing to migrate data from any previous release. If your
17283    application examines the system catalogs, additional changes will
17284    be required due to the introduction of schemas in 7.3; for more
17285    information, see: <ulink
17286    url="http://developer.postgresql.org/~momjian/upgrade_tips_7.3"></>.
17287   </para>
17288
17289   <para>
17290    Observe the following incompatibilities:
17291   </para>
17292
17293   <itemizedlist>
17294    <listitem>
17295     <para>
17296      Pre-6.3 clients are no longer supported.
17297     </para>
17298    </listitem>
17299
17300    <listitem>
17301     <para>
17302      <filename>pg_hba.conf</filename> now has a column for the user
17303      name and additional features.  Existing files need to be
17304      adjusted.
17305     </para>
17306    </listitem>
17307
17308    <listitem>
17309     <para>
17310      Several <filename>postgresql.conf</filename> logging parameters
17311      have been renamed.
17312     </para>
17313    </listitem>
17314
17315    <listitem>
17316     <para>
17317      <literal>LIMIT #,#</literal> has been disabled; use
17318      <literal>LIMIT # OFFSET #</literal>.
17319     </para>
17320    </listitem>
17321
17322    <listitem>
17323     <para>
17324      <command>INSERT</command> statements with column lists must
17325      specify a value for each specified column. For example,
17326      <literal>INSERT INTO tab (col1, col2) VALUES ('val1')</literal>
17327      is now invalid.  It's still allowed to supply fewer columns than
17328      expected if the <command>INSERT</command> does not have a column list.
17329     </para>
17330    </listitem>
17331
17332    <listitem>
17333     <para>
17334      <type>serial</type> columns are no longer automatically
17335      <literal>UNIQUE</>; thus, an index will not automatically be
17336      created.
17337     </para>
17338    </listitem>
17339
17340    <listitem>
17341     <para>
17342      A <command>SET</command> command inside an aborted transaction
17343      is now rolled back.
17344     </para>
17345    </listitem>
17346
17347    <listitem>
17348     <para>
17349      <command>COPY</command> no longer considers missing trailing
17350      columns to be null.  All columns need to be specified.
17351      (However, one can achieve a similar effect by specifying a
17352      column list in the <command>COPY</command> command.)
17353     </para>
17354    </listitem>
17355
17356    <listitem>
17357     <para>
17358      The data type <type>timestamp</type> is now equivalent to
17359      <type>timestamp without time zone</type>, instead of
17360      <type>timestamp with time zone</type>.
17361     </para>
17362    </listitem>
17363
17364    <listitem>
17365     <para>
17366      Pre-7.3 databases loaded into 7.3 will not have the new object
17367      dependencies for <type>serial</type> columns, unique
17368      constraints, and foreign keys. See the directory
17369      <filename>contrib/adddepend/</filename> for a detailed
17370      description and a script that will add such dependencies.
17371     </para>
17372    </listitem>
17373
17374    <listitem>
17375     <para>
17376      An empty string (<literal>''</literal>) is no longer allowed as
17377      the input into an integer field.  Formerly, it was silently
17378      interpreted as 0.
17379     </para>
17380    </listitem>
17381
17382   </itemizedlist>
17383  </sect2>
17384
17385  <sect2>
17386   <title>Changes</title>
17387
17388   <sect3>
17389    <title>Server Operation</title>
17390 <itemizedlist>
17391 <listitem><para>Add pg_locks view to show locks (Neil)</para></listitem>
17392 <listitem><para>Security fixes for password negotiation memory allocation (Neil)</para></listitem>
17393 <listitem><para>Remove support for version 0 FE/BE protocol (<productname>PostgreSQL</productname> 6.2 and earlier) (Tom)</para></listitem>
17394 <listitem><para>Reserve the last few backend slots for superusers, add parameter superuser_reserved_connections to control this (Nigel J. Andrews)</para></listitem>
17395 </itemizedlist>
17396   </sect3>
17397
17398   <sect3>
17399    <title>Performance</title>
17400 <itemizedlist>
17401 <listitem><para>Improve startup by calling localtime() only once (Tom)</para></listitem>
17402 <listitem><para>Cache system catalog information in flat files for faster startup (Tom)</para></listitem>
17403 <listitem><para>Improve caching of index information (Tom)</para></listitem>
17404 <listitem><para>Optimizer improvements (Tom, Fernando Nasser)</para></listitem>
17405 <listitem><para>Catalog caches now store failed lookups (Tom)</para></listitem>
17406 <listitem><para>Hash function improvements (Neil)</para></listitem>
17407 <listitem><para>Improve performance of query tokenization and network handling (Peter)</para></listitem>
17408 <listitem><para>Speed improvement for large object restore (Mario Weilguni)</para></listitem>
17409 <listitem><para>Mark expired index entries on first lookup, saving later heap fetches (Tom)</para></listitem>
17410 <listitem><para>Avoid excessive NULL bitmap padding (Manfred Koizar)</para></listitem>
17411 <listitem><para>Add BSD-licensed qsort() for Solaris, for performance (Bruce)</para></listitem>
17412 <listitem><para>Reduce per-row overhead by four bytes (Manfred Koizar)</para></listitem>
17413 <listitem><para>Fix GEQO optimizer bug (Neil Conway)</para></listitem>
17414 <listitem><para>Make WITHOUT OID actually save four bytes per row (Manfred Koizar)</para></listitem>
17415 <listitem><para>Add default_statistics_target variable to specify ANALYZE buckets (Neil)</para></listitem>
17416 <listitem><para>Use local buffer cache for temporary tables so no WAL overhead (Tom)</para></listitem>
17417 <listitem><para>Improve free space map performance on large tables (Stephen Marshall, Tom)</para></listitem>
17418 <listitem><para>Improved WAL write concurrency (Tom)</para></listitem>
17419 </itemizedlist>
17420   </sect3>
17421
17422   <sect3>
17423    <title>Privileges</title>
17424 <itemizedlist>
17425 <listitem><para>Add privileges on functions and procedural languages (Peter)</para></listitem>
17426 <listitem><para>Add OWNER to CREATE DATABASE so superusers can create databases on behalf of unprivileged users (Gavin Sherry, Tom)</para></listitem>
17427 <listitem><para>Add new object privilege bits EXECUTE and USAGE (Tom)</para></listitem>
17428 <listitem><para>Add SET SESSION AUTHORIZATION DEFAULT and RESET SESSION AUTHORIZATION (Tom)</para></listitem>
17429 <listitem><para>Allow functions to be executed with the privilege of the function owner (Peter)</para></listitem>
17430 </itemizedlist>
17431   </sect3>
17432
17433   <sect3>
17434    <title>Server Configuration</title>
17435 <itemizedlist>
17436 <listitem><para>Server log messages now tagged with LOG, not DEBUG (Bruce)</para></listitem>
17437 <listitem><para>Add user column to pg_hba.conf (Bruce)</para></listitem>
17438 <listitem><para>Have log_connections output two lines in log file (Tom)</para></listitem>
17439 <listitem><para>Remove debug_level from postgresql.conf, now server_min_messages (Bruce)</para></listitem>
17440 <listitem><para>New ALTER DATABASE/USER ... SET command for per-user/database initialization (Peter)</para></listitem>
17441 <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>
17442 <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>
17443 <listitem><para>Remove secondary password file capability and pg_password utility (Bruce)</para></listitem>
17444 <listitem><para>Add variable db_user_namespace for database-local user names (Bruce)</para></listitem>
17445 <listitem><para>SSL improvements (Bear Giles)</para></listitem>
17446 <listitem><para>Make encryption of stored passwords the default (Bruce)</para></listitem>
17447 <listitem><para>Allow pg_statistics to be reset by calling pg_stat_reset() (Christopher)</para></listitem>
17448 <listitem><para>Add log_duration parameter (Bruce)</para></listitem>
17449 <listitem><para>Rename debug_print_query to log_statement (Bruce)</para></listitem>
17450 <listitem><para>Rename show_query_stats to show_statement_stats (Bruce)</para></listitem>
17451 <listitem><para>Add param log_min_error_statement to print commands to logs on error (Gavin)</para></listitem>
17452 </itemizedlist>
17453   </sect3>
17454
17455   <sect3>
17456    <title>Queries</title>
17457 <itemizedlist>
17458 <listitem><para>Make cursors insensitive, meaning their contents do not change (Tom)</para></listitem>
17459 <listitem><para>Disable LIMIT #,# syntax; now only LIMIT # OFFSET # supported (Bruce)</para></listitem>
17460 <listitem><para>Increase identifier length to 63 (Neil, Bruce)</para></listitem>
17461 <listitem><para>UNION fixes for merging &gt;= 3 columns of different lengths (Tom)</para></listitem>
17462 <listitem><para>Add DEFAULT key word to INSERT, e.g., INSERT ... (..., DEFAULT, ...) (Rod)</para></listitem>
17463 <listitem><para>Allow views to have default values using ALTER COLUMN ... SET DEFAULT (Neil)</para></listitem>
17464 <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>
17465 <listitem><para>Fix for join aliases (Tom)</para></listitem>
17466 <listitem><para>Fix for FULL OUTER JOINs (Tom)</para></listitem>
17467 <listitem><para>Improve reporting of invalid identifier and location (Tom, Gavin)</para></listitem>
17468 <listitem><para>Fix OPEN cursor(args) (Tom)</para></listitem>
17469 <listitem><para>Allow 'ctid' to be used in a view and currtid(viewname) (Hiroshi)</para></listitem>
17470 <listitem><para>Fix for CREATE TABLE AS with UNION (Tom)</para></listitem>
17471 <listitem><para>SQL99 syntax improvements (Thomas)</para></listitem>
17472 <listitem><para>Add statement_timeout variable to cancel queries (Bruce)</para></listitem>
17473 <listitem><para>Allow prepared queries with PREPARE/EXECUTE (Neil)</para></listitem>
17474 <listitem><para>Allow FOR UPDATE to appear after LIMIT/OFFSET (Bruce)</para></listitem>
17475 <listitem><para>Add variable autocommit (Tom, David Van Wie)</para></listitem>
17476 </itemizedlist>
17477   </sect3>
17478
17479   <sect3>
17480    <title>Object Manipulation</title>
17481 <itemizedlist>
17482 <listitem><para>Make equals signs optional in CREATE DATABASE (Gavin Sherry)</para></listitem>
17483 <listitem><para>Make ALTER TABLE OWNER change index ownership too (Neil)</para></listitem>
17484 <listitem><para>New ALTER TABLE tabname ALTER COLUMN colname SET STORAGE controls TOAST storage, compression (John Gray)</para></listitem>
17485 <listitem><para>Add schema support, CREATE/DROP SCHEMA (Tom)</para></listitem>
17486 <listitem><para>Create schema for temporary tables (Tom)</para></listitem>
17487 <listitem><para>Add variable search_path for schema search (Tom)</para></listitem>
17488 <listitem><para>Add ALTER TABLE SET/DROP NOT NULL (Christopher)</para></listitem>
17489 <listitem><para>New CREATE FUNCTION volatility levels (Tom)</para></listitem>
17490 <listitem><para>Make rule names unique only per table (Tom)</para></listitem>
17491 <listitem><para>Add 'ON tablename' clause to DROP RULE and COMMENT ON RULE (Tom)</para></listitem>
17492 <listitem><para>Add ALTER TRIGGER RENAME (Joe)</para></listitem>
17493 <listitem><para>New current_schema() and current_schemas() inquiry functions (Tom)</para></listitem>
17494 <listitem><para>Allow functions to return multiple rows (table functions) (Joe)</para></listitem>
17495 <listitem><para>Make WITH optional in CREATE DATABASE, for consistency (Bruce)</para></listitem>
17496 <listitem><para>Add object dependency tracking (Rod, Tom)</para></listitem>
17497 <listitem><para>Add RESTRICT/CASCADE to DROP commands (Rod)</para></listitem>
17498 <listitem><para>Add ALTER TABLE DROP for non-CHECK CONSTRAINT (Rod)</para></listitem>
17499 <listitem><para>Autodestroy sequence on DROP of table with SERIAL (Rod)</para></listitem>
17500 <listitem><para>Prevent column dropping if column is used by foreign key (Rod)</para></listitem>
17501 <listitem><para>Automatically drop constraints/functions when object is dropped (Rod)</para></listitem>
17502 <listitem><para>Add CREATE/DROP OPERATOR CLASS (Bill Studenmund, Tom)</para></listitem>
17503 <listitem><para>Add ALTER TABLE DROP COLUMN (Christopher, Tom, Hiroshi)</para></listitem>
17504 <listitem><para>Prevent inherited columns from being removed or renamed (Alvaro Herrera)</para></listitem>
17505 <listitem><para>Fix foreign key constraints to not error on intermediate database states (Stephan)</para></listitem>
17506 <listitem><para>Propagate column or table renaming to foreign key constraints</para></listitem>
17507 <listitem><para>Add CREATE OR REPLACE VIEW (Gavin, Neil, Tom)</para></listitem>
17508 <listitem><para>Add CREATE OR REPLACE RULE (Gavin, Neil, Tom)</para></listitem>
17509 <listitem><para>Have rules execute alphabetically, returning more predictable values (Tom)</para></listitem>
17510 <listitem><para>Triggers are now fired in alphabetical order (Tom)</para></listitem>
17511 <listitem><para>Add /contrib/adddepend to handle pre-7.3 object dependencies (Rod)</para></listitem>
17512 <listitem><para>Allow better casting when inserting/updating values (Tom)</para></listitem>
17513 </itemizedlist>
17514   </sect3>
17515
17516   <sect3>
17517    <title>Utility Commands</title>
17518 <itemizedlist>
17519 <listitem><para>Have COPY TO output embedded carriage returns and newlines as \r and \n (Tom)</para></listitem>
17520 <listitem><para>Allow DELIMITER in COPY FROM to be 8-bit clean (Tatsuo)</para></listitem>
17521 <listitem><para>Make <application>pg_dump</> use ALTER TABLE ADD PRIMARY KEY, for performance (Neil)</para></listitem>
17522 <listitem><para>Disable brackets in multistatement rules (Bruce)</para></listitem>
17523 <listitem><para>Disable VACUUM from being called inside a function (Bruce)</para></listitem>
17524 <listitem><para>Allow dropdb and other scripts to use identifiers with spaces (Bruce)</para></listitem>
17525 <listitem><para>Restrict database comment changes to the current database</para></listitem>
17526 <listitem><para>Allow comments on operators, independent of the underlying function (Rod)</para></listitem>
17527 <listitem><para>Rollback SET commands in aborted transactions (Tom)</para></listitem>
17528 <listitem><para>EXPLAIN now outputs as a query (Tom)</para></listitem>
17529 <listitem><para>Display condition expressions and sort keys in EXPLAIN (Tom)</para></listitem>
17530 <listitem><para>Add 'SET LOCAL var = value' to set configuration variables for a single transaction (Tom)</para></listitem>
17531 <listitem><para>Allow ANALYZE to run in a transaction (Bruce)</para></listitem>
17532 <listitem><para>Improve COPY syntax using new WITH clauses, keep backward compatibility (Bruce)</para></listitem>
17533 <listitem><para>Fix <application>pg_dump</> to consistently output tags in non-ASCII dumps (Bruce)</para></listitem>
17534 <listitem><para>Make foreign key constraints clearer in dump file (Rod)</para></listitem>
17535 <listitem><para>Add COMMENT ON CONSTRAINT (Rod)</para></listitem>
17536 <listitem><para>Allow COPY TO/FROM to specify column names (Brent Verner)</para></listitem>
17537 <listitem><para>Dump UNIQUE and PRIMARY KEY constraints as ALTER TABLE (Rod)</para></listitem>
17538 <listitem><para>Have SHOW output a query result (Joe)</para></listitem>
17539 <listitem><para>Generate failure on short COPY lines rather than pad NULLs (Neil)</para></listitem>
17540 <listitem><para>Fix CLUSTER to preserve all table attributes (Alvaro Herrera)</para></listitem>
17541 <listitem><para>New pg_settings table to view/modify GUC settings (Joe)</para></listitem>
17542 <listitem><para>Add smart quoting, portability improvements to <application>pg_dump</> output (Peter)</para></listitem>
17543 <listitem><para>Dump serial columns out as SERIAL (Tom)</para></listitem>
17544 <listitem><para>Enable large file support, &gt;2G for <application>pg_dump</> (Peter, Philip Warner, Bruce)</para></listitem>
17545 <listitem><para>Disallow TRUNCATE on tables that are involved in referential constraints (Rod)</para></listitem>
17546 <listitem><para>Have TRUNCATE also auto-truncate the toast table of the relation (Tom)</para></listitem>
17547 <listitem><para>Add clusterdb utility that will auto-cluster an entire database based on previous CLUSTER operations (Alvaro Herrera)</para></listitem>
17548 <listitem><para>Overhaul pg_dumpall (Peter)</para></listitem>
17549 <listitem><para>Allow REINDEX of TOAST tables (Tom)</para></listitem>
17550 <listitem><para>Implemented START TRANSACTION, per SQL99 (Neil)</para></listitem>
17551 <listitem><para>Fix rare index corruption when a page split affects bulk delete (Tom)</para></listitem>
17552 <listitem><para>Fix ALTER TABLE ... ADD COLUMN for inheritance (Alvaro Herrera)</para></listitem>
17553 </itemizedlist>
17554   </sect3>
17555
17556   <sect3>
17557    <title>Data Types and Functions</title>
17558 <itemizedlist>
17559 <listitem><para>Fix factorial(0) to return 1 (Bruce)</para></listitem>
17560 <listitem><para>Date/time/timezone improvements (Thomas)</para></listitem>
17561 <listitem><para>Fix for array slice extraction (Tom)</para></listitem>
17562 <listitem><para>Fix extract/date_part to report proper microseconds for timestamp (Tatsuo)</para></listitem>
17563 <listitem><para>Allow text_substr() and bytea_substr() to read TOAST values more efficiently (John Gray)</para></listitem>
17564 <listitem><para>Add domain support (Rod)</para></listitem>
17565 <listitem><para>Make WITHOUT TIME ZONE the default for TIMESTAMP and TIME data types (Thomas)</para></listitem>
17566 <listitem><para>Allow alternate storage scheme of 64-bit integers for date/time types using --enable-integer-datetimes in configure (Thomas)</para></listitem>
17567 <listitem><para>Make timezone(timestamptz) return timestamp rather than a string (Thomas)</para></listitem>
17568 <listitem><para>Allow fractional seconds in date/time types for dates prior to 1BC (Thomas)</para></listitem>
17569 <listitem><para>Limit timestamp data types to 6 decimal places of precision (Thomas)</para></listitem>
17570 <listitem><para>Change timezone conversion functions from timetz() to timezone() (Thomas)</para></listitem>
17571 <listitem><para>Add configuration variables datestyle and timezone (Tom)</para></listitem>
17572 <listitem><para>Add OVERLAY(), which allows substitution of a substring in a string (Thomas)</para></listitem>
17573 <listitem><para>Add SIMILAR TO (Thomas, Tom)</para></listitem>
17574 <listitem><para>Add regular expression SUBSTRING(string FROM pat FOR escape) (Thomas)</para></listitem>
17575 <listitem><para>Add LOCALTIME and LOCALTIMESTAMP functions (Thomas)</para></listitem>
17576 <listitem><para>Add named composite types using CREATE TYPE typename AS (column) (Joe)</para></listitem>
17577 <listitem><para>Allow composite type definition in the table alias clause (Joe)</para></listitem>
17578 <listitem><para>Add new API to simplify creation of C language table functions (Joe)</para></listitem>
17579 <listitem><para>Remove ODBC-compatible empty parentheses from calls to SQL99 functions for which these parentheses do not match the standard (Thomas)</para></listitem>
17580 <listitem><para>Allow macaddr data type to accept 12 hex digits with no separators (Mike Wyer)</para></listitem>
17581 <listitem><para>Add CREATE/DROP CAST (Peter)</para></listitem>
17582 <listitem><para>Add IS DISTINCT FROM operator (Thomas)</para></listitem>
17583 <listitem><para>Add SQL99 TREAT() function, synonym for CAST() (Thomas)</para></listitem>
17584 <listitem><para>Add pg_backend_pid() to output backend pid (Bruce)</para></listitem>
17585 <listitem><para>Add IS OF / IS NOT OF type predicate (Thomas)</para></listitem>
17586 <listitem><para>Allow bit string constants without fully-specified length (Thomas)</para></listitem>
17587 <listitem><para>Allow conversion between 8-byte integers and bit strings (Thomas)</para></listitem>
17588 <listitem><para>Implement hex literal conversion to bit string literal (Thomas)</para></listitem>
17589 <listitem><para>Allow table functions to appear in the FROM clause (Joe)</para></listitem>
17590 <listitem><para>Increase maximum number of function parameters to 32 (Bruce)</para></listitem>
17591 <listitem><para>No longer automatically create index for SERIAL column (Tom)</para></listitem>
17592 <listitem><para>Add current_database() (Rod)</para></listitem>
17593 <listitem><para>Fix cash_words() to not overflow buffer (Tom)</para></listitem>
17594 <listitem><para>Add functions replace(), split_part(), to_hex() (Joe)</para></listitem>
17595 <listitem><para>Fix LIKE for bytea as a right-hand argument (Joe)</para></listitem>
17596 <listitem><para>Prevent crashes caused by SELECT cash_out(2) (Tom)</para></listitem>
17597 <listitem><para>Fix to_char(1,'FM999.99') to return a period (Karel)</para></listitem>
17598 <listitem><para>Fix trigger/type/language functions returning OPAQUE to return proper type (Tom)</para></listitem>
17599 </itemizedlist>
17600   </sect3>
17601
17602   <sect3>
17603    <title>Internationalization</title>
17604 <itemizedlist>
17605 <listitem><para>Add additional encodings: Korean (JOHAB), Thai (WIN874), Vietnamese (TCVN), Arabic (WIN1256), Simplified Chinese (GBK), Korean (UHC) (Eiji Tokuya)</para></listitem>
17606 <listitem><para>Enable locale support by default (Peter)</para></listitem>
17607 <listitem><para>Add locale variables (Peter)</para></listitem>
17608 <listitem><para>Escape byes &gt;= 0x7f for multibyte in PQescapeBytea/PQunescapeBytea (Tatsuo)</para></listitem>
17609 <listitem><para>Add locale awareness to regular expression character classes</para></listitem>
17610 <listitem><para>Enable multibyte support by default (Tatsuo)</para></listitem>
17611 <listitem><para>Add GB18030 multibyte support (Bill Huang)</para></listitem>
17612 <listitem><para>Add CREATE/DROP CONVERSION, allowing loadable encodings (Tatsuo, Kaori)</para></listitem>
17613 <listitem><para>Add pg_conversion table (Tatsuo)</para></listitem>
17614 <listitem><para>Add SQL99 CONVERT() function (Tatsuo)</para></listitem>
17615 <listitem><para>pg_dumpall, pg_controldata, and pg_resetxlog now national-language aware (Peter)</para></listitem>
17616 <listitem><para>New and updated translations</para></listitem>
17617 </itemizedlist>
17618   </sect3>
17619
17620   <sect3>
17621    <title>Server-side Languages</title>
17622 <itemizedlist>
17623 <listitem><para>Allow recursive SQL function (Peter)</para></listitem>
17624 <listitem><para>Change PL/Tcl build to use configured compiler and Makefile.shlib (Peter)</para></listitem>
17625 <listitem><para>Overhaul the PL/pgSQL FOUND variable to be more Oracle-compatible (Neil, Tom)</para></listitem>
17626 <listitem><para>Allow PL/pgSQL to handle quoted identifiers (Tom)</para></listitem>
17627 <listitem><para>Allow set-returning PL/pgSQL functions (Neil)</para></listitem>
17628 <listitem><para>Make PL/pgSQL schema-aware (Joe)</para></listitem>
17629 <listitem><para>Remove some memory leaks (Nigel J. Andrews, Tom)</para></listitem>
17630 </itemizedlist>
17631   </sect3>
17632
17633   <sect3>
17634    <title>psql</title>
17635 <itemizedlist>
17636 <listitem><para>Don't lowercase psql \connect database name for 7.2.0 compatibility (Tom)</para></listitem>
17637 <listitem><para>Add psql \timing to time user queries (Greg Sabino Mullane)</para></listitem>
17638 <listitem><para>Have psql \d show index information (Greg Sabino Mullane)</para></listitem>
17639 <listitem><para>New psql \dD shows domains (Jonathan Eisler)</para></listitem>
17640 <listitem><para>Allow psql to show rules on views (Paul ?)</para></listitem>
17641 <listitem><para>Fix for psql variable substitution (Tom)</para></listitem>
17642 <listitem><para>Allow psql \d to show temporary table structure (Tom)</para></listitem>
17643 <listitem><para>Allow psql \d to show foreign keys (Rod)</para></listitem>
17644 <listitem><para>Fix \? to honor \pset pager (Bruce)</para></listitem>
17645 <listitem><para>Have psql reports its version number on startup (Tom)</para></listitem>
17646 <listitem><para>Allow \copy to specify column names (Tom)</para></listitem>
17647 </itemizedlist>
17648   </sect3>
17649
17650   <sect3>
17651    <title>libpq</title>
17652 <itemizedlist>
17653 <listitem><para>Add ~/.pgpass to store host/user password combinations (Alvaro Herrera)</para></listitem>
17654 <listitem><para>Add PQunescapeBytea() function to libpq (Patrick Welche)</para></listitem>
17655 <listitem><para>Fix for sending large queries over non-blocking connections (Bernhard Herzog)</para></listitem>
17656 <listitem><para>Fix for libpq using timers on Win9X (David Ford)</para></listitem>
17657 <listitem><para>Allow libpq notify to handle servers with different-length identifiers (Tom)</para></listitem>
17658 <listitem><para>Add libpq PQescapeString() and PQescapeBytea() to Windows (Bruce)</para></listitem>
17659 <listitem><para>Fix for SSL with non-blocking connections (Jack Bates)</para></listitem>
17660 <listitem><para>Add libpq connection timeout parameter (Denis A Ustimenko)</para></listitem>
17661 </itemizedlist>
17662   </sect3>
17663
17664   <sect3>
17665    <title>JDBC</title>
17666 <itemizedlist>
17667 <listitem><para>Allow JDBC to compile with JDK 1.4 (Dave)</para></listitem>
17668 <listitem><para>Add JDBC 3 support (Barry)</para></listitem>
17669 <listitem><para>Allows JDBC to set loglevel by adding ?loglevel=X to the connection URL (Barry)</para></listitem>
17670 <listitem><para>Add Driver.info() message that prints out the version number (Barry)</para></listitem>
17671 <listitem><para>Add updateable result sets (Raghu Nidagal, Dave)</para></listitem>
17672 <listitem><para>Add support for callable statements (Paul Bethe)</para></listitem>
17673 <listitem><para>Add query cancel capability</para></listitem>
17674 <listitem><para>Add refresh row (Dave)</para></listitem>
17675 <listitem><para>Fix MD5 encryption handling for multibyte servers (Jun Kawai)</para></listitem>
17676 <listitem><para>Add support for prepared statements (Barry)</para></listitem>
17677 </itemizedlist>
17678   </sect3>
17679
17680   <sect3>
17681    <title>Miscellaneous Interfaces</title>
17682 <itemizedlist>
17683 <listitem><para>Fixed ECPG bug concerning octal numbers in single quotes (Michael)</para></listitem>
17684 <listitem><para>Move src/interfaces/libpgeasy to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
17685 <listitem><para>Improve Python interface (Elliot Lee, Andrew Johnson, Greg Copeland)</para></listitem>
17686 <listitem><para>Add libpgtcl connection close event (Gerhard Hintermayer)</para></listitem>
17687 <listitem><para>Move src/interfaces/libpq++ to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
17688 <listitem><para>Move src/interfaces/odbc to http://gborg.postgresql.org (Marc)</para></listitem>
17689 <listitem><para>Move src/interfaces/libpgeasy to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
17690 <listitem><para>Move src/interfaces/perl5 to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
17691 <listitem><para>Remove src/bin/pgaccess from main tree, now at http://www.pgaccess.org (Bruce)</para></listitem>
17692 <listitem><para>Add pg_on_connection_loss command to libpgtcl (Gerhard Hintermayer, Tom)</para></listitem>
17693 </itemizedlist>
17694   </sect3>
17695
17696   <sect3>
17697    <title>Source Code</title>
17698 <itemizedlist>
17699 <listitem><para>Fix for parallel make (Peter)</para></listitem>
17700 <listitem><para>AIX fixes for linking Tcl (Andreas Zeugswetter)</para></listitem>
17701 <listitem><para>Allow PL/Perl to build under Cygwin (Jason Tishler)</para></listitem>
17702 <listitem><para>Improve MIPS compiles (Peter, Oliver Elphick)</para></listitem>
17703 <listitem><para>Require Autoconf version 2.53 (Peter)</para></listitem>
17704 <listitem><para>Require readline and zlib by default in configure (Peter)</para></listitem>
17705 <listitem><para>Allow Solaris to use Intimate Shared Memory (ISM), for performance (Scott Brunza, P.J. Josh Rovero)</para></listitem>
17706 <listitem><para>Always enable syslog in compile, remove --enable-syslog option (Tatsuo)</para></listitem>
17707 <listitem><para>Always enable multibyte in compile, remove --enable-multibyte option (Tatsuo)</para></listitem>
17708 <listitem><para>Always enable locale in compile, remove --enable-locale option (Peter)</para></listitem>
17709 <listitem><para>Fix for Win9x DLL creation (Magnus Naeslund)</para></listitem>
17710 <listitem><para>Fix for link() usage by WAL code on Windows, BeOS (Jason Tishler)</para></listitem>
17711 <listitem><para>Add sys/types.h to c.h, remove from main files (Peter, Bruce)</para></listitem>
17712 <listitem><para>Fix AIX hang on SMP machines (Tomoyuki Niijima)</para></listitem>
17713 <listitem><para>AIX SMP hang fix (Tomoyuki Niijima)</para></listitem>
17714 <listitem><para>Fix pre-1970 date handling on newer glibc libraries (Tom)</para></listitem>
17715 <listitem><para>Fix PowerPC SMP locking (Tom)</para></listitem>
17716 <listitem><para>Prevent gcc -ffast-math from being used (Peter, Tom)</para></listitem>
17717 <listitem><para>Bison &gt;= 1.50 now required for developer builds</para></listitem>
17718 <listitem><para>Kerberos 5 support now builds with Heimdal (Peter)</para></listitem>
17719 <listitem><para>Add appendix in the User's Guide which lists SQL features (Thomas)</para></listitem>
17720 <listitem><para>Improve loadable module linking to use RTLD_NOW (Tom)</para></listitem>
17721 <listitem><para>New error levels WARNING, INFO, LOG, DEBUG[1-5] (Bruce)</para></listitem>
17722 <listitem><para>New src/port directory holds replaced libc functions (Peter, Bruce)</para></listitem>
17723 <listitem><para>New pg_namespace system catalog for schemas (Tom)</para></listitem>
17724 <listitem><para>Add pg_class.relnamespace for schemas (Tom)</para></listitem>
17725 <listitem><para>Add pg_type.typnamespace for schemas (Tom)</para></listitem>
17726 <listitem><para>Add pg_proc.pronamespace for schemas (Tom)</para></listitem>
17727 <listitem><para>Restructure aggregates to have pg_proc entries (Tom)</para></listitem>
17728 <listitem><para>System relations now have their own namespace, pg_* test not required (Fernando Nasser)</para></listitem>
17729 <listitem><para>Rename TOAST index names to be *_index rather than *_idx (Neil)</para></listitem>
17730 <listitem><para>Add namespaces for operators, opclasses (Tom)</para></listitem>
17731 <listitem><para>Add additional checks to server control file (Thomas)</para></listitem>
17732 <listitem><para>New Polish FAQ (Marcin Mazurek)</para></listitem>
17733 <listitem><para>Add Posix semaphore support (Tom)</para></listitem>
17734 <listitem><para>Document need for reindex (Bruce)</para></listitem>
17735 <listitem><para>Rename some internal identifiers to simplify Windows compile (Jan, Katherine Ward)</para></listitem>
17736 <listitem><para>Add documentation on computing disk space (Bruce)</para></listitem>
17737 <listitem><para>Remove KSQO from GUC (Bruce)</para></listitem>
17738 <listitem><para>Fix memory leak in rtree (Kenneth Been)</para></listitem>
17739 <listitem><para>Modify a few error messages for consistency (Bruce)</para></listitem>
17740 <listitem><para>Remove unused system table columns (Peter)</para></listitem>
17741 <listitem><para>Make system columns NOT NULL where appropriate (Tom)</para></listitem>
17742 <listitem><para>Clean up use of sprintf in favor of snprintf() (Neil, Jukka Holappa)</para></listitem>
17743 <listitem><para>Remove OPAQUE and create specific subtypes (Tom)</para></listitem>
17744 <listitem><para>Cleanups in array internal handling (Joe, Tom)</para></listitem>
17745 <listitem><para>Disallow pg_atoi('') (Bruce)</para></listitem>
17746 <listitem><para>Remove parameter wal_files because WAL files are now recycled (Bruce)</para></listitem>
17747 <listitem><para>Add version numbers to heap pages (Tom)</para></listitem>
17748 </itemizedlist>
17749   </sect3>
17750
17751   <sect3>
17752    <title>Contrib</title>
17753 <itemizedlist>
17754 <listitem><para>Allow inet arrays in /contrib/array (Neil)</para></listitem>
17755 <listitem><para>GiST fixes (Teodor Sigaev, Neil)</para></listitem>
17756 <listitem><para>Upgrade /contrib/mysql</para></listitem>
17757 <listitem><para>Add /contrib/dbsize which shows table sizes without vacuum (Peter)</para></listitem>
17758 <listitem><para>Add /contrib/intagg, integer aggregator routines (mlw)</para></listitem>
17759 <listitem><para>Improve /contrib/oid2name (Neil, Bruce)</para></listitem>
17760 <listitem><para>Improve /contrib/tsearch (Oleg, Teodor Sigaev)</para></listitem>
17761 <listitem><para>Cleanups of /contrib/rserver (Alexey V. Borzov)</para></listitem>
17762 <listitem><para>Update /contrib/oracle conversion utility (Gilles Darold)</para></listitem>
17763 <listitem><para>Update /contrib/dblink (Joe)</para></listitem>
17764 <listitem><para>Improve options supported by /contrib/vacuumlo (Mario Weilguni)</para></listitem>
17765 <listitem><para>Improvements to /contrib/intarray (Oleg, Teodor Sigaev, Andrey Oktyabrski)</para></listitem>
17766 <listitem><para>Add /contrib/reindexdb utility (Shaun Thomas)</para></listitem>
17767 <listitem><para>Add indexing to /contrib/isbn_issn (Dan Weston)</para></listitem>
17768 <listitem><para>Add /contrib/dbmirror (Steven Singer)</para></listitem>
17769 <listitem><para>Improve /contrib/pgbench (Neil)</para></listitem>
17770 <listitem><para>Add /contrib/tablefunc table function examples (Joe)</para></listitem>
17771 <listitem><para>Add /contrib/ltree data type for tree structures (Teodor Sigaev, Oleg Bartunov)</para></listitem>
17772 <listitem><para>Move /contrib/pg_controldata, pg_resetxlog into main tree (Bruce)</para></listitem>
17773 <listitem><para>Fixes to /contrib/cube (Bruno Wolff)</para></listitem>
17774 <listitem><para>Improve /contrib/fulltextindex (Christopher)</para></listitem>
17775 </itemizedlist>
17776   </sect3>
17777
17778  </sect2>
17779 </sect1>
17780
17781  <sect1 id="release-7-2-8">
17782   <title>Release 7.2.8</title>
17783
17784   <note>
17785   <title>Release date</title>
17786   <simpara>2005-05-09</simpara>
17787   </note>
17788
17789   <para>
17790    This release contains a variety of fixes from 7.2.7, including one
17791    security-related issue.
17792   </para>
17793
17794   <sect2>
17795    <title>Migration to Version 7.2.8</title>
17796
17797    <para>
17798     A dump/restore is not required for those running 7.2.X.
17799    </para>
17800   </sect2>
17801
17802   <sect2>
17803    <title>Changes</title>
17804
17805 <itemizedlist>
17806 <listitem><para>Repair ancient race condition that allowed a transaction to be
17807 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
17808 than for other purposes</para>
17809 <para>This is an extremely serious bug since it could lead to apparent
17810 data inconsistencies being briefly visible to applications.</para></listitem>
17811 <listitem><para>Repair race condition between relation extension and
17812 VACUUM</para>
17813 <para>This could theoretically have caused loss of a page's worth of
17814 freshly-inserted data, although the scenario seems of very low probability.
17815 There are no known cases of it having caused more than an Assert failure.
17816 </para></listitem>
17817 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
17818 <type>TIME WITH TIME ZONE</> values</para></listitem>
17819 <listitem><para>Additional buffer overrun checks in plpgsql
17820 (Neil)</para></listitem>
17821 <listitem><para>Fix pg_dump to dump index names and trigger names containing
17822 <literal>%</> correctly (Neil)</para></listitem>
17823 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
17824 month-related formats</para></listitem>
17825 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
17826 (Marko Kreen)</para></listitem>
17827 </itemizedlist>
17828
17829  </sect2>
17830 </sect1>
17831
17832  <sect1 id="release-7-2-7">
17833   <title>Release 7.2.7</title>
17834
17835   <note>
17836   <title>Release date</title>
17837   <simpara>2005-01-31</simpara>
17838   </note>
17839
17840   <para>
17841    This release contains a variety of fixes from 7.2.6, including several
17842    security-related issues.
17843   </para>
17844
17845   <sect2>
17846    <title>Migration to Version 7.2.7</title>
17847
17848    <para>
17849     A dump/restore is not required for those running 7.2.X.
17850    </para>
17851   </sect2>
17852
17853   <sect2>
17854    <title>Changes</title>
17855
17856 <itemizedlist>
17857 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
17858 <para>
17859 On platforms that will automatically execute initialization functions of a
17860 shared library (this includes at least Windows and ELF-based Unixen),
17861 <command>LOAD</> can be used to make the server execute arbitrary code.
17862 Thanks to NGS Software for reporting this.</para></listitem>
17863 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
17864 Jurka)</para></listitem>
17865 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
17866 many parameters (Neil)</para></listitem>
17867 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
17868 <para>
17869 The result of the join was mistakenly supposed to be sorted the same as the
17870 left input.  This could not only deliver mis-sorted output to the user, but
17871 in case of nested merge joins could give outright wrong answers.
17872 </para></listitem>
17873 <listitem><para>Fix display of negative intervals in SQL and GERMAN
17874 datestyles</para></listitem>
17875 </itemizedlist>
17876
17877  </sect2>
17878 </sect1>
17879
17880  <sect1 id="release-7-2-6">
17881   <title>Release 7.2.6</title>
17882
17883   <note>
17884   <title>Release date</title>
17885   <simpara>2004-10-22</simpara>
17886   </note>
17887
17888   <para>
17889    This release contains a variety of fixes from 7.2.5.
17890   </para>
17891
17892
17893   <sect2>
17894    <title>Migration to Version 7.2.6</title>
17895
17896    <para>
17897     A dump/restore is not required for those running 7.2.X.
17898    </para>
17899   </sect2>
17900
17901   <sect2>
17902    <title>Changes</title>
17903
17904 <itemizedlist>
17905 <listitem><para>Repair possible failure to update hint bits on disk</para>
17906 <para>
17907 Under rare circumstances this oversight could lead to
17908 <quote>could not access transaction status</> failures, which qualifies
17909 it as a potential-data-loss bug.
17910 </para></listitem>
17911 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
17912 <para>
17913 Very large left joins using a hash join plan could fail to output unmatched
17914 left-side rows given just the right data distribution.
17915 </para></listitem>
17916 <listitem><para>Disallow running pg_ctl as root</para>
17917 <para>
17918 This is to guard against any possible security issues.
17919 </para></listitem>
17920 <listitem><para>Avoid using temp files in /tmp in make_oidjoins_check</para>
17921 <para>
17922 This has been reported as a security issue, though it's hardly worthy of
17923 concern since there is no reason for non-developers to use this script anyway.
17924 </para></listitem>
17925 <listitem><para>Update to newer versions of Bison</para></listitem>
17926 </itemizedlist>
17927
17928  </sect2>
17929 </sect1>
17930
17931  <sect1 id="release-7-2-5">
17932   <title>Release 7.2.5</title>
17933
17934   <note>
17935   <title>Release date</title>
17936   <simpara>2004-08-16</simpara>
17937   </note>
17938
17939   <para>
17940    This release contains a variety of fixes from 7.2.4.
17941   </para>
17942
17943
17944   <sect2>
17945    <title>Migration to Version 7.2.5</title>
17946
17947    <para>
17948     A dump/restore is not required for those running 7.2.X.
17949    </para>
17950   </sect2>
17951
17952   <sect2>
17953    <title>Changes</title>
17954
17955 <itemizedlist>
17956 <listitem><para>Prevent possible loss of committed transactions during crash</para>
17957 <para>
17958 Due to insufficient interlocking between transaction commit and checkpointing,
17959 it was possible for transactions committed just before the most recent
17960 checkpoint to be lost, in whole or in part, following a database crash and
17961 restart.  This is a serious bug that has existed
17962 since <productname>PostgreSQL</productname> 7.1.
17963 </para></listitem>
17964 <listitem><para>Fix corner case for btree search in parallel with first root page split</para></listitem>
17965 <listitem><para>Fix buffer overrun in <function>to_ascii</function> (Guido Notari)</para></listitem>
17966 <listitem><para>Fix core dump in deadlock detection on machines where char is unsigned</para></listitem>
17967 <listitem><para>Fix failure to respond to <command>pg_ctl stop -m fast</command> after Async_NotifyHandler runs</para></listitem>
17968 <listitem><para>Repair memory leaks in pg_dump</para></listitem>
17969 <listitem><para>Avoid conflict with system definition of <function>isblank()</function> function or macro</para></listitem>
17970 </itemizedlist>
17971  </sect2>
17972 </sect1>
17973
17974 <sect1 id="release-7-2-4">
17975  <title>Release 7.2.4</title>
17976
17977  <note>
17978   <title>Release date</title>
17979   <simpara>2003-01-30</simpara>
17980  </note>
17981
17982  <para>
17983   This release contains a variety of fixes for version 7.2.3,
17984   including fixes to prevent possible data loss.
17985  </para>
17986
17987  <sect2>
17988   <title>Migration to Version 7.2.4</title>
17989
17990   <para>
17991    A dump/restore is <emphasis>not</emphasis> required for those
17992    running version 7.2.*.
17993   </para>
17994  </sect2>
17995
17996  <sect2>
17997   <title>Changes</title>
17998
17999 <itemizedlist>
18000 <listitem><para>Fix some additional cases of VACUUM "No one parent tuple was found" error</para></listitem>
18001 <listitem><para>Prevent VACUUM from being called inside a function  (Bruce)</para></listitem>
18002 <listitem><para>Ensure pg_clog updates are sync'd to disk before marking checkpoint complete</para></listitem>
18003 <listitem><para>Avoid integer overflow during large hash joins</para></listitem>
18004 <listitem><para>Make GROUP commands work when pg_group.grolist is large enough to be toasted</para></listitem>
18005 <listitem><para>Fix errors in datetime tables; some timezone names weren't being recognized</para></listitem>
18006 <listitem><para>Fix integer overflows in circle_poly(), path_encode(), path_add()  (Neil)</para></listitem>
18007 <listitem><para>Repair long-standing logic errors in lseg_eq(), lseg_ne(), lseg_center()</para></listitem>
18008 </itemizedlist>
18009  </sect2>
18010 </sect1>
18011
18012
18013 <sect1 id="release-7-2-3">
18014  <title>Release 7.2.3</title>
18015
18016  <note>
18017   <title>Release date</title>
18018   <simpara>2002-10-01</simpara>
18019  </note>
18020
18021  <para>
18022   This release contains a variety of fixes for version 7.2.2,
18023   including fixes to prevent possible data loss.
18024  </para>
18025
18026  <sect2>
18027   <title>Migration to Version 7.2.3</title>
18028
18029   <para>
18030    A dump/restore is <emphasis>not</emphasis> required for those
18031    running version 7.2.*.
18032   </para>
18033  </sect2>
18034
18035  <sect2>
18036   <title>Changes</title>
18037
18038 <itemizedlist>
18039 <listitem><para>Prevent possible compressed transaction log loss (Tom)</para></listitem>
18040 <listitem><para>Prevent non-superuser from increasing most recent vacuum info (Tom)</para></listitem>
18041 <listitem><para>Handle pre-1970 date values in newer versions of glibc (Tom)</para></listitem>
18042 <listitem><para>Fix possible hang during server shutdown</para></listitem>
18043 <listitem><para>Prevent spinlock hangs on SMP PPC machines (Tomoyuki Niijima)</para></listitem>
18044 <listitem><para>Fix <application>pg_dump</> to properly dump FULL JOIN USING (Tom)</para></listitem>
18045 </itemizedlist>
18046  </sect2>
18047 </sect1>
18048
18049
18050 <sect1 id="release-7-2-2">
18051  <title>Release 7.2.2</title>
18052
18053  <note>
18054   <title>Release date</title>
18055   <simpara>2002-08-23</simpara>
18056  </note>
18057
18058  <para>
18059   This release contains a variety of fixes for version 7.2.1.
18060  </para>
18061
18062  <sect2>
18063   <title>Migration to Version 7.2.2</title>
18064
18065   <para>
18066    A dump/restore is <emphasis>not</emphasis> required for those
18067    running version 7.2.*.
18068   </para>
18069  </sect2>
18070
18071  <sect2>
18072   <title>Changes</title>
18073
18074 <itemizedlist>
18075 <listitem><para>Allow EXECUTE of "CREATE TABLE AS ... SELECT" in PL/pgSQL (Tom)</para></listitem>
18076 <listitem><para>Fix for compressed transaction log id wraparound (Tom)</para></listitem>
18077 <listitem><para>Fix PQescapeBytea/PQunescapeBytea so that they handle bytes &gt; 0x7f (Tatsuo)</para></listitem>
18078 <listitem><para>Fix for psql and <application>pg_dump</> crashing when invoked with non-existent long options (Tatsuo)</para></listitem>
18079 <listitem><para>Fix crash when invoking geometric operators (Tom)</para></listitem>
18080 <listitem><para>Allow OPEN cursor(args) (Tom)</para></listitem>
18081 <listitem><para>Fix for rtree_gist index build (Teodor)</para></listitem>
18082 <listitem><para>Fix for dumping user-defined aggregates (Tom)</para></listitem>
18083 <listitem><para>contrib/intarray fixes (Oleg)</para></listitem>
18084 <listitem><para>Fix for complex UNION/EXCEPT/INTERSECT queries using parens (Tom)</para></listitem>
18085 <listitem><para>Fix to pg_convert (Tatsuo)</para></listitem>
18086 <listitem><para>Fix for crash with long DATA strings (Thomas, Neil)</para></listitem>
18087 <listitem><para>Fix for repeat(), lpad(), rpad() and long strings (Neil)</para></listitem>
18088 </itemizedlist>
18089  </sect2>
18090 </sect1>
18091
18092
18093 <sect1 id="release-7-2-1">
18094  <title>Release 7.2.1</title>
18095
18096  <note>
18097   <title>Release date</title>
18098   <simpara>2002-03-21</simpara>
18099  </note>
18100
18101  <para>
18102   This release contains a variety of fixes for version 7.2.
18103  </para>
18104
18105  <sect2>
18106   <title>Migration to Version 7.2.1</title>
18107
18108   <para>
18109    A dump/restore is <emphasis>not</emphasis> required for those
18110    running version 7.2.
18111   </para>
18112  </sect2>
18113
18114  <sect2>
18115   <title>Changes</title>
18116
18117 <itemizedlist>
18118 <listitem><para>Ensure that sequence counters do not go backwards after a crash (Tom)</para></listitem>
18119 <listitem><para>Fix pgaccess kanji-conversion key binding (Tatsuo)</para></listitem>
18120 <listitem><para>Optimizer improvements (Tom)</para></listitem>
18121 <listitem><para>Cash I/O improvements (Tom)</para></listitem>
18122 <listitem><para>New Russian FAQ</para></listitem>
18123 <listitem><para>Compile fix for missing AuthBlockSig (Heiko)</para></listitem>
18124 <listitem><para>Additional time zones and time zone fixes (Thomas)</para></listitem>
18125 <listitem><para>Allow psql \connect to handle mixed case database and user names (Tom)</para></listitem>
18126 <listitem><para>Return proper OID on command completion even with ON INSERT rules (Tom)</para></listitem>
18127 <listitem><para>Allow COPY FROM to use 8-bit DELIMITERS (Tatsuo)</para></listitem>
18128 <listitem><para>Fix bug in extract/date_part for milliseconds/microseconds (Tatsuo)</para></listitem>
18129 <listitem><para>Improve handling of multiple UNIONs with different lengths (Tom)</para></listitem>
18130 <listitem><para>contrib/btree_gist improvements (Teodor Sigaev)</para></listitem>
18131 <listitem><para>contrib/tsearch dictionary improvements, see README.tsearch for an additional installation step (Thomas T. Thai, Teodor Sigaev)</para></listitem>
18132 <listitem><para>Fix for array subscripts handling (Tom)</para></listitem>
18133 <listitem><para>Allow EXECUTE of "CREATE TABLE AS ... SELECT" in PL/pgSQL (Tom)</para></listitem>
18134 </itemizedlist>
18135  </sect2>
18136 </sect1>
18137
18138
18139 <sect1 id="release-7-2">
18140  <title>Release 7.2</title>
18141
18142  <note>
18143   <title>Release date</title>
18144   <simpara>2002-02-04</simpara>
18145  </note>
18146
18147  <sect2>
18148   <title>Overview</title>
18149
18150   <para>
18151    This release improves <productname>PostgreSQL</> for use in
18152    high-volume applications.
18153   </para>
18154
18155   <para>
18156    Major changes in this release:
18157   </para>
18158
18159   <variablelist>
18160    <varlistentry>
18161     <term>VACUUM</term>
18162     <listitem>
18163      <para>
18164       Vacuuming no longer locks tables, thus allowing normal user
18165       access during the vacuum.  A new <command>VACUUM FULL</>
18166       command does old-style vacuum by locking the table and
18167       shrinking the on-disk copy of the table.
18168      </para>
18169     </listitem>
18170    </varlistentry>
18171
18172    <varlistentry>
18173     <term>Transactions</term>
18174     <listitem>
18175      <para>
18176       There is no longer a problem with installations that exceed
18177       four billion transactions.
18178      </para>
18179     </listitem>
18180    </varlistentry>
18181
18182    <varlistentry>
18183     <term>OIDs</term>
18184     <listitem>
18185      <para>
18186       OIDs are now optional.  Users can now create tables without
18187       OIDs for cases where OID usage is excessive.
18188      </para>
18189     </listitem>
18190    </varlistentry>
18191
18192    <varlistentry>
18193     <term>Optimizer</term>
18194     <listitem>
18195      <para>
18196       The system now computes histogram column statistics during
18197       <command>ANALYZE</>, allowing much better optimizer choices.
18198      </para>
18199     </listitem>
18200    </varlistentry>
18201
18202    <varlistentry>
18203     <term>Security</term>
18204     <listitem>
18205      <para>
18206       A new MD5 encryption option allows more secure storage and
18207       transfer of passwords.  A new Unix-domain socket
18208       authentication option is available on Linux and BSD systems.
18209      </para>
18210     </listitem>
18211    </varlistentry>
18212
18213    <varlistentry>
18214     <term>Statistics</term>
18215     <listitem>
18216      <para>
18217       Administrators can use the new table access statistics module
18218       to get fine-grained information about table and index usage.
18219      </para>
18220     </listitem>
18221    </varlistentry>
18222
18223    <varlistentry>
18224     <term>Internationalization</term>
18225     <listitem>
18226      <para>
18227       Program and library messages can now be displayed in several
18228       languages.
18229      </para>
18230     </listitem>
18231    </varlistentry>
18232
18233   </variablelist>
18234  </sect2>
18235
18236  <sect2>
18237   <title>Migration to Version 7.2</title>
18238
18239   <para>
18240    A dump/restore using <command>pg_dump</command> is required for
18241    those wishing to migrate data from any previous release.
18242   </para>
18243
18244   <para>
18245    Observe the following incompatibilities:
18246   </para>
18247
18248   <itemizedlist>
18249    <listitem>
18250     <para>
18251      The semantics of the <command>VACUUM</command> command have
18252      changed in this release.  You might wish to update your
18253      maintenance procedures accordingly.
18254     </para>
18255    </listitem>
18256
18257    <listitem>
18258     <para>
18259      In this release, comparisons using <literal>= NULL</literal>
18260      will always return false (or NULL, more precisely).  Previous
18261      releases automatically transformed this syntax to <literal>IS
18262      NULL</literal>.  The old behavior can be re-enabled using a
18263      <filename>postgresql.conf</filename> parameter.
18264     </para>
18265    </listitem>
18266
18267    <listitem>
18268     <para>
18269      The <filename>pg_hba.conf</> and <filename>pg_ident.conf</>
18270      configuration is now only reloaded after receiving a
18271      <systemitem>SIGHUP</> signal, not with each connection.
18272     </para>
18273    </listitem>
18274
18275    <listitem>
18276     <para>
18277      The function <filename>octet_length()</> now returns the uncompressed data length.
18278     </para>
18279    </listitem>
18280
18281    <listitem>
18282     <para>
18283      The date/time value <literal>'current'</literal> is no longer
18284      available.  You will need to rewrite your applications.
18285     </para>
18286    </listitem>
18287
18288    <listitem>
18289     <para>
18290      The <literal>timestamp()</literal>, <literal>time()</literal>,
18291      and <literal>interval()</literal> functions are no longer
18292      available.  Instead of <literal>timestamp()</literal>, use
18293      <literal>timestamp 'string'</literal> or <literal>CAST</literal>.
18294     </para>
18295    </listitem>
18296
18297   </itemizedlist>
18298
18299   <para>
18300    The <literal>SELECT ... LIMIT #,#</literal> syntax will be removed
18301    in the next release. You should change your queries to use
18302    separate LIMIT and OFFSET clauses, e.g. <literal>LIMIT 10 OFFSET
18303    20</literal>.
18304   </para>
18305  </sect2>
18306
18307  <sect2>
18308   <title>Changes</title>
18309
18310   <sect3>
18311    <title>Server Operation</title>
18312 <itemizedlist>
18313 <listitem><para>Create temporary files in a separate directory (Bruce)</para></listitem>
18314 <listitem><para>Delete orphaned temporary files on postmaster startup (Bruce)</para></listitem>
18315 <listitem><para>Added unique indexes to some system tables (Tom)</para></listitem>
18316 <listitem><para>System table operator reorganization (Oleg Bartunov, Teodor Sigaev, Tom)</para></listitem>
18317 <listitem><para>Renamed pg_log to pg_clog (Tom)</para></listitem>
18318 <listitem><para>Enable SIGTERM, SIGQUIT to kill backends (Jan)</para></listitem>
18319 <listitem><para>Removed compile-time limit on number of backends (Tom)</para></listitem>
18320 <listitem><para>Better cleanup for semaphore resource failure (Tatsuo, Tom)</para></listitem>
18321 <listitem><para>Allow safe transaction ID wraparound (Tom)</para></listitem>
18322 <listitem><para>Removed OIDs from some system tables (Tom)</para></listitem>
18323 <listitem><para>Removed "triggered data change violation" error check (Tom)</para></listitem>
18324 <listitem><para>SPI portal creation of prepared/saved plans (Jan)</para></listitem>
18325 <listitem><para>Allow SPI column functions to work for system columns (Tom)</para></listitem>
18326 <listitem><para>Long value compression improvement (Tom)</para></listitem>
18327 <listitem><para>Statistics collector for table, index access (Jan)</para></listitem>
18328 <listitem><para>Truncate extra-long sequence names to a reasonable value (Tom)</para></listitem>
18329 <listitem><para>Measure transaction times in milliseconds (Thomas)</para></listitem>
18330 <listitem><para>Fix TID sequential scans (Hiroshi)</para></listitem>
18331 <listitem><para>Superuser ID now fixed at 1 (Peter E)</para></listitem>
18332 <listitem><para>New pg_ctl "reload" option (Tom)</para></listitem>
18333 </itemizedlist>
18334   </sect3>
18335
18336   <sect3>
18337    <title>Performance</title>
18338 <itemizedlist>
18339 <listitem><para>Optimizer improvements (Tom)</para></listitem>
18340 <listitem><para>New histogram column statistics for optimizer (Tom)</para></listitem>
18341 <listitem><para>Reuse write-ahead log files rather than discarding them (Tom)</para></listitem>
18342 <listitem><para>Cache improvements (Tom)</para></listitem>
18343 <listitem><para>IS NULL, IS NOT NULL optimizer improvement (Tom)</para></listitem>
18344 <listitem><para>Improve lock manager to reduce lock contention (Tom)</para></listitem>
18345 <listitem><para>Keep relcache entries for index access support functions (Tom)</para></listitem>
18346 <listitem><para>Allow better selectivity with NaN and infinities in NUMERIC (Tom)</para></listitem>
18347 <listitem><para>R-tree performance improvements (Kenneth Been)</para></listitem>
18348 <listitem><para>B-tree splits more efficient (Tom)</para></listitem>
18349 </itemizedlist>
18350   </sect3>
18351
18352   <sect3>
18353    <title>Privileges</title>
18354 <itemizedlist>
18355 <listitem><para>Change UPDATE, DELETE privileges to be distinct (Peter E)</para></listitem>
18356 <listitem><para>New REFERENCES, TRIGGER privileges (Peter E)</para></listitem>
18357 <listitem><para>Allow GRANT/REVOKE to/from more than one user at a time (Peter E)</para></listitem>
18358 <listitem><para>New has_table_privilege() function (Joe Conway)</para></listitem>
18359 <listitem><para>Allow non-superuser to vacuum database (Tom)</para></listitem>
18360 <listitem><para>New SET SESSION AUTHORIZATION command (Peter E)</para></listitem>
18361 <listitem><para>Fix bug in privilege modifications on newly created tables (Tom)</para></listitem>
18362 <listitem><para>Disallow access to pg_statistic for non-superuser, add user-accessible views (Tom)</para></listitem>
18363 </itemizedlist>
18364   </sect3>
18365
18366   <sect3>
18367    <title>Client Authentication</title>
18368 <itemizedlist>
18369 <listitem><para>Fork postmaster before doing authentication to prevent hangs (Peter E)</para></listitem>
18370 <listitem><para>Add ident authentication over Unix domain sockets on Linux, *BSD (Helge Bahmann, Oliver Elphick, Teodor Sigaev, Bruce)</para></listitem>
18371 <listitem><para>Add a password authentication method that uses MD5 encryption (Bruce)</para></listitem>
18372 <listitem><para>Allow encryption of stored passwords using MD5 (Bruce)</para></listitem>
18373 <listitem><para>PAM authentication (Dominic J. Eidson)</para></listitem>
18374 <listitem><para>Load pg_hba.conf and pg_ident.conf only on startup and SIGHUP (Bruce)</para></listitem>
18375 </itemizedlist>
18376   </sect3>
18377
18378   <sect3>
18379    <title>Server Configuration</title>
18380 <itemizedlist>
18381 <listitem><para>Interpretation of some time zone abbreviations as Australian rather than North American now settable at run time (Bruce)</para></listitem>
18382 <listitem><para>New parameter to set default transaction isolation level (Peter E)</para></listitem>
18383 <listitem><para>New parameter to enable conversion of "expr = NULL" into "expr IS NULL", off by default (Peter E)</para></listitem>
18384 <listitem><para>New parameter to control memory usage by VACUUM (Tom)</para></listitem>
18385 <listitem><para>New parameter to set client authentication timeout (Tom)</para></listitem>
18386 <listitem><para>New parameter to set maximum number of open files (Tom)</para></listitem>
18387 </itemizedlist>
18388   </sect3>
18389
18390   <sect3>
18391    <title>Queries</title>
18392 <itemizedlist>
18393 <listitem><para>Statements added by INSERT rules now execute after the INSERT (Jan)</para></listitem>
18394 <listitem><para>Prevent unadorned relation names in target list (Bruce)</para></listitem>
18395 <listitem><para>NULLs now sort after all normal values in ORDER BY (Tom)</para></listitem>
18396 <listitem><para>New IS UNKNOWN, IS NOT UNKNOWN Boolean tests (Tom)</para></listitem>
18397 <listitem><para>New SHARE UPDATE EXCLUSIVE lock mode (Tom)</para></listitem>
18398 <listitem><para>New EXPLAIN ANALYZE command that shows run times and row counts (Martijn van Oosterhout)</para></listitem>
18399 <listitem><para>Fix problem with LIMIT and subqueries (Tom)</para></listitem>
18400 <listitem><para>Fix for LIMIT, DISTINCT ON pushed into subqueries (Tom)</para></listitem>
18401 <listitem><para>Fix nested EXCEPT/INTERSECT (Tom)</para></listitem>
18402 </itemizedlist>
18403   </sect3>
18404
18405   <sect3>
18406    <title>Schema Manipulation</title>
18407 <itemizedlist>
18408 <listitem><para>Fix SERIAL in temporary tables (Bruce)</para></listitem>
18409 <listitem><para>Allow temporary sequences (Bruce)</para></listitem>
18410 <listitem><para>Sequences now use int8 internally (Tom)</para></listitem>
18411 <listitem><para>New SERIAL8 creates int8 columns with sequences, default still SERIAL4 (Tom)</para></listitem>
18412 <listitem><para>Make OIDs optional using WITHOUT OIDS (Tom)</para></listitem>
18413 <listitem><para>Add %TYPE syntax to CREATE TYPE (Ian Lance Taylor)</para></listitem>
18414 <listitem><para>Add ALTER TABLE / DROP CONSTRAINT for CHECK constraints (Christopher Kings-Lynne)</para></listitem>
18415 <listitem><para>New CREATE OR REPLACE FUNCTION to alter existing function (preserving the function OID) (Gavin Sherry)</para></listitem>
18416 <listitem><para>Add ALTER TABLE / ADD [ UNIQUE | PRIMARY ] (Christopher Kings-Lynne)</para></listitem>
18417 <listitem><para>Allow column renaming in views</para></listitem>
18418 <listitem><para>Make ALTER TABLE / RENAME COLUMN update column names of indexes (Brent Verner)</para></listitem>
18419 <listitem><para>Fix for ALTER TABLE / ADD CONSTRAINT ... CHECK with inherited tables (Stephan Szabo)</para></listitem>
18420 <listitem><para>ALTER TABLE RENAME update foreign-key trigger arguments correctly (Brent Verner)</para></listitem>
18421 <listitem><para>DROP AGGREGATE and COMMENT ON AGGREGATE now accept an aggtype (Tom)</para></listitem>
18422 <listitem><para>Add automatic return type data casting for SQL functions (Tom)</para></listitem>
18423 <listitem><para>Allow GiST indexes to handle NULLs and multikey indexes (Oleg Bartunov, Teodor Sigaev, Tom)</para></listitem>
18424 <listitem><para>Enable partial indexes (Martijn van Oosterhout)</para></listitem>
18425 </itemizedlist>
18426   </sect3>
18427
18428   <sect3>
18429    <title>Utility Commands</title>
18430 <itemizedlist>
18431 <listitem><para>Add RESET ALL, SHOW ALL (Marko Kreen)</para></listitem>
18432 <listitem><para>CREATE/ALTER USER/GROUP now allow options in any order (Vince)</para></listitem>
18433 <listitem><para>Add LOCK A, B, C functionality (Neil Padgett)</para></listitem>
18434 <listitem><para>New ENCRYPTED/UNENCRYPTED option to CREATE/ALTER USER (Bruce)</para></listitem>
18435 <listitem><para>New light-weight VACUUM does not lock table; old semantics are available as VACUUM FULL (Tom)</para></listitem>
18436 <listitem><para>Disable COPY TO/FROM on views (Bruce)</para></listitem>
18437 <listitem><para>COPY DELIMITERS string must be exactly one character (Tom)</para></listitem>
18438 <listitem><para>VACUUM warning about index tuples fewer than heap now only appears when appropriate (Martijn van Oosterhout)</para></listitem>
18439 <listitem><para>Fix privilege checks for CREATE INDEX (Tom)</para></listitem>
18440 <listitem><para>Disallow inappropriate use of CREATE/DROP INDEX/TRIGGER/VIEW (Tom)</para></listitem>
18441 </itemizedlist>
18442   </sect3>
18443
18444   <sect3>
18445    <title>Data Types and Functions</title>
18446 <itemizedlist>
18447 <listitem><para>SUM(), AVG(), COUNT() now uses int8 internally for speed (Tom)</para></listitem>
18448 <listitem><para>Add convert(), convert2() (Tatsuo)</para></listitem>
18449 <listitem><para>New function bit_length() (Peter E)</para></listitem>
18450 <listitem><para>Make the "n" in CHAR(n)/VARCHAR(n) represents letters, not bytes (Tatsuo)</para></listitem>
18451 <listitem><para>CHAR(), VARCHAR() now reject strings that are too long (Peter E)</para></listitem>
18452 <listitem><para>BIT VARYING now rejects bit strings that are too long (Peter E)</para></listitem>
18453 <listitem><para>BIT now rejects bit strings that do not match declared size (Peter E)</para></listitem>
18454 <listitem><para>INET, CIDR text conversion functions (Alex Pilosov)</para></listitem>
18455 <listitem><para>INET, CIDR operators &lt;&lt; and &lt;&lt;= indexable (Alex Pilosov)</para></listitem>
18456 <listitem><para>Bytea \### now requires valid three digit octal number</para></listitem>
18457 <listitem><para>Bytea comparison improvements, now supports =, &lt;&gt;, &gt;, &gt;=, &lt;, and &lt;=</para></listitem>
18458 <listitem><para>Bytea now supports B-tree indexes</para></listitem>
18459 <listitem><para>Bytea now supports LIKE, LIKE...ESCAPE, NOT LIKE, NOT LIKE...ESCAPE</para></listitem>
18460 <listitem><para>Bytea now supports concatenation</para></listitem>
18461 <listitem><para>New bytea functions: position, substring, trim, btrim, and length</para></listitem>
18462 <listitem><para>New encode() function mode, "escaped", converts minimally escaped bytea to/from text</para></listitem>
18463 <listitem><para>Add pg_database_encoding_max_length() (Tatsuo)</para></listitem>
18464 <listitem><para>Add pg_client_encoding() function (Tatsuo)</para></listitem>
18465 <listitem><para>now() returns time with millisecond precision (Thomas)</para></listitem>
18466 <listitem><para>New TIMESTAMP WITHOUT TIMEZONE data type (Thomas)</para></listitem>
18467 <listitem><para>Add ISO date/time specification with "T", yyyy-mm-ddThh:mm:ss (Thomas)</para></listitem>
18468 <listitem><para>New xid/int comparison functions (Hiroshi)</para></listitem>
18469 <listitem><para>Add precision to TIME, TIMESTAMP, and INTERVAL data types (Thomas)</para></listitem>
18470 <listitem><para>Modify type coercion logic to attempt binary-compatible functions first (Tom)</para></listitem>
18471 <listitem><para>New encode() function installed by default (Marko Kreen)</para></listitem>
18472 <listitem><para>Improved to_*() conversion functions (Karel Zak)</para></listitem>
18473 <listitem><para>Optimize LIKE/ILIKE when using single-byte encodings (Tatsuo)</para></listitem>
18474 <listitem><para>New functions in contrib/pgcrypto: crypt(), hmac(), encrypt(), gen_salt() (Marko Kreen)</para></listitem>
18475 <listitem><para>Correct description of translate() function (Bruce)</para></listitem>
18476 <listitem><para>Add INTERVAL argument for SET TIME ZONE (Thomas)</para></listitem>
18477 <listitem><para>Add INTERVAL YEAR TO MONTH (etc.) syntax (Thomas)</para></listitem>
18478 <listitem><para>Optimize length functions when using single-byte encodings (Tatsuo)</para></listitem>
18479 <listitem><para>Fix path_inter, path_distance, path_length, dist_ppath to handle closed paths (Curtis Barrett, Tom)</para></listitem>
18480 <listitem><para>octet_length(text) now returns non-compressed length (Tatsuo, Bruce)</para></listitem>
18481 <listitem><para>Handle "July" full name in date/time literals (Greg Sabino Mullane)</para></listitem>
18482 <listitem><para>Some datatype() function calls now evaluated differently</para></listitem>
18483 <listitem><para>Add support for Julian and ISO time specifications (Thomas)</para></listitem>
18484 </itemizedlist>
18485   </sect3>
18486
18487   <sect3>
18488    <title>Internationalization</title>
18489 <itemizedlist>
18490 <listitem><para>National language support in psql, <application>pg_dump</>, libpq, and server (Peter E)</para></listitem>
18491 <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>
18492 <listitem><para>Make trim, ltrim, rtrim, btrim, lpad, rpad, translate multibyte aware (Tatsuo)</para></listitem>
18493 <listitem><para>Add LATIN5,6,7,8,9,10 support (Tatsuo)</para></listitem>
18494 <listitem><para>Add ISO 8859-5,6,7,8 support (Tatsuo)</para></listitem>
18495 <listitem><para>Correct LATIN5 to mean ISO-8859-9, not ISO-8859-5 (Tatsuo)</para></listitem>
18496 <listitem><para>Make mic2ascii() non-ASCII aware (Tatsuo)</para></listitem>
18497 <listitem><para>Reject invalid multibyte character sequences (Tatsuo)</para></listitem>
18498 </itemizedlist>
18499   </sect3>
18500
18501   <sect3>
18502    <title><application>PL/pgSQL</></title>
18503 <itemizedlist>
18504 <listitem><para>Now uses portals for SELECT loops, allowing huge result sets (Jan)</para></listitem>
18505 <listitem><para>CURSOR and REFCURSOR support (Jan)</para></listitem>
18506 <listitem><para>Can now return open cursors (Jan)</para></listitem>
18507 <listitem><para>Add ELSEIF (Klaus Reger)</para></listitem>
18508 <listitem><para>Improve PL/pgSQL error reporting, including location of error (Tom)</para></listitem>
18509 <listitem><para>Allow IS or FOR key words in cursor declaration, for compatibility (Bruce)</para></listitem>
18510 <listitem><para>Fix for SELECT ... FOR UPDATE (Tom)</para></listitem>
18511 <listitem><para>Fix for PERFORM returning multiple rows (Tom)</para></listitem>
18512 <listitem><para>Make PL/pgSQL use the server's type coercion code (Tom)</para></listitem>
18513 <listitem><para>Memory leak fix (Jan, Tom)</para></listitem>
18514 <listitem><para>Make trailing semicolon optional (Tom)</para></listitem>
18515 </itemizedlist>
18516   </sect3>
18517
18518   <sect3>
18519    <title>PL/Perl</title>
18520 <itemizedlist>
18521 <listitem><para>New untrusted PL/Perl (Alex Pilosov)</para></listitem>
18522 <listitem><para>PL/Perl is now built on some platforms even if libperl is not shared (Peter E)</para></listitem>
18523 </itemizedlist>
18524    </sect3>
18525
18526   <sect3>
18527    <title>PL/Tcl</title>
18528 <itemizedlist>
18529 <listitem><para>Now reports errorInfo (Vsevolod Lobko)</para></listitem>
18530 <listitem><para>Add spi_lastoid function (bob@redivi.com)</para></listitem>
18531 </itemizedlist>
18532   </sect3>
18533
18534   <sect3>
18535    <title>PL/Python</title>
18536 <itemizedlist>
18537 <listitem><para>...is new (Andrew Bosma)</para></listitem>
18538 </itemizedlist>
18539   </sect3>
18540
18541   <sect3>
18542    <title><application>psql</></title>
18543 <itemizedlist>
18544 <listitem><para>\d displays indexes in unique, primary groupings (Christopher Kings-Lynne)</para></listitem>
18545 <listitem><para>Allow trailing semicolons in backslash commands (Greg Sabino Mullane)</para></listitem>
18546 <listitem><para>Read password from /dev/tty if possible</para></listitem>
18547 <listitem><para>Force new password prompt when changing user and database (Tatsuo, Tom)</para></listitem>
18548 <listitem><para>Format the correct number of columns for Unicode (Patrice)</para></listitem>
18549 </itemizedlist>
18550   </sect3>
18551
18552   <sect3>
18553    <title><application>libpq</></title>
18554 <itemizedlist>
18555 <listitem><para>New function PQescapeString() to escape quotes in command strings (Florian Weimer)</para></listitem>
18556 <listitem><para>New function PQescapeBytea() escapes binary strings for use as SQL string literals</para></listitem>
18557 </itemizedlist>
18558   </sect3>
18559
18560   <sect3>
18561    <title>JDBC</title>
18562 <itemizedlist>
18563 <listitem><para>Return OID of INSERT (Ken K)</para></listitem>
18564 <listitem><para>Handle more data types (Ken K)</para></listitem>
18565 <listitem><para>Handle single quotes and newlines in strings (Ken K)</para></listitem>
18566 <listitem><para>Handle NULL variables (Ken K)</para></listitem>
18567 <listitem><para>Fix for time zone handling (Barry Lind)</para></listitem>
18568 <listitem><para>Improved Druid support</para></listitem>
18569 <listitem><para>Allow eight-bit characters with non-multibyte server (Barry Lind)</para></listitem>
18570 <listitem><para>Support BIT, BINARY types (Ned Wolpert)</para></listitem>
18571 <listitem><para>Reduce memory usage (Michael Stephens, Dave Cramer)</para></listitem>
18572 <listitem><para>Update DatabaseMetaData (Peter E)</para></listitem>
18573 <listitem><para>Add DatabaseMetaData.getCatalogs() (Peter E)</para></listitem>
18574 <listitem><para>Encoding fixes (Anders Bengtsson)</para></listitem>
18575 <listitem><para>Get/setCatalog methods (Jason Davies)</para></listitem>
18576 <listitem><para>DatabaseMetaData.getColumns() now returns column defaults (Jason Davies)</para></listitem>
18577 <listitem><para>DatabaseMetaData.getColumns() performance improvement (Jeroen van Vianen)</para></listitem>
18578 <listitem><para>Some JDBC1 and JDBC2 merging (Anders Bengtsson)</para></listitem>
18579 <listitem><para>Transaction performance improvements (Barry Lind)</para></listitem>
18580 <listitem><para>Array fixes (Greg Zoller)</para></listitem>
18581 <listitem><para>Serialize addition </para></listitem>
18582 <listitem><para>Fix batch processing (Rene Pijlman)</para></listitem>
18583 <listitem><para>ExecSQL method reorganization (Anders Bengtsson)</para></listitem>
18584 <listitem><para>GetColumn() fixes (Jeroen van Vianen)</para></listitem>
18585 <listitem><para>Fix isWriteable() function (Rene Pijlman)</para></listitem>
18586 <listitem><para>Improved passage of JDBC2 conformance tests (Rene Pijlman)</para></listitem>
18587 <listitem><para>Add bytea type capability (Barry Lind)</para></listitem>
18588 <listitem><para>Add isNullable() (Rene Pijlman)</para></listitem>
18589 <listitem><para>JDBC date/time test suite fixes (Liam Stewart)</para></listitem>
18590 <listitem><para>Fix for SELECT 'id' AS xxx FROM table (Dave Cramer)</para></listitem>
18591 <listitem><para>Fix DatabaseMetaData to show precision properly (Mark Lillywhite)</para></listitem>
18592 <listitem><para>New getImported/getExported keys (Jason Davies)</para></listitem>
18593 <listitem><para>MD5 password encryption support (Jeremy Wohl)</para></listitem>
18594 <listitem><para>Fix to actually use type cache (Ned Wolpert)</para></listitem>
18595 </itemizedlist>
18596   </sect3>
18597
18598   <sect3>
18599    <title>ODBC</title>
18600 <itemizedlist>
18601 <listitem><para>Remove query size limit (Hiroshi)</para></listitem>
18602 <listitem><para>Remove text field size limit (Hiroshi)</para></listitem>
18603 <listitem><para>Fix for SQLPrimaryKeys in multibyte mode (Hiroshi)</para></listitem>
18604 <listitem><para>Allow ODBC procedure calls (Hiroshi)</para></listitem>
18605 <listitem><para>Improve boolean handing (Aidan Mountford)</para></listitem>
18606 <listitem><para>Most configuration options now settable via DSN (Hiroshi)</para></listitem>
18607 <listitem><para>Multibyte, performance fixes (Hiroshi)</para></listitem>
18608 <listitem><para>Allow driver to be used with iODBC or unixODBC (Peter E)</para></listitem>
18609 <listitem><para>MD5 password encryption support (Bruce)</para></listitem>
18610 <listitem><para>Add more compatibility functions to odbc.sql (Peter E)</para></listitem>
18611 </itemizedlist>
18612   </sect3>
18613
18614   <sect3>
18615    <title><application>ECPG</></title>
18616 <itemizedlist>
18617 <listitem><para>EXECUTE ... INTO implemented (Christof Petig)</para></listitem>
18618 <listitem><para>Multiple row descriptor support (e.g. CARDINALITY) (Christof Petig)</para></listitem>
18619 <listitem><para>Fix for GRANT parameters (Lee Kindness)</para></listitem>
18620 <listitem><para>Fix INITIALLY DEFERRED bug</para></listitem>
18621 <listitem><para>Various bug fixes (Michael, Christof Petig)</para></listitem>
18622 <listitem><para>Auto allocation for indicator variable arrays (int *ind_p=NULL)</para></listitem>
18623 <listitem><para>Auto allocation for string arrays (char **foo_pp=NULL)</para></listitem>
18624 <listitem><para>ECPGfree_auto_mem fixed</para></listitem>
18625 <listitem><para>All function names with external linkage are now prefixed by ECPG</para></listitem>
18626 <listitem><para>Fixes for arrays of structures (Michael)</para></listitem>
18627 </itemizedlist>
18628   </sect3>
18629
18630   <sect3>
18631    <title>Misc. Interfaces</title>
18632 <itemizedlist>
18633 <listitem><para>Python fix fetchone() (Gerhard Haring)</para></listitem>
18634 <listitem><para>Use UTF, Unicode in Tcl where appropriate (Vsevolod Lobko, Reinhard Max)</para></listitem>
18635 <listitem><para>Add Tcl COPY TO/FROM (ljb)</para></listitem>
18636 <listitem><para>Prevent output of default index op class in <application>pg_dump</> (Tom)</para></listitem>
18637 <listitem><para>Fix libpgeasy memory leak (Bruce)</para></listitem>
18638 </itemizedlist>
18639   </sect3>
18640
18641   <sect3>
18642    <title>Build and Install</title>
18643 <itemizedlist>
18644 <listitem><para>Configure, dynamic loader, and shared library fixes (Peter E)</para></listitem>
18645 <listitem><para>Fixes in QNX 4 port (Bernd Tegge)</para></listitem>
18646 <listitem><para>Fixes in Cygwin and Windows ports (Jason Tishler, Gerhard Haring, Dmitry Yurtaev, Darko Prenosil, Mikhail Terekhov)</para></listitem>
18647 <listitem><para>Fix for Windows socket communication failures (Magnus, Mikhail Terekhov)</para></listitem>
18648 <listitem><para>Hurd compile fix (Oliver Elphick)</para></listitem>
18649 <listitem><para>BeOS fixes (Cyril Velter)</para></listitem>
18650 <listitem><para>Remove configure --enable-unicode-conversion, now enabled by multibyte (Tatsuo)</para></listitem>
18651 <listitem><para>AIX fixes (Tatsuo, Andreas)</para></listitem>
18652 <listitem><para>Fix parallel make (Peter E)</para></listitem>
18653 <listitem><para>Install SQL language manual pages into OS-specific directories (Peter E)</para></listitem>
18654 <listitem><para>Rename config.h to pg_config.h (Peter E)</para></listitem>
18655 <listitem><para>Reorganize installation layout of header files (Peter E)</para></listitem>
18656 </itemizedlist>
18657   </sect3>
18658
18659   <sect3>
18660    <title>Source Code</title>
18661 <itemizedlist>
18662 <listitem><para>Remove SEP_CHAR (Bruce)</para></listitem>
18663 <listitem><para>New GUC hooks (Tom)</para></listitem>
18664 <listitem><para>Merge GUC and command line handling (Marko Kreen)</para></listitem>
18665 <listitem><para>Remove EXTEND INDEX (Martijn van Oosterhout, Tom)</para></listitem>
18666 <listitem><para>New pgjindent utility to indent java code (Bruce)</para></listitem>
18667 <listitem><para>Remove define of true/false when compiling under C++ (Leandro Fanzone, Tom)</para></listitem>
18668 <listitem><para>pgindent fixes (Bruce, Tom)</para></listitem>
18669 <listitem><para>Replace strcasecmp() with strcmp() where appropriate (Peter E)</para></listitem>
18670 <listitem><para>Dynahash portability improvements (Tom)</para></listitem>
18671 <listitem><para>Add 'volatile' usage in spinlock structures</para></listitem>
18672 <listitem><para>Improve signal handling logic (Tom)</para></listitem>
18673 </itemizedlist>
18674   </sect3>
18675
18676   <sect3>
18677    <title>Contrib</title>
18678 <itemizedlist>
18679 <listitem><para>New contrib/rtree_gist (Oleg Bartunov, Teodor Sigaev)</para></listitem>
18680 <listitem><para>New contrib/tsearch full-text indexing (Oleg, Teodor Sigaev)</para></listitem>
18681 <listitem><para>Add contrib/dblink for remote database access (Joe Conway)</para></listitem>
18682 <listitem><para>contrib/ora2pg Oracle conversion utility (Gilles Darold)</para></listitem>
18683 <listitem><para>contrib/xml XML conversion utility (John Gray)</para></listitem>
18684 <listitem><para>contrib/fulltextindex fixes (Christopher Kings-Lynne)</para></listitem>
18685 <listitem><para>New contrib/fuzzystrmatch with levenshtein and metaphone, soundex merged (Joe Conway)</para></listitem>
18686 <listitem><para>Add contrib/intarray boolean queries, binary search, fixes (Oleg Bartunov)</para></listitem>
18687 <listitem><para>New pg_upgrade utility (Bruce)</para></listitem>
18688 <listitem><para>Add new pg_resetxlog options (Bruce, Tom)</para></listitem>
18689 </itemizedlist>
18690   </sect3>
18691  </sect2>
18692 </sect1>
18693
18694
18695  <sect1 id="release-7-1-3">
18696   <title>Release 7.1.3</title>
18697
18698   <note>
18699   <title>Release date</title>
18700   <simpara>2001-08-15</simpara>
18701   </note>
18702
18703   <sect2>
18704    <title>Migration to Version 7.1.3</title>
18705
18706    <para>
18707     A dump/restore is <emphasis>not</emphasis> required for those running
18708     7.1.X.
18709    </para>
18710   </sect2>
18711
18712   <sect2>
18713    <title>Changes</title>
18714
18715    <para>
18716     <programlisting>
18717 Remove unused WAL segments of large transactions (Tom)
18718 Multiaction rule fix (Tom)
18719 PL/pgSQL memory allocation fix (Jan)
18720 VACUUM buffer fix (Tom)
18721 Regression test fixes (Tom)
18722 pg_dump fixes for GRANT/REVOKE/comments on views, user-defined types (Tom)
18723 Fix subselects with DISTINCT ON or LIMIT (Tom)
18724 BeOS fix
18725 Disable COPY TO/FROM a view (Tom)
18726 Cygwin build (Jason Tishler)
18727     </programlisting>
18728    </para>
18729   </sect2>
18730  </sect1>
18731
18732
18733  <sect1 id="release-7-1-2">
18734   <title>Release 7.1.2</title>
18735
18736   <note>
18737   <title>Release date</title>
18738   <simpara>2001-05-11</simpara>
18739   </note>
18740
18741   <para>
18742    This has one fix from 7.1.1.
18743   </para>
18744
18745
18746   <sect2>
18747    <title>Migration to Version 7.1.2</title>
18748
18749    <para>
18750     A dump/restore is <emphasis>not</emphasis> required for those running
18751     7.1.X.
18752    </para>
18753   </sect2>
18754
18755   <sect2>
18756    <title>Changes</title>
18757
18758    <para>
18759     <programlisting>
18760 Fix PL/pgSQL SELECTs when returning no rows
18761 Fix for psql backslash core dump
18762 Referential integrity privilege fix
18763 Optimizer fixes
18764 pg_dump cleanups
18765     </programlisting>
18766    </para>
18767   </sect2>
18768  </sect1>
18769
18770
18771  <sect1 id="release-7-1-1">
18772   <title>Release 7.1.1</title>
18773
18774   <note>
18775   <title>Release date</title>
18776   <simpara>2001-05-05</simpara>
18777   </note>
18778
18779   <para>
18780    This has a variety of fixes from 7.1.
18781   </para>
18782
18783
18784   <sect2>
18785    <title>Migration to Version 7.1.1</title>
18786
18787    <para>
18788     A dump/restore is <emphasis>not</emphasis> required for those running
18789     7.1.
18790    </para>
18791   </sect2>
18792
18793   <sect2>
18794    <title>Changes</title>
18795
18796    <para>
18797     <programlisting>
18798 Fix for numeric MODULO operator (Tom)
18799 pg_dump fixes (Philip)
18800 pg_dump can dump 7.0 databases (Philip)
18801 readline 4.2 fixes (Peter E)
18802 JOIN fixes (Tom)
18803 AIX, MSWIN, VAX, N32K fixes (Tom)
18804 Multibytes fixes (Tom)
18805 Unicode fixes (Tatsuo)
18806 Optimizer improvements (Tom)
18807 Fix for whole rows in functions (Tom)
18808 Fix for pg_ctl and option strings with spaces (Peter E)
18809 ODBC fixes (Hiroshi)
18810 EXTRACT can now take string argument (Thomas)
18811 Python fixes (Darcy)
18812     </programlisting>
18813    </para>
18814   </sect2>
18815  </sect1>
18816
18817
18818  <sect1 id="release-7-1">
18819   <title>Release 7.1</title>
18820
18821   <note>
18822   <title>Release date</title>
18823   <simpara>2001-04-13</simpara>
18824   </note>
18825
18826   <para>
18827        This release focuses on removing limitations that have existed in the
18828        <productname>PostgreSQL</productname> code for many years.
18829   </para>
18830
18831   <para>
18832    Major changes in this release:
18833   </para>
18834
18835   <variablelist>
18836    <varlistentry>
18837     <term>
18838       Write-ahead Log (WAL)
18839     </term>
18840     <listitem>
18841      <para>
18842 To maintain database consistency in case of an operating system crash,
18843 previous releases of <productname>PostgreSQL</productname> have forced
18844 all data modifications to disk before each transaction commit.  With
18845 WAL, only one log file must be flushed to disk, greatly improving
18846 performance.  If you have been using -F in previous releases to
18847 disable disk flushes, you might want to consider discontinuing its use.
18848      </para>
18849     </listitem>
18850    </varlistentry>
18851
18852    <varlistentry>
18853     <term>
18854       TOAST
18855     </term>
18856     <listitem>
18857      <para>
18858       TOAST - Previous releases had a compiled-in row length limit,
18859 typically 8k - 32k. This limit made storage of long text fields
18860 difficult.  With TOAST, long rows of any length can be stored with good
18861 performance.
18862      </para>
18863     </listitem>
18864    </varlistentry>
18865
18866    <varlistentry>
18867     <term>
18868       Outer Joins
18869     </term>
18870     <listitem>
18871      <para>
18872 We now support outer joins.  The UNION/NOT IN
18873 workaround for outer joins is no longer required.  We use the SQL92
18874 outer join syntax.
18875      </para>
18876     </listitem>
18877    </varlistentry>
18878
18879    <varlistentry>
18880     <term>
18881       Function Manager
18882     </term>
18883     <listitem>
18884      <para>
18885 The previous C function manager did not
18886 handle null values properly, nor did it support 64-bit <acronym>CPU</acronym>'s (Alpha).  The new
18887 function manager does.  You can continue using your old custom
18888 functions, but you might want to rewrite them in the future to use the new
18889 function manager call interface.
18890      </para>
18891     </listitem>
18892    </varlistentry>
18893
18894    <varlistentry>
18895     <term>
18896       Complex Queries
18897     </term>
18898     <listitem>
18899      <para>
18900 A large number of complex queries that were
18901 unsupported in previous releases now work.  Many combinations of views,
18902 aggregates, UNION, LIMIT, cursors, subqueries, and inherited tables
18903 now work properly. Inherited tables are now accessed by default.
18904 Subqueries in FROM are now supported.
18905      </para>
18906     </listitem>
18907    </varlistentry>
18908
18909   </variablelist>
18910
18911   <sect2>
18912    <title>Migration to Version 7.1</title>
18913
18914    <para>
18915        A dump/restore using pg_dump is required for those wishing to migrate
18916        data from any previous release.
18917    </para>
18918   </sect2>
18919
18920   <sect2>
18921    <title>Changes</title>
18922
18923    <para>
18924     <programlisting>
18925 Bug Fixes
18926 ---------
18927 Many multibyte/Unicode/locale fixes (Tatsuo and others)
18928 More reliable ALTER TABLE RENAME (Tom)
18929 Kerberos V fixes (David Wragg)
18930 Fix for INSERT INTO...SELECT where targetlist has subqueries (Tom)
18931 Prompt username/password on standard error (Bruce)
18932 Large objects inv_read/inv_write fixes (Tom)
18933 Fixes for to_char(), to_date(), to_ascii(), and to_timestamp() (Karel,
18934    Daniel Baldoni)
18935 Prevent query expressions from leaking memory (Tom)
18936 Allow UPDATE of arrays elements (Tom)
18937 Wake up lock waiters during cancel (Hiroshi)
18938 Fix rare cursor crash when using hash join (Tom)
18939 Fix for DROP TABLE/INDEX in rolled-back transaction (Hiroshi)
18940 Fix psql crash from \l+ if MULTIBYTE enabled (Peter E)
18941 Fix truncation of rule names during CREATE VIEW (Ross Reedstrom)
18942 Fix PL/perl (Alex Kapranoff)
18943 Disallow LOCK on views (Mark Hollomon)
18944 Disallow INSERT/UPDATE/DELETE on views (Mark Hollomon)
18945 Disallow DROP RULE, CREATE INDEX, TRUNCATE on views (Mark Hollomon)
18946 Allow PL/pgSQL accept non-ASCII identifiers (Tatsuo)
18947 Allow views to proper handle GROUP BY, aggregates, DISTINCT (Tom)
18948 Fix rare failure with TRUNCATE command (Tom)
18949 Allow UNION/INTERSECT/EXCEPT to be used with ALL, subqueries, views,
18950    DISTINCT, ORDER BY, SELECT...INTO (Tom)
18951 Fix parser failures during aborted transactions (Tom)
18952 Allow temporary relations to properly clean up indexes (Bruce)
18953 Fix VACUUM problem with moving rows in same page (Tom)
18954 Modify pg_dump to better handle user-defined items in template1 (Philip)
18955 Allow LIMIT in VIEW (Tom)
18956 Require cursor FETCH to honor LIMIT (Tom)
18957 Allow PRIMARY/FOREIGN Key definitions on inherited columns (Stephan)
18958 Allow ORDER BY, LIMIT in subqueries (Tom)
18959 Allow UNION in CREATE RULE (Tom)
18960 Make ALTER/DROP TABLE rollback-able (Vadim, Tom)
18961 Store initdb collation in pg_control so collation cannot be changed (Tom)
18962 Fix INSERT...SELECT with rules (Tom)
18963 Fix FOR UPDATE inside views and subselects (Tom)
18964 Fix OVERLAPS operators conform to SQL92 spec regarding NULLs (Tom)
18965 Fix lpad() and rpad() to handle length less than input string (Tom)
18966 Fix use of NOTIFY in some rules (Tom)
18967 Overhaul btree code (Tom)
18968 Fix NOT NULL use in Pl/pgSQL variables (Tom)
18969 Overhaul GIST code (Oleg)
18970 Fix CLUSTER to preserve constraints and column default (Tom)
18971 Improved deadlock detection handling (Tom)
18972 Allow multiple SERIAL columns in a table (Tom)
18973 Prevent occasional index corruption (Vadim)
18974
18975 Enhancements
18976 ------------
18977 Add OUTER JOINs (Tom)
18978 Function manager overhaul (Tom)
18979 Allow ALTER TABLE RENAME on indexes (Tom)
18980 Improve CLUSTER (Tom)
18981 Improve ps status display for more platforms (Peter E, Marc)
18982 Improve CREATE FUNCTION failure message (Ross)
18983 JDBC improvements (Peter, Travis Bauer, Christopher Cain, William Webber,
18984    Gunnar)
18985 Grand Unified Configuration scheme/GUC.  Many options can now be set in
18986    data/postgresql.conf, postmaster/postgres flags, or SET commands (Peter E)
18987 Improved handling of file descriptor cache (Tom)
18988 New warning code about auto-created table alias entries (Bruce)
18989 Overhaul initdb process (Tom, Peter E)
18990 Overhaul of inherited tables; inherited tables now accessed by default;
18991   new ONLY key word prevents it (Chris Bitmead, Tom)
18992 ODBC cleanups/improvements (Nick Gorham, Stephan Szabo, Zoltan Kovacs,
18993    Michael Fork)
18994 Allow renaming of temp tables (Tom)
18995 Overhaul memory manager contexts (Tom)
18996 pg_dumpall uses CREATE USER or CREATE GROUP rather using COPY (Peter E)
18997 Overhaul pg_dump (Philip Warner)
18998 Allow pg_hba.conf secondary password file to specify only username (Peter E)
18999 Allow TEMPORARY or TEMP key word when creating temporary tables (Bruce)
19000 New memory leak checker (Karel)
19001 New SET SESSION CHARACTERISTICS (Thomas)
19002 Allow nested block comments (Thomas)
19003 Add WITHOUT TIME ZONE type qualifier (Thomas)
19004 New ALTER TABLE ADD CONSTRAINT (Stephan)
19005 Use NUMERIC accumulators for INTEGER aggregates (Tom)
19006 Overhaul aggregate code (Tom)
19007 New VARIANCE and STDDEV() aggregates
19008 Improve dependency ordering of pg_dump (Philip)
19009 New pg_restore command (Philip)
19010 New pg_dump tar output option (Philip)
19011 New pg_dump of large objects  (Philip)
19012 New ESCAPE option to LIKE (Thomas)
19013 New case-insensitive LIKE - ILIKE (Thomas)
19014 Allow functional indexes to use binary-compatible type (Tom)
19015 Allow SQL functions to be used in more contexts (Tom)
19016 New pg_config utility (Peter E)
19017 New PL/pgSQL EXECUTE command which allows dynamic SQL and utility statements
19018    (Jan)
19019 New PL/pgSQL GET DIAGNOSTICS statement for SPI value access (Jan)
19020 New quote_identifiers() and quote_literal() functions (Jan)
19021 New ALTER TABLE table OWNER TO user command (Mark Hollomon)
19022 Allow subselects in FROM, i.e. FROM (SELECT ...) [AS] alias (Tom)
19023 Update PyGreSQL to version 3.1 (D'Arcy)
19024 Store tables as files named by OID (Vadim)
19025 New SQL function setval(seq,val,bool) for use in pg_dump (Philip)
19026 Require DROP VIEW to remove views, no DROP TABLE (Mark)
19027 Allow DROP VIEW view1, view2 (Mark)
19028 Allow multiple objects in DROP INDEX, DROP RULE, and DROP TYPE (Tom)
19029 Allow automatic conversion to/from Unicode (Tatsuo, Eiji)
19030 New /contrib/pgcrypto hashing functions (Marko Kreen)
19031 New pg_dumpall --globals-only option (Peter E)
19032 New CHECKPOINT command for WAL which creates new WAL log file (Vadim)
19033 New AT TIME ZONE syntax (Thomas)
19034 Allow location of Unix domain socket to be configurable (David J. MacKenzie)
19035 Allow postmaster to listen on a specific IP address (David J. MacKenzie)
19036 Allow socket path name to be specified in hostname by using leading slash
19037    (David J. MacKenzie)
19038 Allow CREATE DATABASE to specify template database (Tom)
19039 New utility to convert MySQL schema dumps to SQL92 and PostgreSQL (Thomas)
19040 New /contrib/rserv replication toolkit (Vadim)
19041 New file format for COPY BINARY (Tom)
19042 New /contrib/oid2name to map numeric files to table names (B Palmer)
19043 New "idle in transaction" ps status message (Marc)
19044 Update to pgaccess 0.98.7 (Constantin Teodorescu)
19045 pg_ctl now defaults to -w (wait) on shutdown, new -l (log) option
19046 Add rudimentary dependency checking to pg_dump (Philip)
19047
19048 Types
19049 -----
19050 Fix INET/CIDR type ordering and add new functions (Tom)
19051 Make OID behave as an unsigned type (Tom)
19052 Allow BIGINT as synonym for INT8 (Peter E)
19053 New int2 and int8 comparison operators (Tom)
19054 New BIT and BIT VARYING types (Adriaan Joubert, Tom, Peter E)
19055 CHAR() no longer faster than VARCHAR() because of TOAST (Tom)
19056 New GIST seg/cube examples (Gene Selkov)
19057 Improved round(numeric) handling (Tom)
19058 Fix CIDR output formatting (Tom)
19059 New CIDR abbrev() function (Tom)
19060
19061 Performance
19062 -----------
19063 Write-Ahead Log (WAL) to provide crash recovery with less performance
19064    overhead (Vadim)
19065 ANALYZE stage of VACUUM no longer exclusively locks table (Bruce)
19066 Reduced file seeks (Denis Perchine)
19067 Improve BTREE code for duplicate keys (Tom)
19068 Store all large objects in a single table (Denis Perchine, Tom)
19069 Improve memory allocation performance (Karel, Tom)
19070
19071 Source Code
19072 -----------
19073 New function manager call conventions (Tom)
19074 SGI portability fixes (David Kaelbling)
19075 New configure --enable-syslog option (Peter E)
19076 New BSDI README (Bruce)
19077 configure script moved to top level, not /src (Peter E)
19078 Makefile/configuration/compilation overhaul (Peter E)
19079 New configure --with-python option (Peter E)
19080 Solaris cleanups (Peter E)
19081 Overhaul /contrib Makefiles (Karel)
19082 New OpenSSL configuration option (Magnus, Peter E)
19083 AIX fixes (Andreas)
19084 QNX fixes (Maurizio)
19085 New heap_open(), heap_openr() API (Tom)
19086 Remove colon and semi-colon operators (Thomas)
19087 New pg_class.relkind value for views (Mark Hollomon)
19088 Rename ichar() to chr() (Karel)
19089 New documentation for btrim(), ascii(), chr(), repeat() (Karel)
19090 Fixes for NT/Cygwin (Pete Forman)
19091 AIX port fixes (Andreas)
19092 New BeOS port (David Reid, Cyril Velter)
19093 Add proofreader's changes to docs (Addison-Wesley, Bruce)
19094 New Alpha spinlock code (Adriaan Joubert, Compaq)
19095 UnixWare port overhaul (Peter E)
19096 New Darwin/MacOS X port (Peter Bierman, Bruce Hartzler)
19097 New FreeBSD Alpha port (Alfred)
19098 Overhaul shared memory segments (Tom)
19099 Add IBM S/390 support (Neale Ferguson)
19100 Moved macmanuf to /contrib (Larry Rosenman)
19101 Syslog improvements (Larry Rosenman)
19102 New template0 database that contains no user additions (Tom)
19103 New /contrib/cube and /contrib/seg GIST sample code (Gene Selkov)
19104 Allow NetBSD's libedit instead of readline (Peter)
19105 Improved assembly language source code format (Bruce)
19106 New contrib/pg_logger
19107 New --template option to createdb
19108 New contrib/pg_control utility (Oliver)
19109 New FreeBSD tools ipc_check, start-scripts/freebsd
19110     </programlisting>
19111    </para>
19112   </sect2>
19113  </sect1>
19114
19115
19116  <sect1 id="release-7-0-3">
19117   <title>Release 7.0.3</title>
19118
19119   <note>
19120   <title>Release date</title>
19121   <simpara>2000-11-11</simpara>
19122   </note>
19123
19124   <para>
19125    This has a variety of fixes from 7.0.2.
19126   </para>
19127
19128
19129   <sect2>
19130    <title>Migration to Version 7.0.3</title>
19131
19132    <para>
19133     A dump/restore is <emphasis>not</emphasis> required for those running
19134     7.0.*.
19135    </para>
19136   </sect2>
19137
19138   <sect2>
19139    <title>Changes</title>
19140
19141    <para>
19142     <programlisting>
19143 Jdbc fixes (Peter)
19144 Large object fix (Tom)
19145 Fix lean in COPY WITH OIDS leak (Tom)
19146 Fix backwards-index-scan (Tom)
19147 Fix SELECT ... FOR UPDATE so it checks for duplicate keys (Hiroshi)
19148 Add --enable-syslog to configure (Marc)
19149 Fix abort transaction at backend exit in rare cases (Tom)
19150 Fix for psql \l+ when multibyte enabled (Tatsuo)
19151 Allow PL/pgSQL to accept non ascii identifiers (Tatsuo)
19152 Make vacuum always flush buffers (Tom)
19153 Fix to allow cancel while waiting for a lock (Hiroshi)
19154 Fix for memory allocation problem in user authentication code (Tom)
19155 Remove bogus use of int4out() (Tom)
19156 Fixes for multiple subqueries in COALESCE or BETWEEN (Tom)
19157 Fix for failure of triggers on heap open in certain cases (Jeroen van
19158    Vianen)
19159 Fix for erroneous selectivity of not-equals (Tom)
19160 Fix for erroneous use of strcmp() (Tom)
19161 Fix for bug where storage manager accesses items beyond end of file
19162    (Tom)
19163 Fix to include kernel errno message in all smgr elog messages (Tom)
19164 Fix for '.' not in PATH at build time (SL Baur)
19165 Fix for out-of-file-descriptors error (Tom)
19166 Fix to make pg_dump dump 'iscachable' flag for functions (Tom)
19167 Fix for subselect in targetlist of Append node (Tom)
19168 Fix for mergejoin plans (Tom)
19169 Fix TRUNCATE failure on relations with indexes (Tom)
19170 Avoid database-wide restart on write error (Hiroshi)
19171 Fix nodeMaterial to honor chgParam by recomputing its output (Tom)
19172 Fix VACUUM problem with moving chain of update row versions when source
19173    and destination of a row version lie on the same page (Tom)
19174 Fix user.c CommandCounterIncrement (Tom)
19175 Fix for AM/PM boundary problem in to_char() (Karel Zak)
19176 Fix TIME aggregate handling (Tom)
19177 Fix to_char() to avoid coredump on NULL input (Tom)
19178 Buffer fix (Tom)
19179 Fix for inserting/copying longer multibyte strings into char() data
19180    types (Tatsuo)
19181 Fix for crash of backend, on abort (Tom)
19182     </programlisting>
19183    </para>
19184   </sect2>
19185  </sect1>
19186
19187
19188  <sect1 id="release-7-0-2">
19189   <title>Release 7.0.2</title>
19190
19191   <note>
19192   <title>Release date</title>
19193   <simpara>2000-06-05</simpara>
19194   </note>
19195
19196   <para>
19197    This is a repackaging of 7.0.1 with added documentation.
19198   </para>
19199
19200
19201   <sect2>
19202    <title>Migration to Version 7.0.2</title>
19203
19204    <para>
19205     A dump/restore is <emphasis>not</emphasis> required for those running
19206     7.*.
19207    </para>
19208   </sect2>
19209
19210   <sect2>
19211    <title>Changes</title>
19212
19213    <para>
19214     <programlisting>
19215 Added documentation to tarball.
19216     </programlisting>
19217    </para>
19218   </sect2>
19219  </sect1>
19220
19221
19222  <sect1 id="release-7-0-1">
19223   <title>Release 7.0.1</title>
19224
19225   <note>
19226   <title>Release date</title>
19227   <simpara>2000-06-01</simpara>
19228   </note>
19229
19230   <para>
19231    This is a cleanup release for 7.0.
19232   </para>
19233
19234   <sect2>
19235    <title>Migration to Version 7.0.1</title>
19236
19237    <para>
19238     A dump/restore is <emphasis>not</emphasis> required for those running
19239     7.0.
19240    </para>
19241   </sect2>
19242
19243   <sect2>
19244    <title>Changes</title>
19245
19246    <para>
19247     <programlisting>
19248 Fix many CLUSTER failures (Tom)
19249 Allow ALTER TABLE RENAME works on indexes (Tom)
19250 Fix plpgsql to handle datetime-&gt;timestamp and timespan-&gt;interval (Bruce)
19251 New configure --with-setproctitle switch to use setproctitle() (Marc, Bruce)
19252 Fix the off by one errors in ResultSet from 6.5.3, and more.
19253 jdbc ResultSet fixes (Joseph Shraibman)
19254 optimizer tunings (Tom)
19255 Fix create user for pgaccess
19256 Fix for UNLISTEN failure
19257 IRIX fixes (David Kaelbling)
19258 QNX fixes (Andreas Kardos)
19259 Reduce COPY IN lock level (Tom)
19260 Change libpqeasy to use PQconnectdb() style parameters (Bruce)
19261 Fix pg_dump to handle OID indexes (Tom)
19262 Fix small memory leak (Tom)
19263 Solaris fix for createdb/dropdb (Tatsuo)
19264 Fix for non-blocking connections (Alfred Perlstein)
19265 Fix improper recovery after RENAME TABLE failures (Tom)
19266 Copy pg_ident.conf.sample into /lib directory in install (Bruce)
19267 Add SJIS UDC (NEC selection IBM kanji) support (Eiji Tokuya)
19268 Fix too long syslog message (Tatsuo)
19269 Fix problem with quoted indexes that are too long (Tom)
19270 JDBC ResultSet.getTimestamp() fix (Gregory Krasnow &amp; Floyd Marinescu)
19271 ecpg changes (Michael)
19272     </programlisting>
19273    </para>
19274   </sect2>
19275  </sect1>
19276
19277  <sect1 id="release-7-0">
19278   <title>Release 7.0</title>
19279
19280   <note>
19281   <title>Release date</title>
19282   <simpara>2000-05-08</simpara>
19283   </note>
19284
19285   <para>
19286    This release contains improvements in many areas, demonstrating
19287    the continued growth of <productname>PostgreSQL</productname>.
19288    There are more improvements and fixes in 7.0 than in any previous
19289    release. The developers have confidence that this is the best
19290    release yet; we do our best to put out only solid releases, and
19291    this one is no exception.
19292   </para>
19293
19294   <para>
19295    Major changes in this release:
19296   </para>
19297
19298   <variablelist>
19299    <varlistentry>
19300     <term>
19301      Foreign Keys
19302     </term>
19303     <listitem>
19304      <para>
19305       Foreign keys are now implemented, with the exception of PARTIAL MATCH
19306       foreign keys. Many users have been asking for this feature, and we are
19307       pleased to offer it.
19308      </para>
19309     </listitem>
19310    </varlistentry>
19311
19312    <varlistentry>
19313     <term>
19314      Optimizer Overhaul
19315     </term>
19316     <listitem>
19317      <para>
19318       Continuing on work started a year ago, the optimizer has been
19319       improved, allowing better query plan selection and faster performance
19320       with less memory usage.
19321      </para>
19322     </listitem>
19323    </varlistentry>
19324
19325    <varlistentry>
19326     <term>
19327      Updated <application>psql</application>
19328     </term>
19329     <listitem>
19330      <para>
19331       <application>psql</application>, our interactive terminal monitor, has been
19332       updated with a variety of new features. See the <application>psql</application> manual page for details.
19333      </para>
19334     </listitem>
19335    </varlistentry>
19336
19337    <varlistentry>
19338     <term>
19339      Join Syntax
19340     </term>
19341     <listitem>
19342      <para>
19343       SQL92 join syntax is now supported, though only as
19344       <literal>INNER JOIN</> for this release. <literal>JOIN</>,
19345       <literal>NATURAL JOIN</>, <literal>JOIN</>/<literal>USING</>,
19346       and <literal>JOIN</>/<literal>ON</> are available, as are
19347       column correlation names.
19348      </para>
19349     </listitem>
19350
19351    </varlistentry>
19352   </variablelist>
19353
19354   <sect2>
19355    <title>Migration to Version 7.0</title>
19356
19357    <para>
19358     A dump/restore using <application>pg_dump</application>
19359     is required for those wishing to migrate data from any
19360     previous release of <productname>PostgreSQL</productname>.
19361     For those upgrading from 6.5.*, you can instead use
19362     <application>pg_upgrade</application> to upgrade to this
19363     release; however, a full dump/reload installation is always the
19364     most robust method for upgrades.
19365    </para>
19366
19367    <para>
19368     Interface and compatibility issues to consider for the new
19369     release include:
19370    </para>
19371
19372    <itemizedlist>
19373     <listitem>
19374      <para>
19375       The date/time types <type>datetime</type> and
19376       <type>timespan</type> have been superseded by the
19377       SQL92-defined types <type>timestamp</type> and
19378       <type>interval</type>. Although there has been some effort to
19379       ease the transition by allowing
19380       <productname>PostgreSQL</productname> to recognize
19381       the deprecated type names and translate them to the new type
19382       names, this mechanism cannot be completely transparent to
19383       your existing application.
19384      </para>
19385     </listitem>
19386
19387     <listitem>
19388      <para>
19389       The optimizer has been substantially improved in the area of
19390       query cost estimation. In some cases, this will result in
19391       decreased query times as the optimizer makes a better choice
19392       for the preferred plan. However, in a small number of cases,
19393       usually involving pathological distributions of data, your
19394       query times might go up. If you are dealing with large amounts
19395       of data, you might want to check your queries to verify
19396       performance.
19397      </para>
19398     </listitem>
19399
19400     <listitem>
19401      <para>
19402       The <acronym>JDBC</acronym> and <acronym>ODBC</acronym>
19403       interfaces have been upgraded and extended.
19404      </para>
19405     </listitem>
19406
19407     <listitem>
19408      <para>
19409       The string function <function>CHAR_LENGTH</function> is now a
19410       native function. Previous versions translated this into a call
19411       to <function>LENGTH</function>, which could result in
19412       ambiguity with other types implementing
19413       <function>LENGTH</function> such as the geometric types.
19414      </para>
19415     </listitem>
19416    </itemizedlist>
19417   </sect2>
19418
19419   <sect2>
19420    <title>Changes</title>
19421
19422    <para>
19423     <programlisting>
19424 Bug Fixes
19425 ---------
19426 Prevent function calls exceeding maximum number of arguments (Tom)
19427 Improve CASE construct (Tom)
19428 Fix SELECT coalesce(f1,0) FROM int4_tbl GROUP BY f1 (Tom)
19429 Fix SELECT sentence.words[0] FROM sentence GROUP BY sentence.words[0] (Tom)
19430 Fix GROUP BY scan bug (Tom)
19431 Improvements in SQL grammar processing (Tom)
19432 Fix for views involved in INSERT ... SELECT ... (Tom)
19433 Fix for SELECT a/2, a/2 FROM test_missing_target GROUP BY a/2 (Tom)
19434 Fix for subselects in INSERT ... SELECT (Tom)
19435 Prevent INSERT ... SELECT ... ORDER BY (Tom)
19436 Fixes for relations greater than 2GB, including vacuum
19437 Improve propagating system table changes to other backends (Tom)
19438 Improve propagating user table changes to other backends (Tom)
19439 Fix handling of temp tables in complex situations (Bruce, Tom)
19440 Allow table locking at table open, improving concurrent reliability (Tom)
19441 Properly quote sequence names in pg_dump (Ross J. Reedstrom)
19442 Prevent DROP DATABASE while others accessing
19443 Prevent any rows from being returned by GROUP BY if no rows processed (Tom)
19444 Fix SELECT COUNT(1) FROM table WHERE ...' if no rows matching WHERE (Tom)
19445 Fix pg_upgrade so it works for MVCC (Tom)
19446 Fix for SELECT ... WHERE x IN (SELECT ... HAVING SUM(x) &gt; 1) (Tom)
19447 Fix for "f1 datetime DEFAULT 'now'"  (Tom)
19448 Fix problems with CURRENT_DATE used in DEFAULT (Tom)
19449 Allow comment-only lines, and ;;; lines too. (Tom)
19450 Improve recovery after failed disk writes, disk full (Hiroshi)
19451 Fix cases where table is mentioned in FROM but not joined (Tom)
19452 Allow HAVING clause without aggregate functions (Tom)
19453 Fix for "--" comment and no trailing newline, as seen in perl interface
19454 Improve pg_dump failure error reports (Bruce)
19455 Allow sorts and hashes to exceed 2GB file sizes (Tom)
19456 Fix for pg_dump dumping of inherited rules (Tom)
19457 Fix for NULL handling comparisons (Tom)
19458 Fix inconsistent state caused by failed CREATE/DROP commands (Hiroshi)
19459 Fix for dbname with dash
19460 Prevent DROP INDEX from interfering with other backends (Tom)
19461 Fix file descriptor leak in verify_password()
19462 Fix for "Unable to identify an operator =$" problem
19463 Fix ODBC so no segfault if CommLog and Debug enabled (Dirk Niggemann)
19464 Fix for recursive exit call (Massimo)
19465 Fix for extra-long timezones (Jeroen van Vianen)
19466 Make pg_dump preserve primary key information (Peter E)
19467 Prevent databases with single quotes (Peter E)
19468 Prevent DROP DATABASE inside  transaction (Peter E)
19469 ecpg memory leak fixes (Stephen Birch)
19470 Fix for SELECT null::text, SELECT int4fac(null) and SELECT 2 + (null) (Tom)
19471 Y2K timestamp fix (Massimo)
19472 Fix for VACUUM 'HEAP_MOVED_IN was not expected' errors (Tom)
19473 Fix for views with tables/columns containing spaces  (Tom)
19474 Prevent privileges on indexes (Peter E)
19475 Fix for spinlock stuck problem when error is generated (Hiroshi)
19476 Fix ipcclean on Linux
19477 Fix handling of NULL constraint conditions (Tom)
19478 Fix memory leak in odbc driver (Nick Gorham)
19479 Fix for privilege check on UNION tables (Tom)
19480 Fix to allow SELECT 'a' LIKE 'a' (Tom)
19481 Fix for SELECT 1 + NULL (Tom)
19482 Fixes to CHAR
19483 Fix log() on numeric type (Tom)
19484 Deprecate ':' and ';' operators
19485 Allow vacuum of temporary tables
19486 Disallow inherited columns with the same name as new columns
19487 Recover or force failure when disk space is exhausted (Hiroshi)
19488 Fix INSERT INTO ... SELECT with AS columns matching result columns
19489 Fix INSERT ... SELECT ... GROUP BY groups by target columns not source columns (Tom)
19490 Fix CREATE TABLE test (a char(5) DEFAULT text '', b int4) with INSERT (Tom)
19491 Fix UNION with LIMIT
19492 Fix CREATE TABLE x AS SELECT 1 UNION SELECT 2
19493 Fix CREATE TABLE test(col char(2) DEFAULT user)
19494 Fix mismatched types in CREATE TABLE ... DEFAULT
19495 Fix SELECT * FROM pg_class where oid in (0,-1)
19496 Fix SELECT COUNT('asdf') FROM pg_class WHERE oid=12
19497 Prevent user who can create databases can modifying pg_database table (Peter E)
19498 Fix btree to give a useful elog when key &gt; 1/2 (page - overhead) (Tom)
19499 Fix INSERT of 0.0 into DECIMAL(4,4) field (Tom)
19500
19501 Enhancements
19502 ------------
19503 New CLI interface include file sqlcli.h, based on SQL3/SQL98
19504 Remove all limits on query length, row length limit still exists (Tom)
19505 Update jdbc protocol to 2.0 (Jens Glaser <email>jens@jens.de</email>)
19506 Add TRUNCATE command to quickly truncate relation (Mike Mascari)
19507 Fix to give super user and createdb user proper update catalog rights (Peter E)
19508 Allow ecpg bool variables to have NULL values (Christof)
19509 Issue ecpg error if NULL value for variable with no NULL indicator (Christof)
19510 Allow ^C to cancel COPY command (Massimo)
19511 Add SET FSYNC and SHOW PG_OPTIONS commands(Massimo)
19512 Function name overloading for dynamically-loaded C functions (Frankpitt)
19513 Add CmdTuples() to libpq++(Vince)
19514 New CREATE CONSTRAINT TRIGGER and SET CONSTRAINTS commands(Jan)
19515 Allow CREATE FUNCTION/WITH clause to be used for all language types
19516 configure --enable-debug adds -g (Peter E)
19517 configure --disable-debug removes -g (Peter E)
19518 Allow more complex default expressions (Tom)
19519 First real FOREIGN KEY constraint trigger functionality (Jan)
19520 Add FOREIGN KEY ... MATCH FULL ... ON DELETE CASCADE (Jan)
19521 Add FOREIGN KEY ... MATCH &lt;unspecified&gt; referential actions (Don Baccus)
19522 Allow WHERE restriction on ctid (physical heap location) (Hiroshi)
19523 Move pginterface from contrib to interface directory, rename to pgeasy (Bruce)
19524 Change pgeasy connectdb() parameter ordering (Bruce)
19525 Require SELECT DISTINCT target list to have all ORDER BY columns (Tom)
19526 Add Oracle's COMMENT ON command (Mike Mascari <email>mascarim@yahoo.com</email>)
19527 libpq's PQsetNoticeProcessor function now returns previous hook(Peter E)
19528 Prevent PQsetNoticeProcessor from being set to NULL (Peter E)
19529 Make USING in COPY optional (Bruce)
19530 Allow subselects in the target list (Tom)
19531 Allow subselects on the left side of comparison operators (Tom)
19532 New parallel regression test (Jan)
19533 Change backend-side COPY to write files with permissions 644 not 666 (Tom)
19534 Force permissions on PGDATA directory to be secure, even if it exists (Tom)
19535 Added psql LASTOID variable to return last inserted oid (Peter E)
19536 Allow concurrent vacuum and remove pg_vlock vacuum lock file (Tom)
19537 Add privilege check for vacuum (Peter E)
19538 New libpq functions to allow asynchronous connections: PQconnectStart(),
19539   PQconnectPoll(), PQresetStart(), PQresetPoll(), PQsetenvStart(),
19540   PQsetenvPoll(), PQsetenvAbort (Ewan Mellor)
19541 New libpq PQsetenv() function (Ewan Mellor)
19542 create/alter user extension (Peter E)
19543 New postmaster.pid and postmaster.opts under $PGDATA (Tatsuo)
19544 New scripts for create/drop user/db (Peter E)
19545 Major psql overhaul (Peter E)
19546 Add const to libpq interface (Peter E)
19547 New libpq function PQoidValue (Peter E)
19548 Show specific non-aggregate causing problem with GROUP BY (Tom)
19549 Make changes to pg_shadow recreate pg_pwd file (Peter E)
19550 Add aggregate(DISTINCT ...) (Tom)
19551 Allow flag to control COPY input/output of NULLs (Peter E)
19552 Make postgres user have a password by default (Peter E)
19553 Add CREATE/ALTER/DROP GROUP (Peter E)
19554 All administration scripts now support --long options (Peter E, Karel)
19555 Vacuumdb script now supports --all option (Peter E)
19556 ecpg new portable FETCH syntax
19557 Add ecpg EXEC SQL IFDEF, EXEC SQL IFNDEF, EXEC SQL ELSE, EXEC SQL ELIF
19558        and EXEC SQL ENDIF directives
19559 Add pg_ctl script to control backend start-up (Tatsuo)
19560 Add postmaster.opts.default file to store start-up flags (Tatsuo)
19561 Allow --with-mb=SQL_ASCII
19562 Increase maximum number of index keys to 16 (Bruce)
19563 Increase maximum number of function arguments to 16 (Bruce)
19564 Allow configuration of maximum number of index keys and arguments (Bruce)
19565 Allow unprivileged users to change their passwords (Peter E)
19566 Password authentication enabled; required for new users (Peter E)
19567 Disallow dropping a user who owns a database (Peter E)
19568 Change initdb option --with-mb to --enable-multibyte
19569 Add option for initdb to prompts for superuser password (Peter E)
19570 Allow complex type casts like col::numeric(9,2) and col::int2::float8 (Tom)
19571 Updated user interfaces on initdb, initlocation, pg_dump, ipcclean (Peter E)
19572 New pg_char_to_encoding() and pg_encoding_to_char() functions (Tatsuo)
19573 libpq non-blocking mode (Alfred Perlstein)
19574 Improve conversion of types in casts that don't specify a length
19575 New plperl internal programming language (Mark Hollomon)
19576 Allow COPY IN to read file that do not end with a newline (Tom)
19577 Indicate when long identifiers are truncated (Tom)
19578 Allow aggregates to use type equivalency (Peter E)
19579 Add Oracle's to_char(), to_date(), to_datetime(), to_timestamp(), to_number()
19580        conversion functions (Karel Zak &lt;zakkr@zf.jcu.cz&gt;)
19581 Add SELECT DISTINCT ON (expr [, expr ...]) targetlist ... (Tom)
19582 Check to be sure ORDER BY is compatible with the DISTINCT operation (Tom)
19583 Add NUMERIC and int8 types to ODBC
19584 Improve EXPLAIN results for Append, Group, Agg, Unique (Tom)
19585 Add ALTER TABLE ... ADD FOREIGN KEY (Stephan Szabo)
19586 Allow SELECT .. FOR UPDATE in PL/pgSQL (Hiroshi)
19587 Enable backward sequential scan even after reaching EOF (Hiroshi)
19588 Add btree indexing of boolean values, &gt;= and &lt;= (Don Baccus)
19589 Print current line number when COPY FROM fails (Massimo)
19590 Recognize POSIX time zone e.g. "PST+8" and "GMT-8" (Thomas)
19591 Add DEC as synonym for DECIMAL (Thomas)
19592 Add SESSION_USER as SQL92 key word, same as CURRENT_USER (Thomas)
19593 Implement SQL92 column aliases (aka correlation names) (Thomas)
19594 Implement SQL92 join syntax (Thomas)
19595 Make INTERVAL reserved word allowed as a column identifier (Thomas)
19596 Implement REINDEX command (Hiroshi)
19597 Accept ALL in aggregate function SUM(ALL col) (Tom)
19598 Prevent GROUP BY from using column aliases (Tom)
19599 New psql \encoding option (Tatsuo)
19600 Allow PQrequestCancel() to terminate when in waiting-for-lock state (Hiroshi)
19601 Allow negation of a negative number in all cases
19602 Add ecpg descriptors (Christof, Michael)
19603 Allow CREATE VIEW v AS SELECT f1::char(8) FROM tbl
19604 Allow casts with length, like foo::char(8)
19605 New libpq functions PQsetClientEncoding(), PQclientEncoding() (Tatsuo)
19606 Add support for SJIS user defined characters (Tatsuo)
19607 Larger views/rules supported
19608 Make libpq's PQconndefaults() thread-safe (Tom)
19609 Disable // as comment to be ANSI conforming, should use -- (Tom)
19610 Allow column aliases on views CREATE VIEW name (collist)
19611 Fixes for views with subqueries (Tom)
19612 Allow UPDATE table SET fld = (SELECT ...) (Tom)
19613 SET command options no longer require quotes
19614 Update pgaccess to 0.98.6
19615 New SET SEED command
19616 New pg_options.sample file
19617 New SET FSYNC command (Massimo)
19618 Allow pg_descriptions when creating tables
19619 Allow pg_descriptions when creating types, columns, and functions
19620 Allow psql \copy to allow delimiters (Peter E)
19621 Allow psql to print nulls as distinct from "" [null] (Peter E)
19622
19623 Types
19624 -----
19625 Many array fixes (Tom)
19626 Allow bare column names to be subscripted as arrays (Tom)
19627 Improve type casting of int and float constants (Tom)
19628 Cleanups for int8 inputs, range checking, and type conversion (Tom)
19629 Fix for SELECT timespan('21:11:26'::time) (Tom)
19630 netmask('x.x.x.x/0') is 255.255.255.255 instead of 0.0.0.0 (Oleg Sharoiko)
19631 Add btree index on NUMERIC (Jan)
19632 Perl fix for large objects containing NUL characters (Douglas Thomson)
19633 ODBC fix for large objects (free)
19634 Fix indexing of cidr data type
19635 Fix for Ethernet MAC addresses (macaddr type) comparisons
19636 Fix for date/time types when overflows happened in computations (Tom)
19637 Allow array on int8 (Peter E)
19638 Fix for rounding/overflow of NUMERIC type, like NUMERIC(4,4) (Tom)
19639 Allow NUMERIC arrays
19640 Fix bugs in NUMERIC ceil() and floor() functions (Tom)
19641 Make char_length()/octet_length including trailing blanks (Tom)
19642 Made abstime/reltime use int4 instead of time_t (Peter E)
19643 New lztext data type for compressed text fields
19644 Revise code to handle coercion of int and float constants (Tom)
19645 Start at new code to implement a BIT and BIT VARYING type (Adriaan Joubert)
19646 NUMERIC now accepts scientific notation (Tom)
19647 NUMERIC to int4 rounds (Tom)
19648 Convert float4/8 to NUMERIC properly (Tom)
19649 Allow type conversion with NUMERIC (Thomas)
19650 Make ISO date style (2000-02-16 09:33) the default (Thomas)
19651 Add NATIONAL CHAR [ VARYING ] (Thomas)
19652 Allow NUMERIC round and trunc to accept negative scales (Tom)
19653 New TIME WITH TIME ZONE type (Thomas)
19654 Add MAX()/MIN() on time type (Thomas)
19655 Add abs(), mod(), fac() for int8 (Thomas)
19656 Rename functions to round(), sqrt(), cbrt(), pow() for float8 (Thomas)
19657 Add transcendental math functions (e.g. sin(), acos()) for float8 (Thomas)
19658 Add exp() and ln() for NUMERIC type
19659 Rename NUMERIC power() to pow() (Thomas)
19660 Improved TRANSLATE() function (Edwin Ramirez, Tom)
19661 Allow X=-Y operators  (Tom)
19662 Allow SELECT float8(COUNT(*))/(SELECT COUNT(*) FROM t) FROM t GROUP BY f1; (Tom)
19663 Allow LOCALE to use indexes in regular expression searches (Tom)
19664 Allow creation of functional indexes to use default types
19665
19666 Performance
19667 -----------
19668 Prevent exponential space consumption with many AND's and OR's (Tom)
19669 Collect attribute selectivity values for system columns (Tom)
19670 Reduce memory usage of aggregates (Tom)
19671 Fix for LIKE optimization to use indexes with multibyte encodings (Tom)
19672 Fix r-tree index optimizer selectivity (Thomas)
19673 Improve optimizer selectivity computations and functions (Tom)
19674 Optimize btree searching for cases where many equal keys exist (Tom)
19675 Enable fast LIKE index processing only if index present (Tom)
19676 Re-use free space on index pages with duplicates (Tom)
19677 Improve hash join processing (Tom)
19678 Prevent descending sort if result is already sorted(Hiroshi)
19679 Allow commuting of index scan query qualifications (Tom)
19680 Prefer index scans in cases where ORDER BY/GROUP BY is required (Tom)
19681 Allocate large memory requests in fix-sized chunks for performance (Tom)
19682 Fix vacuum's performance by reducing memory allocation requests (Tom)
19683 Implement constant-expression simplification (Bernard Frankpitt, Tom)
19684 Use secondary columns to be used to determine start of index scan (Hiroshi)
19685 Prevent quadruple use of disk space when doing internal sorting (Tom)
19686 Faster sorting by calling fewer functions (Tom)
19687 Create system indexes to match all system caches (Bruce, Hiroshi)
19688 Make system caches use system indexes (Bruce)
19689 Make all system indexes unique (Bruce)
19690 Improve pg_statistics management for VACUUM speed improvement (Tom)
19691 Flush backend cache less frequently (Tom, Hiroshi)
19692 COPY now reuses previous memory allocation, improving performance (Tom)
19693 Improve optimization cost estimation (Tom)
19694 Improve optimizer estimate of range queries x &gt; lowbound AND x &lt; highbound (Tom)
19695 Use DNF instead of CNF where appropriate (Tom, Taral)
19696 Further cleanup for OR-of-AND WHERE-clauses (Tom)
19697 Make use of index in OR clauses (x = 1 AND y = 2) OR (x = 2 AND y = 4) (Tom)
19698 Smarter optimizer computations for random index page access (Tom)
19699 New SET variable to control optimizer costs (Tom)
19700 Optimizer queries based on LIMIT, OFFSET, and EXISTS qualifications (Tom)
19701 Reduce optimizer internal housekeeping of join paths for speedup (Tom)
19702 Major subquery speedup (Tom)
19703 Fewer fsync writes when fsync is not disabled (Tom)
19704 Improved LIKE optimizer estimates (Tom)
19705 Prevent fsync in SELECT-only queries (Vadim)
19706 Make index creation use psort code, because it is now faster (Tom)
19707 Allow creation of sort temp tables &gt; 1 Gig
19708
19709 Source Tree Changes
19710 -------------------
19711 Fix for linux PPC compile
19712 New generic expression-tree-walker subroutine (Tom)
19713 Change form() to varargform() to prevent portability problems
19714 Improved range checking for large integers on Alphas
19715 Clean up #include in /include directory (Bruce)
19716 Add scripts for checking includes (Bruce)
19717 Remove un-needed #include's from *.c files (Bruce)
19718 Change #include's to use &lt;&gt; and "" as appropriate (Bruce)
19719 Enable Windows compilation of libpq
19720 Alpha spinlock fix from Uncle George <email>gatgul@voicenet.com</email>
19721 Overhaul of optimizer data structures (Tom)
19722 Fix to cygipc library (Yutaka Tanida)
19723 Allow pgsql to work on newer Cygwin snapshots (Dan)
19724 New catalog version number (Tom)
19725 Add Linux ARM
19726 Rename heap_replace to heap_update
19727 Update for QNX (Dr. Andreas Kardos)
19728 New platform-specific regression handling (Tom)
19729 Rename oid8 -&gt; oidvector and int28 -&gt; int2vector (Bruce)
19730 Included all yacc and lex files into the distribution (Peter E.)
19731 Remove lextest, no longer needed (Peter E)
19732 Fix for libpq and psql on Windows (Magnus)
19733 Internally change datetime and timespan into timestamp and interval (Thomas)
19734 Fix for plpgsql on BSD/OS
19735 Add SQL_ASCII test case to the regression test (Tatsuo)
19736 configure --with-mb now deprecated (Tatsuo)
19737 NT fixes
19738 NetBSD fixes (Johnny C. Lam <email>lamj@stat.cmu.edu</email>)
19739 Fixes for Alpha compiles
19740 New multibyte encodings
19741     </programlisting>
19742    </para>
19743   </sect2>
19744  </sect1>
19745
19746  <sect1 id="release-6-5-3">
19747   <title>Release 6.5.3</title>
19748
19749   <note>
19750   <title>Release date</title>
19751   <simpara>1999-10-13</simpara>
19752   </note>
19753
19754   <para>
19755    This is basically a cleanup release for 6.5.2.  We have added a new
19756    <application>PgAccess</> that was missing in 6.5.2, and installed an NT-specific fix.
19757   </para>
19758
19759
19760   <sect2>
19761    <title>Migration to Version 6.5.3</title>
19762
19763    <para>
19764     A dump/restore is <emphasis>not</emphasis> required for those running
19765     6.5.*.
19766    </para>
19767   </sect2>
19768   <sect2>
19769    <title>Changes</title>
19770
19771    <para>
19772     <programlisting>
19773 Updated version of pgaccess 0.98
19774 NT-specific patch
19775 Fix dumping rules on inherited tables
19776     </programlisting>
19777    </para>
19778   </sect2>
19779  </sect1>
19780
19781
19782  <sect1 id="release-6-5-2">
19783   <title>Release 6.5.2</title>
19784
19785   <note>
19786   <title>Release date</title>
19787   <simpara>1999-09-15</simpara>
19788   </note>
19789
19790   <para>
19791    This is basically a cleanup release for 6.5.1.  We have fixed a variety of
19792    problems reported by 6.5.1 users.
19793   </para>
19794
19795
19796   <sect2>
19797    <title>Migration to Version 6.5.2</title>
19798
19799    <para>
19800     A dump/restore is <emphasis>not</emphasis> required for those running
19801     6.5.*.
19802    </para>
19803   </sect2>
19804
19805   <sect2>
19806    <title>Changes</title>
19807
19808    <para>
19809     <programlisting>
19810 subselect+CASE fixes(Tom)
19811 Add SHLIB_LINK setting for solaris_i386 and solaris_sparc ports(Daren Sefcik)
19812 Fixes for CASE in WHERE join clauses(Tom)
19813 Fix BTScan abort(Tom)
19814 Repair the check for redundant UNIQUE and PRIMARY KEY indexes(Thomas)
19815 Improve it so that it checks for multicolumn constraints(Thomas)
19816 Fix for Windows making problem with MB enabled(Hiroki Kataoka)
19817 Allow BSD yacc and bison to compile pl code(Bruce)
19818 Fix SET NAMES working
19819 int8 fixes(Thomas)
19820 Fix vacuum's memory consumption(Hiroshi,Tatsuo)
19821 Reduce the total memory consumption of vacuum(Tom)
19822 Fix for timestamp(datetime)
19823 Rule deparsing bugfixes(Tom)
19824 Fix quoting problems in mkMakefile.tcldefs.sh.in and mkMakefile.tkdefs.sh.in(Tom)
19825 This is to re-use space on index pages freed by vacuum(Vadim)
19826 document -x for pg_dump(Bruce)
19827 Fix for unary operators in rule deparser(Tom)
19828 Comment out FileUnlink of excess segments during mdtruncate()(Tom)
19829 IRIX linking fix from Yu Cao &gt;yucao@falcon.kla-tencor.com&lt;
19830 Repair logic error in LIKE: should not return LIKE_ABORT
19831   when reach end of pattern before end of text(Tom)
19832 Repair incorrect cleanup of heap memory allocation during transaction abort(Tom)
19833 Updated version of pgaccess 0.98
19834     </programlisting>
19835    </para>
19836   </sect2>
19837  </sect1>
19838
19839  <sect1 id="release-6-5-1">
19840   <title>Release 6.5.1</title>
19841
19842   <note>
19843   <title>Release date</title>
19844   <simpara>1999-07-15</simpara>
19845   </note>
19846
19847   <para>
19848    This is basically a cleanup release for 6.5.  We have fixed a variety of
19849    problems reported by 6.5 users.
19850   </para>
19851
19852   <sect2>
19853    <title>Migration to Version 6.5.1</title>
19854
19855    <para>
19856     A dump/restore is <emphasis>not</emphasis> required for those running
19857     6.5.
19858    </para>
19859   </sect2>
19860
19861   <sect2>
19862    <title>Changes</title>
19863
19864    <para>
19865     <programlisting>
19866 Add NT README file
19867 Portability fixes for linux_ppc, IRIX, linux_alpha, OpenBSD, alpha
19868 Remove QUERY_LIMIT, use SELECT...LIMIT
19869 Fix for EXPLAIN on inheritance(Tom)
19870 Patch to allow vacuum on multisegment tables(Hiroshi)
19871 R-Tree optimizer selectivity fix(Tom)
19872 ACL file descriptor leak fix(Atsushi Ogawa)
19873 New expression subtree code(Tom)
19874 Avoid disk writes for read-only transactions(Vadim)
19875 Fix for removal of temp tables if last transaction was aborted(Bruce)
19876 Fix to prevent too large row from being created(Bruce)
19877 plpgsql fixes
19878 Allow port numbers 32k - 64k(Bruce)
19879 Add ^ precedence(Bruce)
19880 Rename sort files called pg_temp to pg_sorttemp(Bruce)
19881 Fix for microseconds in time values(Tom)
19882 Tutorial source cleanup
19883 New linux_m68k port
19884 Fix for sorting of NULL's in some cases(Tom)
19885 Shared library dependencies fixed (Tom)
19886 Fixed glitches affecting GROUP BY in subselects(Tom)
19887 Fix some compiler warnings (Tomoaki Nishiyama)
19888 Add Win1250 (Czech) support (Pavel Behal)
19889     </programlisting>
19890    </para>
19891   </sect2>
19892  </sect1>
19893
19894  <sect1 id="release-6-5">
19895   <title>Release 6.5</title>
19896
19897   <note>
19898   <title>Release date</title>
19899   <simpara>1999-06-09</simpara>
19900   </note>
19901
19902   <para>
19903    This release marks a major step in the development team's mastery of the source
19904    code we inherited from Berkeley.  You will see we are now easily adding
19905    major features, thanks to the increasing size and experience of our
19906    world-wide development team.
19907   </para>
19908
19909   <para>
19910    Here is a brief summary of the more notable changes:
19911
19912    <variablelist>
19913     <varlistentry>
19914      <term>
19915       Multiversion concurrency control(MVCC)
19916      </term>
19917      <listitem>
19918       <para>
19919        This removes our old table-level locking, and replaces it with
19920        a locking system that is superior to most commercial database
19921        systems.  In a traditional system, each row that is modified
19922        is locked until committed, preventing reads by other users.
19923        MVCC uses the natural multiversion nature of
19924        <productname>PostgreSQL</productname> to allow readers to
19925        continue reading consistent data during writer activity.
19926        Writers continue to use the compact pg_log transaction system.
19927        This is all performed without having to allocate a lock for
19928        every row like traditional database systems.  So, basically,
19929        we no longer are restricted by simple table-level locking; we
19930        have something better than row-level locking.
19931       </para>
19932      </listitem>
19933     </varlistentry>
19934
19935     <varlistentry>
19936      <term>
19937       Hot backups from <application>pg_dump</application>
19938      </term>
19939      <listitem>
19940       <para>
19941        <application>pg_dump</application> takes advantage of the new
19942        MVCC features to give a consistent database dump/backup while
19943        the database stays online and available for queries.
19944       </para>
19945      </listitem>
19946     </varlistentry>
19947
19948     <varlistentry>
19949      <term>
19950       Numeric data type
19951      </term>
19952      <listitem>
19953       <para>
19954        We now have a true numeric data type, with
19955        user-specified precision.
19956       </para>
19957      </listitem>
19958     </varlistentry>
19959
19960     <varlistentry>
19961      <term>
19962       Temporary tables
19963      </term>
19964      <listitem>
19965       <para>
19966        Temporary tables are guaranteed to have unique names
19967        within a database session, and are destroyed on session exit.
19968       </para>
19969      </listitem>
19970     </varlistentry>
19971
19972     <varlistentry>
19973      <term>
19974       New SQL features
19975      </term>
19976      <listitem>
19977       <para>
19978        We now have CASE, INTERSECT, and EXCEPT statement
19979        support.  We have new LIMIT/OFFSET, SET TRANSACTION ISOLATION LEVEL,
19980        SELECT ... FOR UPDATE, and an improved LOCK TABLE command.
19981       </para>
19982      </listitem>
19983     </varlistentry>
19984
19985     <varlistentry>
19986      <term>
19987       Speedups
19988      </term>
19989      <listitem>
19990       <para>
19991        We continue to speed up <productname>PostgreSQL</productname>,
19992        thanks to the variety of talents within our team.  We have
19993        sped up memory allocation, optimization, table joins, and row
19994        transfer routines.
19995       </para>
19996      </listitem>
19997     </varlistentry>
19998
19999     <varlistentry>
20000      <term>
20001       Ports
20002      </term>
20003      <listitem>
20004       <para>
20005        We continue to expand our port list, this time including
20006        <systemitem class="osname">Windows NT</>/<systemitem>ix86</> and <systemitem class="osname">NetBSD</>/<systemitem>arm32</>.
20007       </para>
20008      </listitem>
20009     </varlistentry>
20010
20011     <varlistentry>
20012      <term>
20013       Interfaces
20014      </term>
20015      <listitem>
20016       <para>
20017        Most interfaces have new versions, and existing functionality
20018        has been improved.
20019       </para>
20020      </listitem>
20021     </varlistentry>
20022
20023     <varlistentry>
20024      <term>
20025       Documentation
20026      </term>
20027      <listitem>
20028       <para>
20029        New and updated material is present throughout the
20030        documentation. New <acronym>FAQ</acronym>s have been
20031        contributed for <systemitem class="osname">SGI</> and <systemitem class="osname">AIX</> platforms.
20032        The <citetitle>Tutorial</citetitle> has introductory information
20033        on <acronym>SQL</acronym> from Stefan Simkovics.
20034        For the <citetitle>User's Guide</citetitle>, there are
20035        reference pages covering the postmaster and more utility
20036        programs, and a new appendix
20037        contains details on date/time behavior.
20038        The <citetitle>Administrator's Guide</citetitle> has a new
20039        chapter on troubleshooting from Tom Lane.
20040        And the <citetitle>Programmer's Guide</citetitle> has a
20041        description of query processing, also from Stefan, and details
20042        on obtaining the <productname>PostgreSQL</productname> source
20043        tree via anonymous <productname>CVS</productname> and
20044        <productname>CVSup</productname>.
20045       </para>
20046      </listitem>
20047     </varlistentry>
20048    </variablelist>
20049   </para>
20050
20051   <sect2>
20052    <title>Migration to Version 6.5</title>
20053
20054    <para>
20055     A dump/restore using <application>pg_dump</application>
20056     is required for those wishing to migrate data from any
20057     previous release of <productname>PostgreSQL</productname>.
20058     <application>pg_upgrade</application> can <emphasis>not</emphasis>
20059     be used to upgrade to this release because the on-disk structure
20060     of the tables has changed compared to previous releases.
20061    </para>
20062
20063    <para>
20064     The new Multiversion Concurrency Control (MVCC) features can
20065     give somewhat different behaviors in multiuser
20066     environments. <emphasis>Read and understand the following section
20067      to ensure that your existing applications will give you the
20068      behavior you need.</emphasis>
20069    </para>
20070
20071    <sect3>
20072     <title>Multiversion Concurrency Control</title>
20073
20074     <para>
20075      Because readers in 6.5 don't lock data, regardless of transaction
20076      isolation level, data read by one transaction can be overwritten by
20077      another. In other words, if a row is returned by
20078      <command>SELECT</command> it doesn't mean that this row really exists
20079      at the time it is returned (i.e. sometime after the statement or
20080      transaction began) nor that the row is protected from being deleted or
20081      updated by concurrent transactions before the current transaction does
20082      a commit or rollback.
20083     </para>
20084
20085     <para>
20086      To ensure the actual existence of a row and protect it against
20087      concurrent updates one must use <command>SELECT FOR UPDATE</command> or
20088      an appropriate <command>LOCK TABLE</command> statement. This should be
20089      taken into account when porting applications from previous releases of
20090      <productname>PostgreSQL</productname> and other environments.
20091     </para>
20092
20093     <para>
20094      Keep the above in mind if you are using
20095      <filename>contrib/refint.*</filename> triggers for
20096      referential integrity. Additional techniques are required now. One way is
20097      to use <command>LOCK parent_table IN SHARE ROW EXCLUSIVE MODE</command>
20098      command if a transaction is going to update/delete a primary key and
20099      use <command>LOCK parent_table IN SHARE MODE</command> command if a
20100      transaction is going to update/insert a foreign key.
20101
20102      <note>
20103       <para>
20104        Note that if you run a transaction in SERIALIZABLE mode then you must
20105        execute the <command>LOCK</command> commands above before execution of any
20106        <acronym>DML</acronym> statement
20107        (<command>SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO</command>) in the
20108        transaction.
20109       </para>
20110      </note>
20111     </para>
20112
20113     <para>
20114      These inconveniences will disappear in the future
20115      when the ability to read dirty
20116      (uncommitted) data (regardless of isolation level) and true referential
20117      integrity will be implemented.
20118     </para>
20119    </sect3>
20120    </sect2>
20121
20122   <sect2>
20123    <title>Changes</title>
20124
20125    <para>
20126     <programlisting>
20127 Bug Fixes
20128 ---------
20129 Fix text&lt;-&gt;float8 and text&lt;-&gt;float4 conversion functions(Thomas)
20130 Fix for creating tables with mixed-case constraints(Billy)
20131 Change exp()/pow() behavior to generate error on underflow/overflow(Jan)
20132 Fix bug in pg_dump -z
20133 Memory overrun cleanups(Tatsuo)
20134 Fix for lo_import crash(Tatsuo)
20135 Adjust handling of data type names to suppress double quotes(Thomas)
20136 Use type coercion for matching columns and DEFAULT(Thomas)
20137 Fix deadlock so it only checks once after one second of sleep(Bruce)
20138 Fixes for aggregates and PL/pgsql(Hiroshi)
20139 Fix for subquery crash(Vadim)
20140 Fix for libpq function PQfnumber and case-insensitive names(Bahman Rafatjoo)
20141 Fix for large object write-in-middle, no extra block, memory consumption(Tatsuo)
20142 Fix for pg_dump -d or -D and  quote special characters in INSERT
20143 Repair serious problems with dynahash(Tom)
20144 Fix INET/CIDR portability problems
20145 Fix problem with selectivity error in ALTER TABLE ADD COLUMN(Bruce)
20146 Fix executor so mergejoin of different column types works(Tom)
20147 Fix for Alpha OR selectivity bug
20148 Fix OR index selectivity problem(Bruce)
20149 Fix so \d shows proper length for char()/varchar()(Ryan)
20150 Fix tutorial code(Clark)
20151 Improve destroyuser checking(Oliver)
20152 Fix for Kerberos(Rodney McDuff)
20153 Fix for dropping database while dirty buffers(Bruce)
20154 Fix so sequence nextval() can be case-sensitive(Bruce)
20155 Fix !!= operator
20156 Drop buffers before destroying database files(Bruce)
20157 Fix case where executor evaluates functions twice(Tatsuo)
20158 Allow sequence nextval actions to be case-sensitive(Bruce)
20159 Fix optimizer indexing not working for negative numbers(Bruce)
20160 Fix for memory leak in executor with fjIsNull
20161 Fix for aggregate memory leaks(Erik Riedel)
20162 Allow user name containing a dash to grant privileges
20163 Cleanup of NULL in inet types
20164 Clean up system table bugs(Tom)
20165 Fix problems of PAGER and \? command(Masaaki Sakaida)
20166 Reduce default multisegment file size limit to 1GB(Peter)
20167 Fix for dumping of CREATE OPERATOR(Tom)
20168 Fix for backward scanning of cursors(Hiroshi Inoue)
20169 Fix for COPY FROM STDIN when using \i(Tom)
20170 Fix for subselect is compared inside an expression(Jan)
20171 Fix handling of error reporting while returning rows(Tom)
20172 Fix problems with reference to array types(Tom,Jan)
20173 Prevent UPDATE SET oid(Jan)
20174 Fix pg_dump so -t option can handle case-sensitive tablenames
20175 Fixes for GROUP BY in special cases(Tom, Jan)
20176 Fix for memory leak in failed queries(Tom)
20177 DEFAULT now supports mixed-case identifiers(Tom)
20178 Fix for multisegment uses of DROP/RENAME table, indexes(Ole Gjerde)
20179 Disable use of pg_dump with both -o and -d options(Bruce)
20180 Allow pg_dump to properly dump group privileges(Bruce)
20181 Fix GROUP BY in INSERT INTO table SELECT * FROM table2(Jan)
20182 Fix for computations in views(Jan)
20183 Fix for aggregates on array indexes(Tom)
20184 Fix for DEFAULT handles single quotes in value requiring too many quotes
20185 Fix security problem with non-super users importing/exporting large objects(Tom)
20186 Rollback of transaction that creates table cleaned up properly(Tom)
20187 Fix to allow long table and column names to generate proper serial names(Tom)
20188
20189 Enhancements
20190 ------------
20191 Add "vacuumdb" utility
20192 Speed up libpq by allocating memory better(Tom)
20193 EXPLAIN all indexes used(Tom)
20194 Implement CASE, COALESCE, NULLIF  expression(Thomas)
20195 New pg_dump table output format(Constantin)
20196 Add string min()/max() functions(Thomas)
20197 Extend new type coercion techniques to aggregates(Thomas)
20198 New moddatetime contrib(Terry)
20199 Update to pgaccess 0.96(Constantin)
20200 Add routines for single-byte "char" type(Thomas)
20201 Improved substr() function(Thomas)
20202 Improved multibyte handling(Tatsuo)
20203 Multiversion concurrency control/MVCC(Vadim)
20204 New Serialized mode(Vadim)
20205 Fix for tables over 2gigs(Peter)
20206 New SET TRANSACTION ISOLATION LEVEL(Vadim)
20207 New LOCK TABLE IN ... MODE(Vadim)
20208 Update ODBC driver(Byron)
20209 New NUMERIC data type(Jan)
20210 New SELECT FOR UPDATE(Vadim)
20211 Handle "NaN" and "Infinity" for input values(Jan)
20212 Improved date/year handling(Thomas)
20213 Improved handling of backend connections(Magnus)
20214 New options ELOG_TIMESTAMPS and USE_SYSLOG options for log files(Massimo)
20215 New TCL_ARRAYS option(Massimo)
20216 New INTERSECT and EXCEPT(Stefan)
20217 New pg_index.indisprimary for primary key tracking(D'Arcy)
20218 New pg_dump option to allow dropping of tables before creation(Brook)
20219 Speedup of row output routines(Tom)
20220 New READ COMMITTED isolation level(Vadim)
20221 New TEMP tables/indexes(Bruce)
20222 Prevent sorting if result is already sorted(Jan)
20223 New memory allocation optimization(Jan)
20224 Allow psql to do \p\g(Bruce)
20225 Allow multiple rule actions(Jan)
20226 Added LIMIT/OFFSET functionality(Jan)
20227 Improve optimizer when joining a large number of tables(Bruce)
20228 New intro to SQL from S. Simkovics' Master's Thesis (Stefan, Thomas)
20229 New intro to backend processing from S. Simkovics' Master's Thesis (Stefan)
20230 Improved int8 support(Ryan Bradetich, Thomas, Tom)
20231 New routines to convert between int8 and text/varchar types(Thomas)
20232 New bushy plans, where meta-tables are joined(Bruce)
20233 Enable right-hand queries by default(Bruce)
20234 Allow reliable maximum number of backends to be set at configure time
20235      (--with-maxbackends and postmaster switch (-N backends))(Tom)
20236 GEQO default now 10 tables because of optimizer speedups(Tom)
20237 Allow NULL=Var for MS-SQL portability(Michael, Bruce)
20238 Modify contrib check_primary_key() so either "automatic" or "dependent"(Anand)
20239 Allow psql \d on a view show query(Ryan)
20240 Speedup for LIKE(Bruce)
20241 Ecpg fixes/features, see src/interfaces/ecpg/ChangeLog file(Michael)
20242 JDBC fixes/features, see src/interfaces/jdbc/CHANGELOG(Peter)
20243 Make % operator have precedence like /(Bruce)
20244 Add new postgres -O option to allow system table structure changes(Bruce)
20245 Update contrib/pginterface/findoidjoins script(Tom)
20246 Major speedup in vacuum of deleted rows with indexes(Vadim)
20247 Allow non-SQL functions to run different versions based on arguments(Tom)
20248 Add -E option that shows actual queries sent by \dt and friends(Masaaki Sakaida)
20249 Add version number in start-up banners for psql(Masaaki Sakaida)
20250 New contrib/vacuumlo removes large objects not referenced(Peter)
20251 New initialization for table sizes so non-vacuumed tables perform better(Tom)
20252 Improve error messages when a connection is rejected(Tom)
20253 Support for arrays of char() and varchar() fields(Massimo)
20254 Overhaul of hash code to increase reliability and performance(Tom)
20255 Update to PyGreSQL 2.4(D'Arcy)
20256 Changed debug options so -d4 and -d5 produce different node displays(Jan)
20257 New pg_options: pretty_plan, pretty_parse, pretty_rewritten(Jan)
20258 Better optimization statistics for system table access(Tom)
20259 Better handling of non-default block sizes(Massimo)
20260 Improve GEQO optimizer memory consumption(Tom)
20261 UNION now supports ORDER BY of columns not in target list(Jan)
20262 Major libpq++ improvements(Vince Vielhaber)
20263 pg_dump now uses -z(ACL's) as default(Bruce)
20264 backend cache, memory speedups(Tom)
20265 have pg_dump do everything in one snapshot transaction(Vadim)
20266 fix for large object memory leakage, fix for pg_dumping(Tom)
20267 INET type now respects netmask for comparisons
20268 Make VACUUM ANALYZE only use a readlock(Vadim)
20269 Allow VIEWs on UNIONS(Jan)
20270 pg_dump now can generate consistent snapshots on active databases(Vadim)
20271
20272 Source Tree Changes
20273 -------------------
20274 Improve port matching(Tom)
20275 Portability fixes for SunOS
20276 Add Windows NT backend port and enable dynamic loading(Magnus and Daniel Horak)
20277 New port to Cobalt Qube(Mips) running Linux(Tatsuo)
20278 Port to NetBSD/m68k(Mr. Mutsuki Nakajima)
20279 Port to NetBSD/sun3(Mr. Mutsuki Nakajima)
20280 Port to NetBSD/macppc(Toshimi Aoki)
20281 Fix for tcl/tk configuration(Vince)
20282 Removed CURRENT key word for rule queries(Jan)
20283 NT dynamic loading now works(Daniel Horak)
20284 Add ARM32 support(Andrew McMurry)
20285 Better support for HP-UX 11 and UnixWare
20286 Improve file handling to be more uniform, prevent file descriptor leak(Tom)
20287 New install commands for plpgsql(Jan)
20288     </programlisting>
20289    </para>
20290   </sect2>
20291  </sect1>
20292
20293
20294 <sect1 id="release-6-4-2">
20295 <title>Release 6.4.2</title>
20296
20297   <note>
20298   <title>Release date</title>
20299   <simpara>1998-12-20</simpara>
20300   </note>
20301
20302 <para>
20303 The 6.4.1 release was improperly packaged.  This also has one additional
20304 bug fix.
20305 </para>
20306
20307
20308 <sect2>
20309 <title>Migration to Version 6.4.2</title>
20310
20311 <para>
20312 A dump/restore is <emphasis>not</emphasis> required for those running
20313 6.4.*.
20314 </para>
20315 </sect2>
20316 <sect2>
20317 <title>Changes</title>
20318
20319 <para>
20320 <programlisting>
20321 Fix for datetime constant problem on some platforms(Thomas)
20322 </programlisting>
20323 </para>
20324 </sect2>
20325 </sect1>
20326
20327
20328
20329 <sect1 id="release-6-4-1">
20330 <title>Release 6.4.1</title>
20331
20332   <note>
20333   <title>Release date</title>
20334   <simpara>1998-12-18</simpara>
20335   </note>
20336
20337 <para>
20338 This is basically a cleanup release for 6.4.  We have fixed a variety of
20339 problems reported by 6.4 users.
20340 </para>
20341
20342
20343 <sect2>
20344 <title>Migration to Version 6.4.1</title>
20345
20346 <para>
20347 A dump/restore is <emphasis>not</emphasis> required for those running
20348 6.4.
20349 </para>
20350 </sect2>
20351 <sect2>
20352 <title>Changes</title>
20353
20354 <para>
20355 <programlisting>
20356 Add pg_dump -N flag to force double quotes around identifiers.  This is
20357        the default(Thomas)
20358 Fix for NOT in where clause causing crash(Bruce)
20359 EXPLAIN VERBOSE coredump fix(Vadim)
20360 Fix shared-library problems on Linux
20361 Fix test for table existence to allow mixed-case and whitespace in
20362        the table name(Thomas)
20363 Fix a couple of pg_dump bugs
20364 Configure matches template/.similar entries better(Tom)
20365 Change builtin function names from SPI_* to spi_*
20366 OR WHERE clause fix(Vadim)
20367 Fixes for mixed-case table names(Billy)
20368 contrib/linux/postgres.init.csh/sh fix(Thomas)
20369 libpq memory overrun fix
20370 SunOS fixes(Tom)
20371 Change exp() behavior to generate error on underflow(Thomas)
20372 pg_dump fixes for memory leak, inheritance constraints, layout change
20373 update pgaccess to 0.93
20374 Fix prototype for 64-bit platforms
20375 Multibyte fixes(Tatsuo)
20376 New ecpg man page
20377 Fix memory overruns(Tatsuo)
20378 Fix for lo_import() crash(Bruce)
20379 Better search for install program(Tom)
20380 Timezone fixes(Tom)
20381 HP-UX fixes(Tom)
20382 Use implicit type coercion for matching DEFAULT values(Thomas)
20383 Add routines to help with single-byte (internal) character type(Thomas)
20384 Compilation of libpq for Windows fixes(Magnus)
20385 Upgrade to PyGreSQL 2.2(D'Arcy)
20386 </programlisting>
20387 </para>
20388 </sect2>
20389 </sect1>
20390
20391
20392
20393 <sect1 id="release-6-4">
20394 <title>Release 6.4</title>
20395
20396   <note>
20397   <title>Release date</title>
20398   <simpara>1998-10-30</simpara>
20399   </note>
20400
20401 <para>
20402 There are <emphasis>many</emphasis> new features and improvements in this release.
20403 Thanks to our developers and maintainers, nearly every aspect of the system
20404 has received some attention since the previous release.
20405 Here is a brief, incomplete summary:
20406
20407 <itemizedlist>
20408 <listitem>
20409 <para>
20410 Views and rules are now functional thanks to extensive new code in the
20411 rewrite rules system from Jan Wieck. He also wrote a chapter on it
20412 for the <citetitle>Programmer's Guide</citetitle>.
20413 </para>
20414 </listitem>
20415 <listitem>
20416 <para>
20417 Jan also contributed a second procedural language, <application>PL/pgSQL</application>, to go with the
20418 original <application>PL/pgTCL</application> procedural language he contributed last release.
20419 </para>
20420 </listitem>
20421
20422 <listitem>
20423 <para>
20424 We have optional multiple-byte character set support from Tatsuo Ishii
20425 to complement our existing locale support.
20426 </para>
20427 </listitem>
20428
20429 <listitem>
20430 <para>
20431 Client/server communications has been cleaned up, with better support for
20432 asynchronous messages and interrupts thanks to Tom Lane.
20433 </para>
20434 </listitem>
20435
20436 <listitem>
20437 <para>
20438 The parser will now perform automatic type coercion to match arguments
20439 to available operators and functions, and to match columns and expressions
20440 with target columns. This uses a generic mechanism which supports
20441 the type extensibility features of <productname>PostgreSQL</productname>.
20442 There is a new chapter in the <citetitle>User's Guide</citetitle>
20443 which covers this topic.
20444 </para>
20445 </listitem>
20446
20447 <listitem>
20448 <para>
20449 Three new data types have been added.
20450 Two types, <type>inet</type> and <type>cidr</type>, support various forms
20451 of IP network, subnet, and machine addressing. There is now an 8-byte integer
20452 type available on some platforms. See the chapter on data types
20453 in the <citetitle>User's Guide</citetitle> for details.
20454 A fourth type, <type>serial</type>, is now supported by the parser as an
20455 amalgam of the <type>int4</type> type, a sequence, and a unique index.
20456 </para>
20457 </listitem>
20458
20459 <listitem>
20460 <para>
20461 Several more <acronym>SQL92</acronym>-compatible syntax features have been
20462 added, including <command>INSERT DEFAULT VALUES</command>
20463 </para>
20464 </listitem>
20465
20466 <listitem>
20467 <para>
20468 The automatic configuration and installation system has received some
20469 attention, and should be more robust for more platforms than it has ever
20470 been.
20471 </para>
20472 </listitem>
20473
20474 </itemizedlist>
20475 </para>
20476
20477 <sect2>
20478 <title>Migration to Version 6.4</title>
20479
20480 <para>
20481 A dump/restore using <application>pg_dump</application>
20482 or <application>pg_dumpall</application>
20483 is required for those wishing to migrate data from any
20484 previous release of <productname>PostgreSQL</productname>.
20485 </para>
20486 </sect2>
20487
20488   <sect2>
20489 <title>Changes</title>
20490
20491    <para>
20492     <programlisting>
20493 Bug Fixes
20494 ---------
20495 Fix for a tiny memory leak in PQsetdb/PQfinish(Bryan)
20496 Remove char2-16 data types, use char/varchar(Darren)
20497 Pqfn not handles a NOTICE message(Anders)
20498 Reduced busywaiting overhead for spinlocks with many backends (dg)
20499 Stuck spinlock detection (dg)
20500 Fix up "ISO-style" timespan decoding and encoding(Thomas)
20501 Fix problem with table drop after rollback of transaction(Vadim)
20502 Change error message and remove non-functional update message(Vadim)
20503 Fix for COPY array checking
20504 Fix for SELECT 1 UNION SELECT NULL
20505 Fix for buffer leaks in large object calls(Pascal)
20506 Change owner from oid to int4 type(Bruce)
20507 Fix a bug in the oracle compatibility functions btrim() ltrim() and rtrim()
20508 Fix for shared invalidation cache overflow(Massimo)
20509 Prevent file descriptor leaks in failed COPY's(Bruce)
20510 Fix memory leak in libpgtcl's pg_select(Constantin)
20511 Fix problems with username/passwords over 8 characters(Tom)
20512 Fix problems with handling of asynchronous NOTIFY in backend(Tom)
20513 Fix of many bad system table entries(Tom)
20514
20515 Enhancements
20516 ------------
20517 Upgrade ecpg and ecpglib,see src/interfaces/ecpc/ChangeLog(Michael)
20518 Show the index used in an EXPLAIN(Zeugswetter)
20519 EXPLAIN  invokes  rule system and shows plan(s) for rewritten queries(Jan)
20520 Multibyte awareness of many data types and functions, via configure(Tatsuo)
20521 New configure --with-mb option(Tatsuo)
20522 New initdb --pgencoding option(Tatsuo)
20523 New createdb -E multibyte option(Tatsuo)
20524 Select version(); now returns PostgreSQL version(Jeroen)
20525 libpq now allows asynchronous clients(Tom)
20526 Allow cancel from client of backend query(Tom)
20527 psql now cancels query with Control-C(Tom)
20528 libpq users need not issue dummy queries to get NOTIFY messages(Tom)
20529 NOTIFY now sends sender's PID, so you can tell whether it was your own(Tom)
20530 PGresult struct now includes associated error message, if any(Tom)
20531 Define "tz_hour" and "tz_minute" arguments to date_part()(Thomas)
20532 Add routines to convert between varchar and bpchar(Thomas)
20533 Add routines to allow sizing of varchar and bpchar into target columns(Thomas)
20534 Add bit flags to support timezonehour and minute in data retrieval(Thomas)
20535 Allow more variations on valid floating point numbers (e.g. ".1", "1e6")(Thomas)
20536 Fixes for unary minus parsing with leading spaces(Thomas)
20537 Implement TIMEZONE_HOUR, TIMEZONE_MINUTE per SQL92 specs(Thomas)
20538 Check for and properly ignore FOREIGN KEY column constraints(Thomas)
20539 Define USER as synonym for CURRENT_USER per SQL92 specs(Thomas)
20540 Enable HAVING clause but no fixes elsewhere yet.
20541 Make "char" type a synonym for "char(1)" (actually implemented as bpchar)(Thomas)
20542 Save string type if specified for DEFAULT clause handling(Thomas)
20543 Coerce operations involving different data types(Thomas)
20544 Allow some index use for columns of different types(Thomas)
20545 Add capabilities for automatic type conversion(Thomas)
20546 Cleanups for large objects, so file is truncated on open(Peter)
20547 Readline cleanups(Tom)
20548 Allow psql  \f \ to make spaces as delimiter(Bruce)
20549 Pass pg_attribute.atttypmod to the frontend for column field lengths(Tom,Bruce)
20550 Msql compatibility library in /contrib(Aldrin)
20551 Remove the requirement that ORDER/GROUP BY clause identifiers be
20552 included in the target list(David)
20553 Convert columns to match columns in UNION clauses(Thomas)
20554 Remove fork()/exec() and only do fork()(Bruce)
20555 Jdbc cleanups(Peter)
20556 Show backend status on ps command line(only works on some platforms)(Bruce)
20557 Pg_hba.conf now has a sameuser option in the database field
20558 Make lo_unlink take oid param, not int4
20559 New DISABLE_COMPLEX_MACRO for compilers that cannot handle our macros(Bruce)
20560 Libpgtcl now handles NOTIFY as a Tcl event, need not send dummy queries(Tom)
20561 libpgtcl cleanups(Tom)
20562 Add -error option to libpgtcl's pg_result command(Tom)
20563 New locale patch, see docs/README/locale(Oleg)
20564 Fix for pg_dump so CONSTRAINT and CHECK syntax is correct(ccb)
20565 New contrib/lo code for large object orphan removal(Peter)
20566 New psql command "SET CLIENT_ENCODING TO 'encoding'" for multibytes
20567 feature, see /doc/README.mb(Tatsuo)
20568 contrib/noupdate code to revoke update permission on a column
20569 libpq can now be compiled on Windows(Magnus)
20570 Add PQsetdbLogin() in libpq
20571 New 8-byte integer type, checked by configure for OS support(Thomas)
20572 Better support for quoted table/column names(Thomas)
20573 Surround table and column names with double-quotes in pg_dump(Thomas)
20574 PQreset() now works with passwords(Tom)
20575 Handle case of GROUP BY target list column number out of range(David)
20576 Allow UNION in subselects
20577 Add auto-size to screen to \d? commands(Bruce)
20578 Use UNION to show all \d? results in one query(Bruce)
20579 Add \d? field search feature(Bruce)
20580 Pg_dump issues fewer \connect requests(Tom)
20581 Make pg_dump -z flag work better, document it in manual page(Tom)
20582 Add HAVING clause with full support for subselects and unions(Stephan)
20583 Full text indexing routines in contrib/fulltextindex(Maarten)
20584 Transaction ids now stored in shared memory(Vadim)
20585 New PGCLIENTENCODING when issuing COPY command(Tatsuo)
20586 Support for SQL92 syntax "SET NAMES"(Tatsuo)
20587 Support for LATIN2-5(Tatsuo)
20588 Add UNICODE regression test case(Tatsuo)
20589 Lock manager cleanup, new locking modes for LLL(Vadim)
20590 Allow index use with OR clauses(Bruce)
20591 Allows "SELECT NULL ORDER BY 1;"
20592 Explain VERBOSE prints the plan, and now pretty-prints the plan to
20593 the postmaster log file(Bruce)
20594 Add indexes display to \d command(Bruce)
20595 Allow GROUP BY on functions(David)
20596 New pg_class.relkind for large objects(Bruce)
20597 New way to send libpq NOTICE messages to a different location(Tom)
20598 New \w write command to psql(Bruce)
20599 New /contrib/findoidjoins scans oid columns to find join relationships(Bruce)
20600 Allow binary-compatible indexes to be considered when checking for valid
20601 Indexes for restriction clauses containing a constant(Thomas)
20602 New ISBN/ISSN code in /contrib/isbn_issn
20603 Allow NOT LIKE, IN, NOT IN, BETWEEN, and NOT BETWEEN constraint(Thomas)
20604 New rewrite system fixes many problems with rules and views(Jan)
20605        * Rules on relations work
20606        * Event qualifications on insert/update/delete work
20607        * New OLD variable to reference CURRENT, CURRENT will be remove in future
20608        * Update rules can reference NEW and OLD in rule qualifications/actions
20609        * Insert/update/delete rules on views work
20610        * Multiple rule actions are now supported, surrounded by parentheses
20611        * Regular users can create views/rules on tables they have RULE permits
20612        * Rules and views inherit the privileges of the creator
20613        * No rules at the column level
20614        * No UPDATE NEW/OLD rules
20615        * New pg_tables, pg_indexes, pg_rules and pg_views system views
20616        * Only a single action on SELECT rules
20617        * Total rewrite overhaul, perhaps for 6.5
20618        * handle subselects
20619        * handle aggregates on views
20620        * handle insert into select from view works
20621 System indexes are now multikey(Bruce)
20622 Oidint2, oidint4, and oidname types are removed(Bruce)
20623 Use system cache for more system table lookups(Bruce)
20624 New backend programming language PL/pgSQL in backend/pl(Jan)
20625 New SERIAL data type, auto-creates sequence/index(Thomas)
20626 Enable assert checking without a recompile(Massimo)
20627 User lock enhancements(Massimo)
20628 New setval() command to set sequence value(Massimo)
20629 Auto-remove unix socket file on start-up if no postmaster running(Massimo)
20630 Conditional trace package(Massimo)
20631 New UNLISTEN command(Massimo)
20632 psql and libpq now compile under Windows using win32.mak(Magnus)
20633 Lo_read no longer stores trailing NULL(Bruce)
20634 Identifiers are now truncated to 31 characters internally(Bruce)
20635 Createuser options now available on the command line
20636 Code for 64-bit integer supported added, configure tested, int8 type(Thomas)
20637 Prevent file descriptor leaf from failed COPY(Bruce)
20638 New pg_upgrade command(Bruce)
20639 Updated /contrib directories(Massimo)
20640 New CREATE TABLE DEFAULT VALUES statement available(Thomas)
20641 New INSERT INTO TABLE DEFAULT VALUES statement available(Thomas)
20642 New DECLARE and FETCH feature(Thomas)
20643 libpq's internal structures now not exported(Tom)
20644 Allow up to 8 key indexes(Bruce)
20645 Remove ARCHIVE key word, that is no longer used(Thomas)
20646 pg_dump -n flag to suppress quotes around indentifiers
20647 disable system columns for views(Jan)
20648 new INET and CIDR types for network addresses(TomH, Paul)
20649 no more double quotes in psql output
20650 pg_dump now dumps views(Terry)
20651 new SET QUERY_LIMIT(Tatsuo,Jan)
20652
20653 Source Tree Changes
20654 -------------------
20655 /contrib cleanup(Jun)
20656 Inline some small functions called for every row(Bruce)
20657 Alpha/linux fixes
20658 HP-UX cleanups(Tom)
20659 Multibyte regression tests(Soonmyung.)
20660 Remove --disabled options from configure
20661 Define PGDOC to use POSTGRESDIR by default
20662 Make regression optional
20663 Remove extra braces code to pgindent(Bruce)
20664 Add bsdi shared library support(Bruce)
20665 New --without-CXX support configure option(Brook)
20666 New FAQ_CVS
20667 Update backend flowchart in tools/backend(Bruce)
20668 Change atttypmod from int16 to int32(Bruce, Tom)
20669 Getrusage() fix for platforms that do not have it(Tom)
20670 Add PQconnectdb, PGUSER, PGPASSWORD to libpq man page
20671 NS32K platform fixes(Phil Nelson, John Buller)
20672 SCO 7/UnixWare 2.x fixes(Billy,others)
20673 Sparc/Solaris 2.5 fixes(Ryan)
20674 Pgbuiltin.3 is obsolete, move to doc files(Thomas)
20675 Even more documentation(Thomas)
20676 Nextstep support(Jacek)
20677 Aix support(David)
20678 pginterface manual page(Bruce)
20679 shared libraries all have version numbers
20680 merged all OS-specific shared library defines into one file
20681 smarter TCL/TK configuration checking(Billy)
20682 smarter perl configuration(Brook)
20683 configure uses supplied install-sh if no install script found(Tom)
20684 new Makefile.shlib for shared library configuration(Tom)
20685 </programlisting>
20686 </para>
20687 </sect2>
20688 </sect1>
20689
20690 <sect1 id="release-6-3-2">
20691 <title>Release 6.3.2</title>
20692
20693   <note>
20694   <title>Release date</title>
20695   <simpara>1998-04-07</simpara>
20696   </note>
20697
20698 <para>
20699 This is a bug-fix release for 6.3.x.
20700 Refer to the release notes for version 6.3 for a more complete summary of new features.
20701 </para>
20702 <para>
20703 Summary:
20704
20705 <itemizedlist>
20706 <listitem>
20707 <para>
20708 Repairs automatic configuration support for some platforms, including Linux,
20709 from breakage inadvertently introduced in version 6.3.1.
20710 </para>
20711 </listitem>
20712
20713 <listitem>
20714 <para>
20715 Correctly handles function calls on the left side of BETWEEN and LIKE clauses.
20716 </para>
20717 </listitem>
20718
20719 </itemizedlist>
20720 </para>
20721 <para>
20722 A dump/restore is NOT required for those running 6.3 or 6.3.1.  A
20723 <literal>make distclean</>, <literal>make</>, and <literal>make install</> is all that is required.
20724 This last step should be performed while the postmaster is not running.
20725 You should re-link any custom applications that use <productname>PostgreSQL</productname> libraries.
20726 </para>
20727 <para>
20728 For upgrades from pre-6.3 installations,
20729 refer to the installation and migration instructions for version 6.3.
20730 </para>
20731
20732   <sect2>
20733    <title>Changes</title>
20734
20735    <para>
20736     <programlisting>
20737 Configure detection improvements for tcl/tk(Brook Milligan, Alvin)
20738 Manual page improvements(Bruce)
20739 BETWEEN and LIKE fix(Thomas)
20740 fix for psql \connect used by pg_dump(Oliver Elphick)
20741 New odbc driver
20742 pgaccess, version 0.86
20743 qsort removed, now uses libc version, cleanups(Jeroen)
20744 fix for buffer over-runs detected(Maurice Gittens)
20745 fix for buffer overrun in libpgtcl(Randy Kunkee)
20746 fix for UNION with DISTINCT or ORDER BY(Bruce)
20747 gettimeofday configure check(Doug Winterburn)
20748 Fix "indexes not used" bug(Vadim)
20749 docs additions(Thomas)
20750 Fix for backend memory leak(Bruce)
20751 libreadline cleanup(Erwan MAS)
20752 Remove DISTDIR(Bruce)
20753 Makefile dependency cleanup(Jeroen van Vianen)
20754 ASSERT fixes(Bruce)
20755     </programlisting>
20756    </para>
20757   </sect2>
20758  </sect1>
20759
20760  <sect1 id="release-6-3-1">
20761   <title>Release 6.3.1</title>
20762
20763   <note>
20764   <title>Release date</title>
20765   <simpara>1998-03-23</simpara>
20766   </note>
20767
20768   <para>
20769    Summary:
20770
20771 <itemizedlist>
20772 <listitem>
20773 <para>
20774 Additional support for multibyte character sets.
20775 </para>
20776 </listitem>
20777
20778 <listitem>
20779 <para>
20780 Repair byte ordering for mixed-endian clients and servers.
20781 </para>
20782 </listitem>
20783
20784 <listitem>
20785 <para>
20786 Minor updates to allowed SQL syntax.
20787 </para>
20788 </listitem>
20789
20790 <listitem>
20791 <para>
20792 Improvements to the configuration autodetection for installation.
20793 </para>
20794 </listitem>
20795
20796 </itemizedlist>
20797 </para>
20798 <para>
20799 A dump/restore is NOT required for those running 6.3.  A
20800 <literal>make distclean</>, <literal>make</>, and <literal>make install</> is all that is required.
20801 This last step should be performed while the postmaster is not running.
20802 You should re-link any custom applications that use <productname>PostgreSQL</productname> libraries.
20803 </para>
20804 <para>
20805 For upgrades from pre-6.3 installations,
20806 refer to the installation and migration instructions for version 6.3.
20807 </para>
20808
20809   <sect2>
20810    <title>Changes</title>
20811
20812    <para>
20813     <programlisting>
20814 ecpg cleanup/fixes, now version 1.1(Michael Meskes)
20815 pg_user cleanup(Bruce)
20816 large object fix for pg_dump and tclsh (alvin)
20817 LIKE fix for multiple adjacent underscores
20818 fix for redefining builtin functions(Thomas)
20819 ultrix4 cleanup
20820 upgrade to pg_access 0.83
20821 updated CLUSTER manual page
20822 multibyte character set support, see doc/README.mb(Tatsuo)
20823 configure --with-pgport fix
20824 pg_ident fix
20825 big-endian fix for backend communications(Kataoka)
20826 SUBSTR() and substring() fix(Jan)
20827 several jdbc fixes(Peter)
20828 libpgtcl improvements, see libptcl/README(Randy Kunkee)
20829 Fix for "Datasize = 0" error(Vadim)
20830 Prevent \do from wrapping(Bruce)
20831 Remove duplicate Russian character set entries
20832 Sunos4 cleanup
20833 Allow optional TABLE key word in LOCK and SELECT INTO(Thomas)
20834 CREATE SEQUENCE options to allow a negative integer(Thomas)
20835 Add "PASSWORD" as an allowed column identifier(Thomas)
20836 Add checks for UNION target fields(Bruce)
20837 Fix Alpha port(Dwayne Bailey)
20838 Fix for text arrays containing quotes(Doug Gibson)
20839 Solaris compile fix(Albert Chin-A-Young)
20840 Better identify tcl and tk libs and includes(Bruce)
20841     </programlisting>
20842    </para>
20843   </sect2>
20844  </sect1>
20845
20846  <sect1 id="release-6-3">
20847   <title>Release 6.3</title>
20848
20849   <note>
20850   <title>Release date</title>
20851   <simpara>1998-03-01</simpara>
20852   </note>
20853
20854   <para>
20855    There are <emphasis>many</emphasis> new features and improvements in this release.
20856    Here is a brief, incomplete summary:
20857
20858    <itemizedlist>
20859     <listitem>
20860      <para>
20861       Many new SQL features, including
20862       full <acronym>SQL92</acronym> subselect capability
20863       (everything is here but target-list subselects).
20864      </para>
20865     </listitem>
20866
20867     <listitem>
20868      <para>
20869       Support for client-side environment variables to specify time zone and date style.
20870      </para>
20871     </listitem>
20872
20873     <listitem>
20874      <para>
20875       Socket interface for client/server connection. This is the default now
20876       so you might need to start <application>postmaster</application> with the
20877       <option>-i</option> flag.
20878      </para>
20879     </listitem>
20880
20881     <listitem>
20882      <para>
20883       Better password authorization mechanisms. Default table privileges have changed.
20884      </para>
20885     </listitem>
20886
20887     <listitem>
20888      <para>
20889       Old-style <firstterm>time travel</firstterm>
20890       has been removed. Performance has been improved.
20891      </para>
20892     </listitem>
20893    </itemizedlist>
20894   </para>
20895
20896   <note>
20897    <para>
20898     Bruce Momjian wrote the following notes to introduce the new release.
20899    </para>
20900   </note>
20901
20902   <para>
20903    There are some general 6.3 issues that I want to mention.  These are
20904    only the big items that cannot be described in one sentence.  A review
20905    of the detailed changes list is still needed.
20906   </para>
20907   <para>
20908    First, we now have subselects.  Now that we have them, I would like to
20909    mention that without subselects, SQL is a very limited language.
20910    Subselects are a major feature, and you should review your code for
20911    places where subselects provide a better solution for your queries.  I
20912    think you will find that there are more uses for subselects than you might
20913    think.  Vadim has put us on the big SQL map with subselects, and fully
20914    functional ones too.  The only thing you cannot do with subselects is to
20915    use them in the target list.
20916   </para>
20917   <para>
20918    Second, 6.3 uses Unix domain sockets rather than TCP/IP by default.  To
20919    enable connections from other machines, you have to use the new
20920    postmaster -i option, and of course edit <filename>pg_hba.conf</filename>.  Also, for this
20921    reason, the format of <filename>pg_hba.conf</filename> has changed.
20922   </para>
20923   <para>
20924    Third, <type>char()</type> fields will now allow faster access than <type>varchar()</type> or
20925    <type>text</type>. Specifically, the <type>text</> and <type>varchar()</type> have a penalty for access to
20926    any columns after the first column of this type.  <type>char()</type> used to also
20927    have this access penalty, but it no longer does.  This might suggest that
20928    you redesign some of your tables, especially if you have short character
20929    columns that you have defined as <type>varchar()</type> or <type>text</type>.  This and other
20930    changes make 6.3 even faster than earlier releases.
20931   </para>
20932   <para>
20933    We now have passwords definable independent of any Unix file.  There are
20934    new SQL USER commands.
20935    See the <citetitle>Administrator's Guide</citetitle> for more
20936    information.  There is a new table, pg_shadow, which is used to store
20937    user information and user passwords, and it by default only SELECT-able
20938    by the <systemitem>postgres</systemitem> super-user.  pg_user is now a view of pg_shadow, and is
20939    SELECT-able by PUBLIC.  You should keep using pg_user in your
20940    application without changes.
20941   </para>
20942   <para>
20943    User-created tables now no longer have SELECT privilege to PUBLIC by
20944    default.  This was done because the ANSI standard requires it.  You can
20945    of course GRANT any privileges you want after the table is created.
20946    System tables continue to be SELECT-able by PUBLIC.
20947   </para>
20948   <para>
20949    We also have real deadlock detection code.  No more sixty-second
20950    timeouts.  And the new locking code implements a <acronym>FIFO</acronym> better, so there
20951    should be less resource starvation during heavy use.
20952   </para>
20953   <para>
20954    Many complaints have been made about inadequate documentation in previous
20955    releases.  Thomas has put much effort into many new manuals for this
20956    release.  Check out the doc/ directory.
20957   </para>
20958   <para>
20959    For performance reasons, time travel is gone, but can be implemented
20960    using triggers (see <filename>pgsql/contrib/spi/README</filename>).  Please check out the new
20961    \d command for types, operators, etc.  Also, views have their own
20962    privileges now, not based on the underlying tables, so privileges on
20963    them have to be set separately.  Check <filename>/pgsql/interfaces</filename> for some new
20964    ways to talk to <productname>PostgreSQL</productname>.
20965   </para>
20966   <para>
20967    This is the first release that really required an explanation for
20968    existing users.  In many ways, this was necessary because the new
20969    release removes many limitations, and the work-arounds people were using
20970    are no longer needed.
20971   </para>
20972
20973   <sect2>
20974    <title>Migration to Version 6.3</title>
20975
20976    <para>
20977     A dump/restore using <application>pg_dump</application>
20978     or <application>pg_dumpall</application>
20979     is required for those wishing to migrate data from any
20980     previous release of <productname>PostgreSQL</productname>.
20981    </para>
20982   </sect2>
20983
20984   <sect2>
20985    <title>Changes</title>
20986
20987    <para>
20988     <programlisting>
20989 Bug Fixes
20990 ---------
20991 Fix binary cursors broken by MOVE implementation(Vadim)
20992 Fix for tcl library crash(Jan)
20993 Fix for array handling, from Gerhard Hintermayer
20994 Fix acl error, and remove duplicate pqtrace(Bruce)
20995 Fix psql \e for empty file(Bruce)
20996 Fix for textcat on varchar() fields(Bruce)
20997 Fix for DBT Sendproc (Zeugswetter Andres)
20998 Fix vacuum analyze syntax problem(Bruce)
20999 Fix for international identifiers(Tatsuo)
21000 Fix aggregates on inherited tables(Bruce)
21001 Fix substr() for out-of-bounds data
21002 Fix for select 1=1 or 2=2, select 1=1 and 2=2, and select sum(2+2)(Bruce)
21003 Fix notty output to show status result.  -q option still turns it off(Bruce)
21004 Fix for count(*), aggs with views and multiple tables and sum(3)(Bruce)
21005 Fix cluster(Bruce)
21006 Fix for PQtrace start/stop several times(Bruce)
21007 Fix a variety of locking problems like newer lock waiters getting
21008        lock before older waiters, and having readlock people not share
21009        locks if a writer is waiting for a lock, and waiting writers not
21010        getting priority over waiting readers(Bruce)
21011 Fix crashes in psql when executing queries from external files(James)
21012 Fix problem with multiple order by columns, with the first one having
21013        NULL values(Jeroen)
21014 Use correct hash table support functions for float8 and int4(Thomas)
21015 Re-enable JOIN= option in CREATE OPERATOR statement (Thomas)
21016 Change precedence for boolean operators to match expected behavior(Thomas)
21017 Generate elog(ERROR) on over-large integer(Bruce)
21018 Allow multiple-argument functions in constraint clauses(Thomas)
21019 Check boolean input literals for 'true','false','yes','no','1','0'
21020        and throw elog(ERROR) if unrecognized(Thomas)
21021 Major large objects fix
21022 Fix for GROUP BY showing duplicates(Vadim)
21023 Fix for index scans in MergeJoin(Vadim)
21024
21025 Enhancements
21026 ------------
21027 Subselects with EXISTS, IN, ALL, ANY key words (Vadim, Bruce, Thomas)
21028 New User Manual(Thomas, others)
21029 Speedup by inlining some frequently-called functions
21030 Real deadlock detection, no more timeouts(Bruce)
21031 Add SQL92 "constants" CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP,
21032        CURRENT_USER(Thomas)
21033 Modify constraint syntax to be SQL92-compliant(Thomas)
21034 Implement SQL92 PRIMARY KEY and UNIQUE clauses using indexes(Thomas)
21035 Recognize SQL92 syntax for FOREIGN KEY. Throw elog notice(Thomas)
21036 Allow NOT NULL UNIQUE constraint clause (each allowed separately before)(Thomas)
21037 Allow PostgreSQL-style casting ("::") of non-constants(Thomas)
21038 Add support for SQL3 TRUE and FALSE boolean constants(Thomas)
21039 Support SQL92 syntax for IS TRUE/IS FALSE/IS NOT TRUE/IS NOT FALSE(Thomas)
21040 Allow shorter strings for boolean literals (e.g. "t", "tr", "tru")(Thomas)
21041 Allow SQL92 delimited identifiers(Thomas)
21042 Implement SQL92 binary and hexadecimal string decoding (b'10' and x'1F')(Thomas)
21043 Support SQL92 syntax for type coercion of literal strings
21044        (e.g. "DATETIME 'now'")(Thomas)
21045 Add conversions for int2, int4, and OID types to and from text(Thomas)
21046 Use shared lock when building indexes(Vadim)
21047 Free memory allocated for an user query inside transaction block after
21048        this query is done, was turned off in &lt;= 6.2.1(Vadim)
21049 New SQL statement CREATE PROCEDURAL LANGUAGE(Jan)
21050 New <productname>PostgreSQL</productname> Procedural Language (PL) backend interface(Jan)
21051 Rename pg_dump -H option to -h(Bruce)
21052 Add Java support for passwords, European dates(Peter)
21053 Use indexes for LIKE and ~, !~ operations(Bruce)
21054 Add hash functions for datetime and timespan(Thomas)
21055 Time Travel removed(Vadim, Bruce)
21056 Add paging for \d and \z, and fix \i(Bruce)
21057 Add Unix domain socket support to backend and to frontend library(Goran)
21058 Implement CREATE DATABASE/WITH LOCATION and initlocation utility(Thomas)
21059 Allow more SQL92 and/or <productname>PostgreSQL</productname> reserved words as column identifiers(Thomas)
21060 Augment support for SQL92 SET TIME ZONE...(Thomas)
21061 SET/SHOW/RESET TIME ZONE uses TZ backend environment variable(Thomas)
21062 Implement SET keyword = DEFAULT and SET TIME ZONE DEFAULT(Thomas)
21063 Enable SET TIME ZONE using TZ environment variable(Thomas)
21064 Add PGDATESTYLE environment variable to frontend and backend initialization(Thomas)
21065 Add PGTZ, PGCOSTHEAP, PGCOSTINDEX, PGRPLANS, PGGEQO
21066        frontend library initialization environment variables(Thomas)
21067 Regression tests time zone automatically set with "setenv PGTZ PST8PDT"(Thomas)
21068 Add pg_description table for info on tables, columns, operators, types, and
21069        aggregates(Bruce)
21070 Increase 16 char limit on system table/index names to 32 characters(Bruce)
21071 Rename system indexes(Bruce)
21072 Add 'GERMAN' option to SET DATESTYLE(Thomas)
21073 Define an "ISO-style" timespan output format with "hh:mm:ss" fields(Thomas)
21074 Allow fractional values for delta times (e.g. '2.5 days')(Thomas)
21075 Validate numeric input more carefully for delta times(Thomas)
21076 Implement day of year as possible input to date_part()(Thomas)
21077 Define timespan_finite() and text_timespan() functions(Thomas)
21078 Remove archive stuff(Bruce)
21079 Allow for a pg_password authentication database that is separate from
21080        the system password file(Todd)
21081 Dump ACLs, GRANT, REVOKE privileges(Matt)
21082 Define text, varchar, and bpchar string length functions(Thomas)
21083 Fix Query handling for inheritance, and cost computations(Bruce)
21084 Implement CREATE TABLE/AS SELECT (alternative to SELECT/INTO)(Thomas)
21085 Allow NOT, IS NULL, IS NOT NULL in constraints(Thomas)
21086 Implement UNIONs for SELECT(Bruce)
21087 Add UNION, GROUP, DISTINCT to INSERT(Bruce)
21088 varchar() stores only necessary bytes on disk(Bruce)
21089 Fix for BLOBs(Peter)
21090 Mega-Patch for JDBC...see README_6.3 for list of changes(Peter)
21091 Remove unused "option" from PQconnectdb()
21092 New LOCK command and lock manual page describing deadlocks(Bruce)
21093 Add new psql \da, \dd, \df, \do, \dS, and \dT commands(Bruce)
21094 Enhance psql \z to show sequences(Bruce)
21095 Show NOT NULL and DEFAULT in psql \d table(Bruce)
21096 New psql .psqlrc file start-up(Andrew)
21097 Modify sample start-up script in contrib/linux to show syslog(Thomas)
21098 New types for IP and MAC addresses in contrib/ip_and_mac(TomH)
21099 Unix system time conversions with date/time types in contrib/unixdate(Thomas)
21100 Update of contrib stuff(Massimo)
21101 Add Unix socket support to DBD::Pg(Goran)
21102 New python interface (PyGreSQL 2.0)(D'Arcy)
21103 New frontend/backend protocol has a version number, network byte order(Phil)
21104 Security features in pg_hba.conf enhanced and documented, many cleanups(Phil)
21105 CHAR() now faster access than VARCHAR() or TEXT
21106 ecpg embedded SQL preprocessor
21107 Reduce system column overhead(Vadmin)
21108 Remove pg_time table(Vadim)
21109 Add pg_type attribute to identify types that need length (bpchar, varchar)
21110 Add report of offending line when COPY command fails
21111 Allow VIEW privileges to be set separately from the underlying tables.
21112        For security, use GRANT/REVOKE on views as appropriate(Jan)
21113 Tables now have no default GRANT SELECT TO PUBLIC.  You must
21114        explicitly grant such privileges.
21115 Clean up tutorial examples(Darren)
21116
21117 Source Tree Changes
21118 -------------------
21119 Add new html development tools, and flow chart in /tools/backend
21120 Fix for SCO compiles
21121 Stratus computer port Robert Gillies
21122 Added support for shlib for BSD44_derived &amp; i386_solaris
21123 Make configure more automated(Brook)
21124 Add script to check regression test results
21125 Break parser functions into smaller files, group together(Bruce)
21126 Rename heap_create to heap_create_and_catalog, rename heap_creatr
21127        to heap_create()(Bruce)
21128 Sparc/Linux patch for locking(TomS)
21129 Remove PORTNAME and reorganize port-specific stuff(Marc)
21130 Add optimizer README file(Bruce)
21131 Remove some recursion in optimizer and clean up some code there(Bruce)
21132 Fix for NetBSD locking(Henry)
21133 Fix for libptcl make(Tatsuo)
21134 AIX patch(Darren)
21135 Change IS TRUE, IS FALSE, ... to expressions using "=" rather than
21136        function calls to istrue() or isfalse() to allow optimization(Thomas)
21137 Various fixes NetBSD/Sparc related(TomH)
21138 Alpha linux locking(Travis,Ryan)
21139 Change elog(WARN) to elog(ERROR)(Bruce)
21140 FAQ for FreeBSD(Marc)
21141 Bring in the PostODBC source tree as part of our standard distribution(Marc)
21142 A minor patch for HP/UX 10 vs 9(Stan)
21143 New pg_attribute.atttypmod for type-specific info like varchar length(Bruce)
21144 UnixWare patches(Billy)
21145 New i386 'lock' for spinlock asm(Billy)
21146 Support for multiplexed backends is removed
21147 Start an OpenBSD port
21148 Start an AUX port
21149 Start a Cygnus port
21150 Add string functions to regression suite(Thomas)
21151 Expand a few function names formerly truncated to 16 characters(Thomas)
21152 Remove un-needed malloc() calls and replace with palloc()(Bruce)
21153 </programlisting>
21154 </para>
21155 </sect2>
21156 </sect1>
21157
21158 <sect1 id="release-6-2-1">
21159 <title>Release 6.2.1</title>
21160
21161   <note>
21162   <title>Release date</title>
21163   <simpara>1997-10-17</simpara>
21164   </note>
21165
21166 <para>
21167 6.2.1 is a bug-fix and usability release on 6.2.
21168 </para>
21169 <para>
21170 Summary:
21171
21172 <itemizedlist>
21173 <listitem>
21174 <para>
21175 Allow strings to span lines, per <acronym>SQL92</acronym>.
21176 </para>
21177 </listitem>
21178
21179 <listitem>
21180 <para>
21181 Include example trigger function for inserting user names on table updates.
21182 </para>
21183 </listitem>
21184
21185 </itemizedlist>
21186 </para>
21187 <para>
21188 This is a minor bug-fix release on 6.2.
21189 For upgrades from pre-6.2 systems, a full dump/reload is required.
21190 Refer to the 6.2 release notes for instructions.
21191 </para>
21192
21193 <sect2>
21194 <title>Migration from version 6.2 to version 6.2.1</title>
21195
21196 <para>
21197 This is a minor bug-fix release. A dump/reload is not required from version 6.2,
21198 but is required from any release prior to 6.2.
21199 </para>
21200 <para>
21201 In upgrading from version 6.2, if you choose to dump/reload you will find that
21202 avg(money) is now calculated correctly. All other bug fixes take effect
21203 upon updating the executables.
21204 </para>
21205 <para>
21206 Another way to avoid dump/reload is to use the following SQL command
21207 from <command>psql</command> to update the existing system table:
21208
21209 <programlisting>
21210  update pg_aggregate set aggfinalfn = 'cash_div_flt8'
21211   where aggname = 'avg' and aggbasetype = 790;
21212 </programlisting>
21213 </para>
21214 <para>
21215 This will need to be done to every existing database, including template1.
21216 </para>
21217 </sect2>
21218
21219   <sect2>
21220    <title>Changes</title>
21221
21222    <para>
21223     <programlisting>
21224 Allow TIME and TYPE column names(Thomas)
21225 Allow larger range of true/false as boolean values(Thomas)
21226 Support output of "now" and "current"(Thomas)
21227 Handle DEFAULT with INSERT of NULL properly(Vadim)
21228 Fix for relation reference counts problem in buffer manager(Vadim)
21229 Allow strings to span lines, like ANSI(Thomas)
21230 Fix for backward cursor with ORDER BY(Vadim)
21231 Fix avg(cash) computation(Thomas)
21232 Fix for specifying a column twice in ORDER/GROUP BY(Vadim)
21233 Documented new libpq function to return affected rows, PQcmdTuples(Bruce)
21234 Trigger function for inserting user names for INSERT/UPDATE(Brook Milligan)
21235     </programlisting>
21236    </para>
21237   </sect2>
21238  </sect1>
21239
21240 <sect1 id="release-6-2">
21241 <title>Release 6.2</title>
21242
21243   <note>
21244   <title>Release date</title>
21245   <simpara>1997-10-02</simpara>
21246   </note>
21247
21248 <para>
21249 A dump/restore is required for those wishing to migrate data from
21250 previous releases of <productname>PostgreSQL</productname>.
21251 </para>
21252
21253 <sect2>
21254 <title>Migration from version 6.1 to version 6.2</title>
21255
21256 <para>
21257 This migration requires a complete dump of the 6.1 database and a
21258 restore of the database in 6.2.
21259 </para>
21260 <para>
21261 Note that the <command>pg_dump</command> and <command>pg_dumpall</command> utility from 6.2 should be used
21262 to dump the 6.1 database.
21263 </para>
21264 </sect2>
21265
21266 <sect2>
21267 <title>Migration from version 1.<replaceable>x</> to version 6.2</title>
21268
21269 <para>
21270 Those migrating from earlier 1.* releases should first upgrade to 1.09
21271 because the COPY output format was improved from the 1.02 release.
21272 </para>
21273 </sect2>
21274
21275   <sect2>
21276    <title>Changes</title>
21277
21278    <para>
21279     <programlisting>
21280 Bug Fixes
21281 ---------
21282 Fix problems with pg_dump for inheritance, sequences, archive tables(Bruce)
21283 Fix compile errors on overflow due to shifts, unsigned, and bad prototypes
21284         from Solaris(Diab Jerius)
21285 Fix bugs in geometric line arithmetic (bad intersection calculations)(Thomas)
21286 Check for geometric intersections at endpoints to avoid rounding ugliness(Thomas)
21287 Catch non-functional delete attempts(Vadim)
21288 Change time function names to be more consistent(Michael Reifenberg)
21289 Check for zero divides(Michael Reifenberg)
21290 Fix very old bug which made rows changed/inserted by a command
21291        visible to the command itself (so we had multiple update of
21292        updated rows, etc.)(Vadim)
21293 Fix for SELECT null, 'fail' FROM pg_am (Patrick)
21294 SELECT NULL as EMPTY_FIELD now allowed(Patrick)
21295 Remove un-needed signal stuff from contrib/pginterface
21296 Fix OR (where x != 1 or x isnull didn't return rows with x NULL) (Vadim)
21297 Fix time_cmp function (Vadim)
21298 Fix handling of functions with non-attribute first argument in
21299        WHERE clauses (Vadim)
21300 Fix GROUP BY when order of entries is different from order
21301        in target list (Vadim)
21302 Fix pg_dump for aggregates without sfunc1 (Vadim)
21303
21304 Enhancements
21305 ------------
21306 Default genetic optimizer GEQO parameter is now 8(Bruce)
21307 Allow use parameters in target list having aggregates in functions(Vadim)
21308 Added JDBC driver as an interface(Adrian &amp; Peter)
21309 pg_password utility
21310 Return number of rows inserted/affected by INSERT/UPDATE/DELETE etc.(Vadim)
21311 Triggers implemented with CREATE TRIGGER (SQL3)(Vadim)
21312 SPI (Server Programming Interface) allows execution of queries inside
21313        C-functions (Vadim)
21314 NOT NULL implemented (SQL92)(Robson Paniago de Miranda)
21315 Include reserved words for string handling, outer joins, and unions(Thomas)
21316 Implement extended comments ("/* ... */") using exclusive states(Thomas)
21317 Add "//" single-line comments(Bruce)
21318 Remove some restrictions on characters in operator names(Thomas)
21319 DEFAULT and CONSTRAINT for tables implemented (SQL92)(Vadim &amp; Thomas)
21320 Add text concatenation operator and function (SQL92)(Thomas)
21321 Support WITH TIME ZONE syntax (SQL92)(Thomas)
21322 Support INTERVAL unit TO unit syntax (SQL92)(Thomas)
21323 Define types DOUBLE PRECISION, INTERVAL, CHARACTER,
21324        and CHARACTER VARYING (SQL92)(Thomas)
21325 Define type FLOAT(p) and rudimentary DECIMAL(p,s), NUMERIC(p,s) (SQL92)(Thomas)
21326 Define EXTRACT(), POSITION(), SUBSTRING(), and TRIM() (SQL92)(Thomas)
21327 Define CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP (SQL92)(Thomas)
21328 Add syntax and warnings for UNION, HAVING, INNER and OUTER JOIN (SQL92)(Thomas)
21329 Add more reserved words, mostly for SQL92 compliance(Thomas)
21330 Allow hh:mm:ss time entry for timespan/reltime types(Thomas)
21331 Add center() routines for lseg, path, polygon(Thomas)
21332 Add distance() routines for circle-polygon, polygon-polygon(Thomas)
21333 Check explicitly for points and polygons contained within polygons
21334        using an axis-crossing algorithm(Thomas)
21335 Add routine to convert circle-box(Thomas)
21336 Merge conflicting operators for different geometric data types(Thomas)
21337 Replace distance operator "&lt;===&gt;" with "&lt;-&gt;"(Thomas)
21338 Replace "above" operator "!^" with "&gt;^" and "below" operator "!|" with "&lt;^"(Thomas)
21339 Add routines for text trimming on both ends, substring, and string position(Thomas)
21340 Added conversion routines circle(box) and poly(circle)(Thomas)
21341 Allow internal sorts to be stored in memory rather than in files(Bruce &amp; Vadim)
21342 Allow functions and operators on internally-identical types to succeed(Bruce)
21343 Speed up backend start-up after profiling analysis(Bruce)
21344 Inline frequently called functions for performance(Bruce)
21345 Reduce open() calls(Bruce)
21346 psql:  Add PAGER for \h and \?,\C fix
21347 Fix for psql pager when no tty(Bruce)
21348 New entab utility(Bruce)
21349 General trigger functions for referential integrity (Vadim)
21350 General trigger functions for time travel (Vadim)
21351 General trigger functions for AUTOINCREMENT/IDENTITY feature (Vadim)
21352 MOVE implementation (Vadim)
21353
21354 Source Tree Changes
21355 -------------------
21356 HP-UX 10 patches (Vladimir Turin)
21357 Added SCO support, (Daniel Harris)
21358 MkLinux patches (Tatsuo Ishii)
21359 Change geometric box terminology from "length" to "width"(Thomas)
21360 Deprecate temporary unstored slope fields in geometric code(Thomas)
21361 Remove restart instructions from INSTALL(Bruce)
21362 Look in /usr/ucb first for install(Bruce)
21363 Fix c++ copy example code(Thomas)
21364 Add -o to psql manual page(Bruce)
21365 Prevent relname unallocated string length from being copied into database(Bruce)
21366 Cleanup for NAMEDATALEN use(Bruce)
21367 Fix pg_proc names over 15 chars in output(Bruce)
21368 Add strNcpy() function(Bruce)
21369 remove some (void) casts that are unnecessary(Bruce)
21370 new interfaces directory(Marc)
21371 Replace fopen() calls with calls to fd.c functions(Bruce)
21372 Make functions static where possible(Bruce)
21373 enclose unused functions in #ifdef NOT_USED(Bruce)
21374 Remove call to difftime() in timestamp support to fix SunOS(Bruce &amp; Thomas)
21375 Changes for Digital Unix
21376 Portability fix for pg_dumpall(Bruce)
21377 Rename pg_attribute.attnvals to attdispersion(Bruce)
21378 "intro/unix" manual page now "pgintro"(Bruce)
21379 "built-in" manual page now "pgbuiltin"(Bruce)
21380 "drop" manual page now "drop_table"(Bruce)
21381 Add "create_trigger", "drop_trigger" manual pages(Thomas)
21382 Add constraints regression test(Vadim &amp; Thomas)
21383 Add comments syntax regression test(Thomas)
21384 Add PGINDENT and support program(Bruce)
21385 Massive commit to run PGINDENT on all *.c and *.h files(Bruce)
21386 Files moved to /src/tools directory(Bruce)
21387 SPI and Trigger programming guides (Vadim &amp; D'Arcy)
21388 </programlisting>
21389 </para>
21390 </sect2>
21391 </sect1>
21392
21393 <sect1 id="release-6-1-1">
21394 <title>Release 6.1.1</title>
21395
21396   <note>
21397   <title>Release date</title>
21398   <simpara>1997-07-22</simpara>
21399   </note>
21400
21401 <sect2>
21402 <title>Migration from version 6.1 to version 6.1.1</title>
21403
21404 <para>
21405 This is a minor bug-fix release. A dump/reload is not required from version 6.1,
21406 but is required from any release prior to 6.1.
21407 Refer to the release notes for 6.1 for more details.
21408 </para>
21409 </sect2>
21410
21411   <sect2>
21412    <title>Changes</title>
21413
21414    <para>
21415     <programlisting>
21416 fix for SET with options (Thomas)
21417 allow pg_dump/pg_dumpall to preserve ownership of all tables/objects(Bruce)
21418 new psql \connect option allows changing usernames without changing databases
21419 fix for initdb --debug option(Yoshihiko Ichikawa))
21420 lextest cleanup(Bruce)
21421 hash fixes(Vadim)
21422 fix date/time month boundary arithmetic(Thomas)
21423 fix timezone daylight handling for some ports(Thomas, Bruce, Tatsuo)
21424 timestamp overhauled to use standard functions(Thomas)
21425 other code cleanup in date/time routines(Thomas)
21426 psql's \d now case-insensitive(Bruce)
21427 psql's backslash commands can now have trailing semicolon(Bruce)
21428 fix memory leak in psql when using \g(Bruce)
21429 major fix for endian handling of communication to server(Thomas, Tatsuo)
21430 Fix for Solaris assembler and include files(Yoshihiko Ichikawa)
21431 allow underscores in usernames(Bruce)
21432 pg_dumpall now returns proper status, portability fix(Bruce)
21433     </programlisting>
21434    </para>
21435   </sect2>
21436  </sect1>
21437
21438 <sect1 id="release-6-1">
21439 <title>Release 6.1</title>
21440
21441   <note>
21442   <title>Release date</title>
21443   <simpara>1997-06-08</simpara>
21444   </note>
21445
21446 <para>
21447  The regression tests have been adapted and extensively modified for the
21448  6.1 release of <productname>PostgreSQL</productname>.
21449 </para>
21450
21451 <para>
21452  Three new data types (<type>datetime</type>, <type>timespan</type>, and <type>circle</type>) have been added to
21453  the native set of <productname>PostgreSQL</productname> types. Points, boxes, paths, and polygons
21454  have had their output formats made consistent across the data types.
21455  The polygon output in misc.out has only been spot-checked for correctness
21456  relative to the original regression output.
21457 </para>
21458
21459 <para>
21460  <productname>PostgreSQL</productname> 6.1 introduces a new, alternate
21461 optimizer which uses <firstterm>genetic</firstterm>
21462  algorithms. These algorithms introduce a random behavior in the ordering
21463  of query results when the query contains multiple qualifiers or multiple
21464  tables (giving the optimizer a choice on order of evaluation). Several
21465  regression tests have been modified to explicitly order the results, and
21466  hence are insensitive to optimizer choices. A few regression tests are
21467  for data types which are inherently unordered (e.g. points and time
21468  intervals) and tests involving those types are explicitly bracketed with
21469  <command>set geqo to 'off'</command> and <command>reset geqo</command>.
21470 </para>
21471
21472 <para>
21473  The interpretation of array specifiers (the curly braces around atomic
21474  values) appears to have changed sometime after the original regression
21475  tests were generated. The current <filename>./expected/*.out</filename> files reflect this
21476  new interpretation, which might not be correct!
21477 </para>
21478
21479 <para>
21480  The float8 regression test fails on at least some platforms. This is due
21481  to differences in implementations of <function>pow()</function> and <function>exp()</function> and the signaling
21482  mechanisms used for overflow and underflow conditions.
21483 </para>
21484
21485 <para>
21486  The <quote>random</> results in the random test should cause the
21487  <quote>random</quote> test to be <quote>failed</quote>, since the
21488  regression tests are evaluated using a simple diff. However,
21489  <quote>random</> does not seem to produce random results on my test
21490  machine (Linux/<application>gcc</>/i686).
21491 </para>
21492
21493 <sect2>
21494 <title>Migration to Version 6.1</title>
21495
21496 <para>
21497 This migration requires a complete dump of the 6.0 database and a
21498 restore of the database in 6.1.
21499 </para>
21500 <para>
21501 Those migrating from earlier 1.* releases should first upgrade to 1.09
21502 because the COPY output format was improved from the 1.02 release.
21503 </para>
21504 </sect2>
21505
21506   <sect2>
21507    <title>Changes</title>
21508
21509    <para>
21510     <programlisting>
21511 Bug Fixes
21512 ---------
21513 packet length checking in library routines
21514 lock manager priority patch
21515 check for under/over flow of float8(Bruce)
21516 multitable join fix(Vadim)
21517 SIGPIPE crash fix(Darren)
21518 large object fixes(Sven)
21519 allow btree indexes to handle NULLs(Vadim)
21520 timezone fixes(D'Arcy)
21521 select SUM(x) can return NULL on no rows(Thomas)
21522 internal optimizer, executor bug fixes(Vadim)
21523 fix problem where inner loop in &lt; or &lt;= has no rows(Vadim)
21524 prevent re-commuting join index clauses(Vadim)
21525 fix join clauses for multiple tables(Vadim)
21526 fix hash, hashjoin for arrays(Vadim)
21527 fix btree for abstime type(Vadim)
21528 large object fixes(Raymond)
21529 fix buffer leak in hash indexes (Vadim)
21530 fix rtree for use in inner scan (Vadim)
21531 fix gist for use in inner scan, cleanups (Vadim, Andrea)
21532 avoid unnecessary local buffers allocation (Vadim, Massimo)
21533 fix local buffers leak in transaction aborts (Vadim)
21534 fix file manager memmory leaks, cleanups (Vadim, Massimo)
21535 fix storage manager memmory leaks (Vadim)
21536 fix btree duplicates handling (Vadim)
21537 fix deleted rows reincarnation caused by vacuum (Vadim)
21538 fix SELECT varchar()/char() INTO TABLE made zero-length fields(Bruce)
21539 many psql, pg_dump, and libpq memory leaks fixed using Purify (Igor)
21540
21541 Enhancements
21542 ------------
21543 attribute optimization statistics(Bruce)
21544 much faster new btree bulk load code(Paul)
21545 BTREE UNIQUE added to bulk load code(Vadim)
21546 new lock debug code(Massimo)
21547 massive changes to libpg++(Leo)
21548 new GEQO optimizer speeds table multitable optimization(Martin)
21549 new WARN message for non-unique insert into unique key(Marc)
21550 update x=-3, no spaces, now valid(Bruce)
21551 remove case-sensitive identifier handling(Bruce,Thomas,Dan)
21552 debug backend now pretty-prints tree(Darren)
21553 new Oracle character functions(Edmund)
21554 new plaintext password functions(Dan)
21555 no such class or insufficient privilege changed to distinct messages(Dan)
21556 new ANSI timestamp function(Dan)
21557 new ANSI Time and Date types (Thomas)
21558 move large chunks of data in backend(Martin)
21559 multicolumn btree indexes(Vadim)
21560 new SET var TO value command(Martin)
21561 update transaction status on reads(Dan)
21562 new locale settings for character types(Oleg)
21563 new SEQUENCE serial number generator(Vadim)
21564 GROUP BY function now possible(Vadim)
21565 re-organize regression test(Thomas,Marc)
21566 new optimizer operation weights(Vadim)
21567 new psql \z grant/permit option(Marc)
21568 new MONEY data type(D'Arcy,Thomas)
21569 tcp socket communication speed improved(Vadim)
21570 new VACUUM option for attribute statistics, and for certain columns (Vadim)
21571 many geometric type improvements(Thomas,Keith)
21572 additional regression tests(Thomas)
21573 new datestyle variable(Thomas,Vadim,Martin)
21574 more comparison operators for sorting types(Thomas)
21575 new conversion functions(Thomas)
21576 new more compact btree format(Vadim)
21577 allow pg_dumpall to preserve database ownership(Bruce)
21578 new SET GEQO=# and R_PLANS variable(Vadim)
21579 old (!GEQO) optimizer can use right-sided plans (Vadim)
21580 typechecking improvement in SQL parser(Bruce)
21581 new SET, SHOW, RESET commands(Thomas,Vadim)
21582 new \connect database USER option
21583 new destroydb -i option (Igor)
21584 new \dt and \di psql commands (Darren)
21585 SELECT "\n" now escapes newline (A. Duursma)
21586 new geometry conversion functions from old format (Thomas)
21587
21588 Source tree changes
21589 -------------------
21590 new configuration script(Marc)
21591 readline configuration option added(Marc)
21592 OS-specific configuration options removed(Marc)
21593 new OS-specific template files(Marc)
21594 no more need to edit Makefile.global(Marc)
21595 re-arrange include files(Marc)
21596 nextstep patches (Gregor Hoffleit)
21597 removed Windows-specific code(Bruce)
21598 removed postmaster -e option, now only postgres -e option (Bruce)
21599 merge duplicate library code in front/backends(Martin)
21600 now works with eBones, international Kerberos(Jun)
21601 more shared library support
21602 c++ include file cleanup(Bruce)
21603 warn about buggy flex(Bruce)
21604 DG/UX, Ultrix, IRIX, AIX portability fixes
21605 </programlisting>
21606 </para>
21607 </sect2>
21608 </sect1>
21609
21610 <sect1 id="release-6-0">
21611 <title>Release 6.0</title>
21612
21613   <note>
21614   <title>Release date</title>
21615   <simpara>1997-01-29</simpara>
21616   </note>
21617
21618 <para>
21619 A dump/restore is required for those wishing to migrate data from
21620 previous releases of <productname>PostgreSQL</productname>.
21621 </para>
21622
21623 <sect2>
21624 <title>Migration from version 1.09 to version 6.0</title>
21625
21626 <para>
21627 This migration requires a complete dump of the 1.09 database and a
21628 restore of the database in 6.0.
21629 </para>
21630 </sect2>
21631
21632 <sect2>
21633 <title>Migration from pre-1.09 to version 6.0</title>
21634
21635 <para>
21636 Those migrating from earlier 1.* releases should first upgrade to 1.09
21637 because the COPY output format was improved from the 1.02 release.
21638 </para>
21639 </sect2>
21640
21641   <sect2>
21642    <title>Changes</title>
21643
21644    <para>
21645     <programlisting>
21646 Bug Fixes
21647 ---------
21648 ALTER TABLE bug - running postgres process needs to re-read table definition
21649 Allow vacuum to be run on one table or entire database(Bruce)
21650 Array fixes
21651 Fix array over-runs of memory writes(Kurt)
21652 Fix elusive btree range/non-range bug(Dan)
21653 Fix for hash indexes on some types like time and date
21654 Fix for pg_log size explosion
21655 Fix permissions on lo_export()(Bruce)
21656 Fix uninitialized reads of memory(Kurt)
21657 Fixed ALTER TABLE ... char(3) bug(Bruce)
21658 Fixed a few small memory leaks
21659 Fixed EXPLAIN handling of options and changed full_path option name
21660 Fixed output of group acl privileges
21661 Memory leaks (hunt and destroy with tools like Purify(Kurt)
21662 Minor improvements to rules system
21663 NOTIFY fixes
21664 New asserts for run-checking
21665 Overhauled parser/analyze code to properly report errors and increase speed
21666 Pg_dump -d now handles NULL's properly(Bruce)
21667 Prevent SELECT NULL from crashing server (Bruce)
21668 Properly report errors when INSERT ... SELECT columns did not match
21669 Properly report errors when insert column names were not correct
21670 psql \g filename now works(Bruce)
21671 psql fixed problem with multiple statements on one line with multiple outputs
21672 Removed duplicate system OIDs
21673 SELECT * INTO TABLE . GROUP/ORDER BY gives unlink error if table exists(Bruce)
21674 Several fixes for queries that crashed the backend
21675 Starting quote in insert string errors(Bruce)
21676 Submitting an empty query now returns empty status, not just " " query(Bruce)
21677
21678 Enhancements
21679 ------------
21680 Add EXPLAIN manual page(Bruce)
21681 Add UNIQUE index capability(Dan)
21682 Add hostname/user level access control rather than just hostname and user
21683 Add synonym of != for &lt;&gt;(Bruce)
21684 Allow "select oid,* from table"
21685 Allow BY,ORDER BY to specify columns by number, or by non-alias table.column(Bruce)
21686 Allow COPY from the frontend(Bryan)
21687 Allow GROUP BY to use alias column name(Bruce)
21688 Allow actual compression, not just reuse on the same page(Vadim)
21689 Allow installation-configuration option to auto-add all local users(Bryan)
21690 Allow libpq to distinguish between text value '' and null(Bruce)
21691 Allow non-postgres users with createdb privs to destroydb's
21692 Allow restriction on who can create C functions(Bryan)
21693 Allow restriction on who can do backend COPY(Bryan)
21694 Can shrink tables, pg_time and pg_log(Vadim &amp; Erich)
21695 Change debug level 2 to print queries only, changed debug heading layout(Bruce)
21696 Change default decimal constant representation from float4 to float8(Bruce)
21697 European date format now set when postmaster is started
21698 Execute lowercase function names if not found with exact case
21699 Fixes for aggregate/GROUP processing, allow 'select sum(func(x),sum(x+y) from z'
21700 Gist now included in the distribution(Marc)
21701 Idend authentication of local users(Bryan)
21702 Implement BETWEEN qualifier(Bruce)
21703 Implement IN qualifier(Bruce)
21704 libpq has PQgetisnull()(Bruce)
21705 libpq++ improvements
21706 New options to initdb(Bryan)
21707 Pg_dump allow dump of OIDs(Bruce)
21708 Pg_dump create indexes after tables are loaded for speed(Bruce)
21709 Pg_dumpall dumps all databases, and the user table
21710 Pginterface additions for NULL values(Bruce)
21711 Prevent postmaster from being run as root
21712 psql \h and \? is now readable(Bruce)
21713 psql allow backslashed, semicolons anywhere on the line(Bruce)
21714 psql changed command prompt for lines in query or in quotes(Bruce)
21715 psql char(3) now displays as (bp)char in \d output(Bruce)
21716 psql return code now more accurate(Bryan?)
21717 psql updated help syntax(Bruce)
21718 Re-visit and fix vacuum(Vadim)
21719 Reduce size of regression diffs, remove timezone name difference(Bruce)
21720 Remove compile-time parameters to enable binary distributions(Bryan)
21721 Reverse meaning of HBA masks(Bryan)
21722 Secure Authentication of local users(Bryan)
21723 Speed up vacuum(Vadim)
21724 Vacuum now had VERBOSE option(Bruce)
21725
21726 Source tree changes
21727 -------------------
21728 All functions now have prototypes that are compared against the calls
21729 Allow asserts to be disabled easily from Makefile.global(Bruce)
21730 Change oid constants used in code to #define names
21731 Decoupled sparc and solaris defines(Kurt)
21732 Gcc -Wall compiles cleanly with warnings only from unfixable constructs
21733 Major include file reorganization/reduction(Marc)
21734 Make now stops on compile failure(Bryan)
21735 Makefile restructuring(Bryan, Marc)
21736 Merge bsdi_2_1 to bsdi(Bruce)
21737 Monitor program removed
21738 Name change from Postgres95 to PostgreSQL
21739 New config.h file(Marc, Bryan)
21740 PG_VERSION now set to 6.0 and used by postmaster
21741 Portability additions, including Ultrix, DG/UX, AIX, and Solaris
21742 Reduced the number of #define's, centralized #define's
21743 Remove duplicate OIDS in system tables(Dan)
21744 Remove duplicate system catalog info or report mismatches(Dan)
21745 Removed many os-specific #define's
21746 Restructured object file generation/location(Bryan, Marc)
21747 Restructured port-specific file locations(Bryan, Marc)
21748 Unused/uninitialized variables corrected
21749 </programlisting>
21750 </para>
21751 </sect2>
21752 </sect1>
21753
21754 <sect1 id="release-1-09">
21755 <title>Release 1.09</title>
21756
21757   <note>
21758   <title>Release date</title>
21759   <simpara>1996-11-04</simpara>
21760   </note>
21761
21762 <para>
21763 Sorry, we didn't keep track of changes from 1.02 to 1.09.  Some of
21764 the changes listed in 6.0 were actually included in the 1.02.1 to 1.09
21765 releases.
21766 </para>
21767 </sect1>
21768
21769 <sect1 id="release-1-02">
21770 <title>Release 1.02</title>
21771
21772   <note>
21773   <title>Release date</title>
21774   <simpara>1996-08-01</simpara>
21775   </note>
21776
21777 <sect2>
21778 <title>Migration from version 1.02 to version 1.02.1</title>
21779
21780 <para>
21781 Here is a new migration file for 1.02.1.  It includes the 'copy' change
21782 and a script to convert old <acronym>ASCII</acronym> files.
21783 </para>
21784 <note>
21785 <para>
21786 The following notes are for the benefit of users who want to migrate
21787 databases from <productname>Postgres95</> 1.01 and 1.02 to <productname>Postgres95</> 1.02.1.
21788 </para>
21789 <para>
21790 If you are starting afresh with <productname>Postgres95</> 1.02.1 and do not need
21791 to migrate old databases, you do not need to read any further.
21792 </para>
21793 </note>
21794
21795 <para>
21796 In order to upgrade older <productname>Postgres95</> version 1.01 or 1.02 databases to
21797 version 1.02.1, the following steps are required:
21798 </para>
21799 <procedure>
21800 <step>
21801 <para>
21802 Start up a new 1.02.1 postmaster
21803 </para>
21804 </step>
21805 <step>
21806 <para>
21807 Add the new built-in functions and operators of 1.02.1 to 1.01 or 1.02
21808   databases.  This is done by running the new 1.02.1 server against
21809   your own 1.01 or 1.02 database and applying the queries attached at
21810   the end of the file.   This can be done easily through <command>psql</>.  If your
21811   1.01 or 1.02 database is named <literal>testdb</literal> and you have cut the commands
21812   from the end of this file and saved them in <filename>addfunc.sql</filename>:
21813 <programlisting>
21814        % psql testdb -f addfunc.sql
21815 </programlisting>
21816
21817 Those upgrading 1.02 databases will get a warning when executing the
21818 last two statements in the file because they are already present in 1.02.  This is
21819 not a cause for concern.
21820 </para>
21821 </step>
21822 </procedure>
21823 </sect2>
21824
21825 <sect2>
21826 <title>Dump/Reload Procedure</title>
21827
21828 <para>
21829 If you are trying to reload a pg_dump or text-mode, <literal>copy tablename to
21830 stdout</literal> generated with a previous version, you will need to run the
21831 attached <command>sed</command> script on the ASCII file before loading it into the
21832 database.  The old format used '.' as end-of-data, while '\.' is now the
21833 end-of-data marker.  Also, empty strings are now loaded in as '' rather
21834 than NULL. See the copy manual page for full details.
21835
21836 <programlisting>
21837        sed 's/^\.$/\\./g' &lt;in_file &gt;out_file
21838 </programlisting>
21839 </para>
21840 <para>
21841 If you are loading an older binary copy or non-<systemitem>stdout</> copy, there is no
21842 end-of-data character, and hence no conversion necessary.
21843
21844 <programlisting>
21845 -- following lines added by agc to reflect the case-insensitive
21846 -- regexp searching for varchar (in 1.02), and bpchar (in 1.02.1)
21847 create operator ~* (leftarg = bpchar, rightarg = text, procedure = texticregexeq);
21848 create operator !~* (leftarg = bpchar, rightarg = text, procedure = texticregexne);
21849 create operator ~* (leftarg = varchar, rightarg = text, procedure = texticregexeq);
21850 create operator !~* (leftarg = varchar, rightarg = text, procedure = texticregexne);
21851 </programlisting>
21852 </para>
21853 </sect2>
21854
21855 <sect2>
21856 <title>Changes</title>
21857
21858 <para>
21859 <programlisting>
21860 Source code maintenance and development
21861  * worldwide team of volunteers
21862  * the source tree now in CVS at ftp.ki.net
21863
21864 Enhancements
21865  * psql (and underlying libpq library) now has many more options for
21866    formatting output, including HTML
21867  * pg_dump now output the schema and/or the data, with many fixes to
21868    enhance completeness.
21869  * psql used in place of monitor in administration shell scripts.
21870    monitor to be deprecated in next release.
21871  * date/time functions enhanced
21872  * NULL insert/update/comparison fixed/enhanced
21873  * TCL/TK lib and shell fixed to work with both tck7.4/tk4.0 and tcl7.5/tk4.1
21874
21875 Bug Fixes (almost too numerous to mention)
21876  * indexes
21877  * storage management
21878  * check for NULL pointer before dereferencing
21879  * Makefile fixes
21880
21881 New Ports
21882  * added SolarisX86 port
21883  * added BSD/OS 2.1 port
21884  * added DG/UX port
21885 </programlisting>
21886 </para>
21887 <!--
21888 Contributors (apologies to any missed)
21889  * Kurt J. Lidl &lt;lidl@va.pubnix.com&gt;
21890         (missed in first run, but no less important)
21891  * Erich Stamberger &lt;eberger@gewi.kfunigraz.ac.at&gt;
21892  * Jason Wright &lt;jason@shiloh.vnet.net&gt;
21893  * Cees de Groot &lt;C.deGroot@inter.NL.net&gt;
21894  * ernst.molitor@uni-bonn.de
21895  * michael.siebenborn@ae3.Hypo.DE (Michael Siebenborn (6929))
21896  * Brian E. Gallew &lt;geek+@cmu.edu&gt;
21897  * Vadim B. Mikheev &lt;vadim@sable.krasnoyarsk.su&gt;
21898  * Adam Sussman &lt;myddryn@vidya.com&gt;
21899  * Chris Dunlop &lt;chris@onthe.net.au&gt;
21900  * Marc G. Fournier &lt;scrappy@ki.net&gt;
21901  * Dan McGuirk &lt;mcguirk@indirect.com&gt;
21902  * Dr_George_D_Detlefsen &lt;drgeorge@ilt.com&gt;
21903  * Erich Stamberger &lt;eberger@gewi.kfunigraz.ac.at&gt;
21904  * Massimo Dal Zotto &lt;dz@cs.unitn.it&gt;
21905  * Randy Kunkee &lt;kunkee@Starbase.NeoSoft.COM&gt;
21906  * Rick Weldon &lt;rick@wisetech.com&gt;
21907  * Thomas van Reimersdahl &lt;reimersd@dali.techinfo.rwth-aachen.de&gt;
21908  * david bennett &lt;dave@bensoft.com&gt;
21909  * ernst.molitor@uni-bonn.de
21910  * Julian Assange &lt;proff@suburbia.net&gt;
21911  * Bruce Momjian &lt;pgman@candle.pha.pa.us&gt;
21912  * Paul "Shag" Walmsley &lt;ccshag@cclabs.missouri.edu&gt;
21913  * "Alistair G. Crooks" &lt;azcb0@sde.uts.amdahl.com&gt;
21914 -->
21915 </sect2>
21916 </sect1>
21917
21918 <sect1 id="release-1-01">
21919 <title>Release 1.01</title>
21920
21921    <note>
21922    <title>Release date</title>
21923    <simpara>1996-02-23</simpara>
21924    </note>
21925
21926
21927 <sect2>
21928 <title>Migration from version 1.0 to version 1.01</title>
21929
21930 <para>
21931 The following notes are for the benefit of users who want to migrate
21932 databases from <productname>Postgres95</> 1.0 to <productname>Postgres95</> 1.01.
21933 </para>
21934 <para>
21935 If you are starting afresh with <productname>Postgres95</> 1.01 and do not need
21936 to migrate old databases, you do not need to read any further.
21937 </para>
21938 <para>
21939 In order to <productname>Postgres95</> version 1.01 with databases created with
21940 <productname>Postgres95</> version 1.0, the following steps are required:
21941 </para>
21942 <procedure>
21943 <step>
21944 <para>
21945 Set the definition of <symbol>NAMEDATALEN</symbol> in <filename>src/Makefile.global</filename> to 16
21946    and <symbol>OIDNAMELEN</symbol> to 20.
21947 </para>
21948 </step>
21949 <step>
21950 <para>
21951 Decide whether you want to use Host based authentication.
21952 </para>
21953 <substeps>
21954 <step>
21955 <para>
21956 If you do, you must create a file name <literal>pg_hba</literal> in your top-level data
21957    directory (typically the value of your <envar>$PGDATA</envar>).  <filename>src/libpq/pg_hba</filename>
21958    shows an example syntax.
21959 </para>
21960 </step>
21961 <step>
21962 <para>
21963 If you do not want host-based authentication, you can comment out
21964    the line:
21965 <programlisting>
21966         HBA = 1
21967 </programlisting>
21968    in <filename>src/Makefile.global</filename>
21969 </para>
21970 <para>
21971    Note that host-based authentication is turned on by default, and if
21972    you do not take steps A or B above, the out-of-the-box 1.01 will
21973    not allow you to connect to 1.0 databases.
21974 </para>
21975 </step>
21976 </substeps>
21977 </step>
21978
21979 <step>
21980 <para>
21981 Compile and install 1.01, but DO NOT do the <command>initdb</command> step.
21982 </para>
21983 </step>
21984 <step>
21985 <para>
21986 Before doing anything else, terminate your 1.0 postmaster, and
21987    backup your existing <envar>$PGDATA</envar> directory.
21988 </para>
21989 </step>
21990 <step>
21991 <para>
21992 Set your <envar>PGDATA</envar> environment variable to your 1.0 databases, but set up
21993    path up so that 1.01 binaries are being used.
21994 </para>
21995 </step>
21996 <step>
21997 <para>
21998 Modify the file <filename><envar>$PGDATA</envar>/PG_VERSION</filename> from 5.0 to 5.1
21999 </para>
22000 </step>
22001 <step>
22002 <para>
22003 Start up a new 1.01 postmaster
22004 </para>
22005 </step>
22006 <step>
22007 <para>
22008 Add the new built-in functions and operators of 1.01 to 1.0
22009    databases.  This is done by running the new 1.01 server against
22010    your own 1.0 database and applying the queries attached and saving
22011    in the file 1.0_to_1.01.sql.   This can be done easily through <command>psql</command>.
22012    If your 1.0 database is name <literal>testdb</literal>:
22013
22014 <programlisting>
22015         % psql testdb -f 1.0_to_1.01.sql
22016 </programlisting>
22017
22018 and then execute the following commands (cut and paste from here):
22019
22020 <programlisting>
22021 -- add builtin functions that are new to 1.01
22022
22023 create function int4eqoid (int4, oid) returns bool as 'foo'
22024 language 'internal';
22025 create function oideqint4 (oid, int4) returns bool as 'foo'
22026 language 'internal';
22027 create function char2icregexeq (char2, text) returns bool as 'foo'
22028 language 'internal';
22029 create function char2icregexne (char2, text) returns bool as 'foo'
22030 language 'internal';
22031 create function char4icregexeq (char4, text) returns bool as 'foo'
22032 language 'internal';
22033 create function char4icregexne (char4, text) returns bool as 'foo'
22034 language 'internal';
22035 create function char8icregexeq (char8, text) returns bool as 'foo'
22036 language 'internal';
22037 create function char8icregexne (char8, text) returns bool as 'foo'
22038 language 'internal';
22039 create function char16icregexeq (char16, text) returns bool as 'foo'
22040 language 'internal';
22041 create function char16icregexne (char16, text) returns bool as 'foo'
22042 language 'internal';
22043 create function texticregexeq (text, text) returns bool as 'foo'
22044 language 'internal';
22045 create function texticregexne (text, text) returns bool as 'foo'
22046 language 'internal';
22047
22048 -- add builtin functions that are new to 1.01
22049
22050 create operator = (leftarg = int4, rightarg = oid, procedure = int4eqoid);
22051 create operator = (leftarg = oid, rightarg = int4, procedure = oideqint4);
22052 create operator ~* (leftarg = char2, rightarg = text, procedure = char2icregexeq);
22053 create operator !~* (leftarg = char2, rightarg = text, procedure = char2icregexne);
22054 create operator ~* (leftarg = char4, rightarg = text, procedure = char4icregexeq);
22055 create operator !~* (leftarg = char4, rightarg = text, procedure = char4icregexne);
22056 create operator ~* (leftarg = char8, rightarg = text, procedure = char8icregexeq);
22057 create operator !~* (leftarg = char8, rightarg = text, procedure = char8icregexne);
22058 create operator ~* (leftarg = char16, rightarg = text, procedure = char16icregexeq);
22059 create operator !~* (leftarg = char16, rightarg = text, procedure = char16icregexne);
22060 create operator ~* (leftarg = text, rightarg = text, procedure = texticregexeq);
22061 create operator !~* (leftarg = text, rightarg = text, procedure = texticregexne);
22062 </programlisting>
22063 </para>
22064 </step>
22065 </procedure>
22066 </sect2>
22067
22068 <sect2>
22069 <title>Changes</title>
22070
22071 <para>
22072 <programlisting>
22073 Incompatibilities:
22074  * 1.01 is backwards compatible with 1.0 database provided the user
22075    follow the steps outlined in the MIGRATION_from_1.0_to_1.01 file.
22076    If those steps are not taken, 1.01 is not compatible with 1.0 database.
22077
22078 Enhancements:
22079  * added PQdisplayTuples() to libpq and changed monitor and psql to use it
22080  * added NeXT port (requires SysVIPC implementation)
22081  * added CAST .. AS ... syntax
22082  * added ASC and DESC key words
22083  * added 'internal' as a possible language for CREATE FUNCTION
22084    internal functions are C functions which have been statically linked
22085    into the postgres backend.
22086  * a new type "name" has been added for system identifiers (table names,
22087    attribute names, etc.)  This replaces the old char16 type.   The
22088    of name is set by the NAMEDATALEN #define in src/Makefile.global
22089  * a readable reference manual that describes the query language.
22090  * added host-based access control.  A configuration file ($PGDATA/pg_hba)
22091    is used to hold the configuration data.  If host-based access control
22092    is not desired, comment out HBA=1 in src/Makefile.global.
22093  * changed regex handling to be uniform use of Henry Spencer's regex code
22094    regardless of platform.  The regex code is included in the distribution
22095  * added functions and operators for case-insensitive regular expressions.
22096    The operators are ~* and !~*.
22097  * pg_dump uses COPY instead of SELECT loop for better performance
22098
22099 Bug fixes:
22100  * fixed an optimizer bug that was causing core dumps when
22101    functions calls were used in comparisons in the WHERE clause
22102  * changed all uses of getuid to geteuid so that effective uids are used
22103  * psql now returns non-zero status on errors when using -c
22104  * applied public patches 1-14
22105 </programlisting>
22106 </para>
22107 </sect2>
22108 </sect1>
22109
22110 <sect1 id="release-1-0">
22111 <title>Release 1.0</title>
22112
22113    <note>
22114    <title>Release date</title>
22115    <simpara>1995-09-05</simpara>
22116    </note>
22117
22118 <sect2>
22119 <title>Changes</title>
22120
22121 <para>
22122 <programlisting>
22123 Copyright change:
22124  * The copyright of <productname>Postgres</productname> 1.0 has been loosened to be freely modifiable
22125    and modifiable for any purpose.  Please read the COPYRIGHT file.
22126    Thanks to Professor Michael Stonebraker for making this possible.
22127
22128 Incompatibilities:
22129  *  date formats have to be MM-DD-YYYY (or DD-MM-YYYY if you're using
22130    EUROPEAN STYLE).  This follows SQL-92 specs.
22131  *  "delimiters" is now a key word
22132
22133 Enhancements:
22134  *  sql LIKE syntax has been added
22135  *  copy command now takes an optional USING DELIMITER specification.
22136    delimiters can be any single-character string.
22137  *  IRIX 5.3 port has been added.
22138    Thanks to Paul Walmsley and others.
22139  *  updated pg_dump to work with new libpq
22140  *  \d has been added psql
22141    Thanks to Keith Parks
22142  *  regexp performance for architectures that use POSIX regex has been
22143    improved due to caching of precompiled patterns.
22144    Thanks to Alistair Crooks
22145  *  a new version of libpq++
22146    Thanks to William Wanders
22147
22148 Bug fixes:
22149  *  arbitrary userids can be specified in the createuser script
22150  *  \c to connect to other databases in psql now works.
22151  *  bad pg_proc entry for float4inc() is fixed
22152  *  users with usecreatedb field set can now create databases without
22153    having to be usesuper
22154  *  remove access control entries when the entry no longer has any
22155    privileges
22156  *  fixed non-portable datetimes implementation
22157  *  added kerberos flags to the src/backend/Makefile
22158  *  libpq now works with kerberos
22159  *  typographic errors in the user manual have been corrected.
22160  *  btrees with multiple index never worked, now we tell you they don't
22161    work when you try to use them
22162 </programlisting>
22163 </para>
22164 </sect2>
22165 </sect1>
22166
22167 <sect1 id="release-0-03">
22168 <title><productname>Postgres95</productname> Release 0.03</title>
22169
22170    <note>
22171    <title>Release date</title>
22172    <simpara>1995-07-21</simpara>
22173    </note>
22174
22175 <sect2>
22176 <title>Changes</title>
22177 <para>
22178 <programlisting>
22179 Incompatible changes:
22180  * BETA-0.3 IS INCOMPATIBLE WITH DATABASES CREATED WITH PREVIOUS VERSIONS
22181    (due to system catalog changes and indexing structure changes).
22182  * double-quote (") is deprecated as a quoting character for string literals;
22183    you need to convert them to single quotes ('). <!-- " -->
22184  * name of aggregates (eg. int4sum) are renamed in accordance with the
22185    SQL standard (eg. sum).
22186  * CHANGE ACL syntax is replaced by GRANT/REVOKE syntax.
22187  * float literals (eg. 3.14) are now of type float4 (instead of float8 in
22188    previous releases); you might have to do typecasting if you depend on it
22189    being of type float8.  If you neglect to do the typecasting and you assign
22190    a float literal to a field of type float8, you might get incorrect values
22191    stored!
22192  * LIBPQ has been totally revamped so that frontend applications
22193    can connect to multiple backends
22194  * the usesysid field in pg_user has been changed from int2 to int4 to
22195    allow wider range of Unix user ids.
22196  * the netbsd/freebsd/bsd o/s ports have been consolidated into a
22197    single BSD44_derived port.  (thanks to Alistair Crooks)
22198
22199 SQL standard-compliance (the following details changes that makes postgres95
22200 more compliant to the SQL-92 standard):
22201  * the following SQL types are now built-in: smallint, int(eger), float, real,
22202    char(N), varchar(N), date and time.
22203
22204    The following are aliases to existing postgres types:
22205                 smallint -&gt; int2
22206                 integer, int -&gt; int4
22207                 float, real  -&gt; float4
22208    char(N) and varchar(N) are implemented as truncated text types. In
22209    addition, char(N) does blank-padding.
22210  * single-quote (') is used for quoting string literals; '' (in addition to
22211    \') is supported as means of inserting a single quote in a string
22212  * SQL standard aggregate names (MAX, MIN, AVG, SUM, COUNT) are used
22213    (Also, aggregates can now be overloaded, i.e. you can define your
22214    own MAX aggregate to take in a user-defined type.)
22215  * CHANGE ACL removed. GRANT/REVOKE syntax added.
22216    - Privileges can be given to a group using the "GROUP" key word.
22217         For example:
22218                 GRANT SELECT ON foobar TO GROUP my_group;
22219         The key word 'PUBLIC' is also supported to mean all users.
22220
22221         Privileges can only be granted or revoked to one user or group
22222         at a time.
22223
22224         "WITH GRANT OPTION" is not supported.  Only class owners can change
22225         access control
22226    - The default access control is to grant users readonly access.
22227      You must explicitly grant insert/update access to users.  To change
22228      this, modify the line in
22229                 src/backend/utils/acl.h
22230      that defines ACL_WORLD_DEFAULT
22231
22232 Bug fixes:
22233  * the bug where aggregates of empty tables were not run has been fixed. Now,
22234    aggregates run on empty tables will return the initial conditions of the
22235    aggregates. Thus, COUNT of an empty  table will now properly return 0.
22236    MAX/MIN of an empty table will return a row of value NULL.
22237  * allow the use of \; inside the monitor
22238  * the LISTEN/NOTIFY asynchronous notification mechanism now work
22239  * NOTIFY in rule action bodies now work
22240  * hash indexes work, and access methods in general should perform better.
22241    creation of large btree indexes should be much faster.  (thanks to Paul
22242    Aoki)
22243
22244 Other changes and enhancements:
22245  * addition of an EXPLAIN statement used for explaining the query execution
22246    plan (eg. "EXPLAIN SELECT * FROM EMP" prints out the execution plan for
22247    the query).
22248  * WARN and NOTICE messages no longer have timestamps on them. To turn on
22249    timestamps of error messages, uncomment the line in
22250    src/backend/utils/elog.h:
22251         /* define ELOG_TIMESTAMPS */
22252  * On an access control violation, the message
22253         "Either no such class or insufficient privilege"
22254    will be given.  This is the same message that is returned when
22255    a class is not found.  This dissuades non-privileged users from
22256    guessing the existence of privileged classes.
22257  * some additional system catalog changes have been made that are not
22258    visible to the user.
22259
22260 libpgtcl changes:
22261  * The -oid option has been added to the "pg_result" tcl command.
22262    pg_result -oid returns oid of the last row inserted.   If the
22263    last command was not an INSERT, then pg_result -oid returns "".
22264  * the large object interface is available as pg_lo* tcl commands:
22265    pg_lo_open, pg_lo_close, pg_lo_creat, etc.
22266
22267 Portability enhancements and New Ports:
22268  * flex/lex problems have been cleared up.  Now, you should be able to use
22269    flex instead of lex on any platforms.  We no longer make assumptions of
22270    what lexer you use based on the platform you use.
22271  * The Linux-ELF port is now supported.  Various configuration have been
22272    tested:  The following configuration is known to work:
22273         kernel 1.2.10, gcc 2.6.3, libc 4.7.2, flex 2.5.2, bison 1.24
22274    with everything in ELF format,
22275
22276 New utilities:
22277  * ipcclean added to the distribution
22278    ipcclean usually does not need to be run, but if your backend crashes
22279    and leaves shared memory segments hanging around, ipcclean will
22280    clean them up for you.
22281
22282 New documentation:
22283  * the user manual has been revised and libpq documentation added.
22284 </programlisting>
22285 </para>
22286 </sect2>
22287 </sect1>
22288
22289 <sect1 id="release-0-02">
22290 <title><productname>Postgres95</productname> Release 0.02</title>
22291
22292    <note>
22293    <title>Release date</title>
22294    <simpara>1995-05-25</simpara>
22295    </note>
22296
22297 <sect2>
22298 <title>Changes</title>
22299
22300 <para>
22301 <programlisting>
22302 Incompatible changes:
22303  * The SQL statement for creating a database is 'CREATE DATABASE' instead
22304    of 'CREATEDB'. Similarly, dropping a database is 'DROP DATABASE' instead
22305    of 'DESTROYDB'. However, the names of the executables 'createdb' and
22306    'destroydb' remain the same.
22307
22308 New tools:
22309  * pgperl - a Perl (4.036) interface to Postgres95
22310  * pg_dump - a utility for dumping out a postgres database into a
22311         script file containing query commands. The script files are in a ASCII
22312         format and can be used to reconstruct the database, even on other
22313         machines and other architectures. (Also good for converting
22314         a Postgres 4.2 database to Postgres95 database.)
22315
22316 The following ports have been incorporated into postgres95-beta-0.02:
22317  * the NetBSD port by Alistair Crooks
22318  * the AIX port by Mike Tung
22319  * the Windows NT port by Jon Forrest (more stuff but not done yet)
22320  * the Linux ELF port by Brian Gallew
22321
22322 The following bugs have been fixed in postgres95-beta-0.02:
22323  * new lines not escaped in COPY OUT and problem with COPY OUT when first
22324    attribute is a '.'
22325  * cannot type return to use the default user id in createuser
22326  * SELECT DISTINCT on big tables crashes
22327  * Linux installation problems
22328  * monitor doesn't allow use of 'localhost' as PGHOST
22329  * psql core dumps when doing \c or \l
22330  * the "pgtclsh" target missing from src/bin/pgtclsh/Makefile
22331  * libpgtcl has a hard-wired default port number
22332  * SELECT DISTINCT INTO TABLE hangs
22333  * CREATE TYPE doesn't accept 'variable' as the internallength
22334  * wrong result using more than 1 aggregate in a SELECT
22335 </programlisting>
22336 </para>
22337 </sect2>
22338 </sect1>
22339
22340 <sect1 id="release-0-01">
22341 <title><productname>Postgres95</productname> Release 0.01</title>
22342
22343    <note>
22344    <title>Release date</title>
22345    <simpara>1995-05-01</simpara>
22346    </note>
22347
22348 <para>
22349 Initial release.
22350 </para>
22351 </sect1>
22352
22353 <![IGNORE[
22354   <sect1 id="timing-results">
22355    <title>Timing Results</title>
22356
22357    <para>
22358     These timing results are from running the regression test with the commands
22359
22360     <programlisting>
22361 % cd src/test/regress
22362 % make all
22363 % time make runtest
22364     </programlisting>
22365    </para>
22366    <para>
22367     Timing under Linux 2.0.27 seems to have a roughly 5% variation from run
22368     to run, presumably due to the scheduling vagaries of multitasking systems.
22369    </para>
22370
22371    <sect2>
22372     <title>Version 6.5</title>
22373
22374     <para>
22375      As has been the case for previous releases, timing between
22376      releases is not directly comparable since new regression tests
22377      have been added. In general, 6.5 is faster than previous
22378      releases.
22379     </para>
22380
22381     <para>
22382      Timing with <function>fsync()</function> disabled:
22383
22384      <programlisting>
22385   Time   System
22386   02:00  Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 -O2 -m486
22387   04:38  Sparc Ultra 1 143MHz, 64MB, Solaris 2.6
22388      </programlisting>
22389     </para>
22390
22391     <para>
22392      Timing with <function>fsync()</function> enabled:
22393
22394      <programlisting>
22395   Time   System
22396   04:21  Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 -O2 -m486
22397      </programlisting>
22398
22399      For the <systemitem class="osname">Linux</systemitem> system above, using <acronym>UW-SCSI</acronym> disks rather than (older) <acronym>IDE</acronym>
22400      disks leads to a 50% improvement in speed on the regression test.
22401     </para>
22402    </sect2>
22403
22404 <sect2>
22405 <title>Version 6.4beta</title>
22406
22407 <para>
22408 The times for this release are not directly comparable to those for previous releases
22409 since some additional regression tests have been included.
22410 In general, however, 6.4 should be slightly faster than the previous release (thanks, Bruce!).
22411 </para>
22412 <para>
22413 <programlisting>
22414   Time   System
22415   02:26  Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
22416 </programlisting>
22417 </para>
22418 </sect2>
22419
22420 <sect2>
22421 <title>Version 6.3</title>
22422
22423 <para>
22424 The times for this release are not directly comparable to those for previous releases
22425 since some additional regression tests have been included and some obsolete tests involving
22426 time travel have been removed.
22427 In general, however, 6.3 is substantially faster than previous releases (thanks, Bruce!).
22428 </para>
22429 <para>
22430 <programlisting>
22431   Time   System
22432   02:30  Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
22433   04:12  Dual Pentium Pro 180, 96MB, EIDE, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
22434 </programlisting>
22435 </para>
22436 </sect2>
22437
22438 <sect2>
22439 <title>Version 6.1</title>
22440
22441 <para>
22442 <programlisting>
22443   Time   System
22444   06:12  Pentium Pro 180, 32MB, EIDE, Linux 2.0.30, gcc 2.7.2 -O2 -m486
22445   12:06  P-100, 48MB, Linux 2.0.29, gcc
22446   39:58  Sparc IPC 32MB, Solaris 2.5, gcc 2.7.2.1 -O -g
22447 </programlisting>
22448 </para>
22449 </sect2>
22450 </sect1>
22451 ]]>
22452 </appendix>