]> granicus.if.org Git - postgresql/blob - doc/src/sgml/release.sgml
Remove xid wraparound mention, because it was already done in 8.0, per Neil.
[postgresql] / doc / src / sgml / release.sgml
1 <!--
2 $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.374 2005/09/23 16:36:35 momjian Exp $
3
4 Typical markup:
5
6 [A-Z][A-Z ]+[A-Z]               <command>
7 [A-Za-z_][A-Za-z0-9_]+()        <function>
8 [A-Za-z_]/[A-Za-z_]+            <filename>
9 PostgreSQL                      <productname>
10 pg_[A-Za-z0-9_]                 <application>
11 [A-Z][A-Z]                      <type>, <envar>, <literal>
12 &<>                             use &
13 -->
14
15 <appendix id="release">
16  <title>Release Notes</title>
17
18   <sect1 id="release-8-1">
19    <title>Release 8.1</title>
20
21    <note>
22     <title>Release date</title>
23     <simpara>2005-1?-??, Current as of 2005-09-15</simpara>
24    </note>
25
26    <sect2>
27     <title>Overview</title>
28  
29     <para>
30      Major changes in this release:
31     </para>
32
33     <variablelist>
34
35      <varlistentry>
36       <term>
37        Improve concurrent access to the shared buffer cache (Tom)
38       </term>
39
40       <listitem>
41        <para>
42         Access to the shared buffer cache was identified as a
43         significant scalability problem, particularly on multi-CPU
44         systems. In this release, the way that locking is done in the
45         buffer manager has been overhauled to reduce lock contention
46         and improve scalability. The buffer manager has also been
47         changed to use a <quote>clock sweep</quote> replacement
48         policy.
49        </para>
50       </listitem>
51      </varlistentry>
52
53      <varlistentry>
54       <term>
55        Allow index scans to use an intermediate in-memory bitmap (Tom)
56       </term>
57
58       <listitem>
59        <para>
60         In previous releases, only a single index could be used to do
61         lookups on a table. With this feature, if a query has
62         <command>WHERE tab.col1 = 4 and tab.col2 = 9</>, and there is
63         no multicolumn index on <literal>col1</> and <literal>col2</>,
64         but there is an index on <literal>col1</> and another on
65         <literal>col2</>, it is possible to search both indexes and
66         combine the results in memory, then do heap fetches for only
67         the rows matching both the <literal>col1</> and
68         <literal>col2</> restrictions. This is very useful in
69         environments that have a lot of unstructured queries where it
70         is impossible to create indexes that match all possible access
71         conditions.  Bitmap scans are useful even with a single index,
72         as they reduce the amount of random access needed; a bitmap
73         index scan is efficient for retrieving fairly large fractions
74         of the complete table, whereas plain index scans are not.
75        </para>
76       </listitem>
77      </varlistentry>
78
79      <varlistentry>
80       <term>
81        Add two-phase commit (Heikki Linnakangas, Alvaro, Tom)
82       </term>
83       
84       <listitem>
85        <para>
86         Two-phase commit allows transactions to be "prepared" on several
87         computers, and once all computers have successfully prepared
88         their transactions (none failed), all transactions can be
89         committed. Even if a machine crashes after a prepare, the
90         prepared transaction can be committed after the machine is
91         restarted. New syntax includes <command>PREPARE TRANSACTION</> and
92         <command>COMMIT/ROLLBACK PREPARED</>. A new system view
93         <literal>pg_prepared_xacts</> has also been added.
94        </para>
95       </listitem>
96      </varlistentry>
97
98      <varlistentry>
99       <term>
100        Create a new role system that replaces users and groups 
101        (Stephen Frost)
102       </term>
103
104       <listitem>
105        <para>
106         Roles are a combination of users and groups. Like users, they
107         can have login capability, and like groups, a role can have
108         other roles as members. Roles basically remove the distinction
109         between users and groups. For example, a role can:
110        </para>
111
112        <itemizedlist>
113   
114         <listitem>
115          <para>
116            Have login capability (optionally)
117          </para>
118         </listitem>
119
120         <listitem>
121          <para>
122           Own objects
123          </para>
124         </listitem>
125
126         <listitem>
127          <para>
128           Hold access permissions for database objects
129          </para>
130         </listitem>
131
132         <listitem>
133          <para>
134           Inherit permissions from other roles it is a member of
135          </para>
136         </listitem>
137
138        </itemizedlist>
139        <para>
140         Once a user logs into a role, she obtains capabilities of
141         the login role plus any inherited roles, and can use
142         <command>SET ROLE</> to switch to other roles she is a member of.
143         This feature is a generalization of the SQL standard's concept of
144         roles.
145         This change also replaces <structname>pg_shadow</> and 
146         <structname>pg_group</> by new role-capable catalogs 
147         <structname>pg_authid</> and <structname>pg_auth_members</>. The old
148         tables are redefined as read-only views on the new role tables.
149        </para>
150       </listitem>
151      </varlistentry>
152
153      <varlistentry>
154       <term>
155        Automatically use indexes for <function>MIN()</> and
156        <function>MAX()</> (Tom)
157       </term>
158  
159       <listitem>
160        <para>
161         In previous releases, the only way to use an index for
162         <function>MIN()</> or <function>MAX()</> was to rewrite the
163         query as <command>SELECT col FROM tab ORDER BY col LIMIT 1</>.
164         Index usage now happens automatically.
165        </para> 
166       </listitem>
167      </varlistentry>
168
169      <varlistentry>
170       <term>
171        Move <filename>/contrib/pg_autovacuum</> into the main server
172        (Alvaro)
173       </term>
174
175       <listitem>
176        <para>
177         Integrating autovacuum into the server allows it to be
178         automatically started and stopped in sync with the database
179         server, and allows autovacuum to be configured from
180         <filename>postgresql.conf</>.
181        </para>
182       </listitem>
183      </varlistentry>
184
185      <varlistentry>
186       <term>
187        Add shared row level locks using <command>SELECT ... FOR SHARE</>
188        (Alvaro)
189       </term>
190
191       <listitem>
192        <para>
193         While <productname>PostgreSQL</productname>'s MVCC locking
194         allows <command>SELECT</> to never be blocked by writers and
195         therefore does not need shared row locks for typical operations,
196         shared locks are useful for applications that require shared row
197         locking.  In particular this reduces the locking requirements
198         imposed by referential integrity checks.
199        </para>
200       </listitem>
201      </varlistentry>
202
203      <varlistentry>
204       <term>
205        Add dependencies on shared objects, specifically roles
206        (Alvaro)
207       </term>
208
209       <listitem>
210        <para>
211         This extension of the dependency mechanism prevents roles from
212         being dropped while there are still database objects they own.
213         Formerly it was possible to accidentally <quote>orphan</> objects by
214         deleting their owner.  While this could be recovered from, it
215         was messy and unpleasant.
216        </para>
217       </listitem>
218      </varlistentry>
219
220      <varlistentry>
221       <term>
222        Improve performance for partitioned tables (Simon)
223       </term>
224
225       <listitem>
226        <para>
227         The new <varname>constraint_exclusion</varname> configuration
228         parameter avoids lookups on child tables where constraints indicate
229         that no matching rows exist in the child table.
230        </para>
231        <para>
232         This allows for a basic type of table partitioning. If child tables
233         store separate key ranges and this is enforced using appropriate
234         <command>CHECK</> constraints, the optimizer will skip child
235         table accesses when the constraint guarantees no matching rows
236         exist in the child table.
237        </para>
238       </listitem>
239      </varlistentry>
240
241     </variablelist>
242    </sect2>
243  
244    <sect2>
245     <title>Migration to version 8.1</title>
246                                        
247     <para>
248      A dump/restore using <application>pg_dump</application> is required
249      for those wishing to migrate data from any previous release.
250     </para>
251     
252     <para>
253      The 8.0 release announced that the <function>to_char()</> function
254      for intervals would be removed in 8.1. However, since no better API
255      has been suggested, <function>to_char(interval)</> has been enhanced in
256      8.1 and will remain in the server.
257     </para>
258
259     <para>
260      Observe the following incompatibilities:
261     </para>
262
263     <itemizedlist>
264
265      <listitem>
266       <para>
267        <varname>add_missing_from</> is now false by default (Neil)
268       </para>
269       <para>
270        By default, we now generate an error if a table is used in a query
271        without a <command>FROM</> reference.  The old behavior is still
272        available, but the parameter must be set to 'true' to obtain it.
273       </para>
274      </listitem>
275
276      <listitem>
277       <para>
278        Cause input of a zero-length string ('') for float4/float8/oid
279        to throw an error, rather than treating it as a zero (Neil)
280       </para>
281       <para>
282        This change is consistent with the current handling of
283        zero-length strings for integers. The schedule for this change
284        was announced in 8.0.
285       </para>
286      </listitem>
287
288      <listitem>
289       <para>
290        <varname>default_with_oids</> is now false by default (Neil)
291       </para>
292       <para>
293        With this option set to false, user-created tables no longer
294        have an OID column unless <command>WITH OIDS</> is specified in
295        <command>CREATE TABLE</>. Though OIDs have existed in all
296        releases of <productname>PostgreSQL</>, their use is limited
297        because they are only four bytes long and the counter is shared
298        across all installed databases. The preferred way of uniquely
299        identifying rows is via sequences and the <type>SERIAL</> type,
300        which have been supported since <productname>PostgreSQL</> 6.4.
301       </para>
302      </listitem>
303
304      <listitem>
305       <para>
306        Add <literal>E''</> syntax so eventually ordinary strings can
307        treat backslashes literally (Bruce)
308       </para>
309       <para>
310        Currently <productname>PostgreSQL</productname> processes a
311        backslash in a string literal as introducing a special escape sequence,
312        e.g. <literal>\n</> or <literal>\010</>.
313        While this allows easy entry of special values, it is
314        non-standard and makes porting of applications from other
315        databases more difficult. For this reason, the
316        <productname>PostgreSQL</productname> project is planning to
317        remove the special meaning of backslashes in strings. For
318        backward compatibility and for users who want special backslash
319        processing, a new string syntax has been created. This new string
320        syntax is formed by writing an <literal>E</> immediately preceding the
321        single quote that starts the string, e.g. <literal>E'hi\n'</>. While
322        this release does not change the handling of backslashes in strings, it
323        does add new configuration parameters to help users migrate applications
324        for future releases:
325       </para>
326       <itemizedlist>
327
328        <listitem>
329         <para>
330          <varname>standard_conforming_strings</> &mdash; does this release
331          treat backslashes literally in ordinary strings?
332         </para>
333        </listitem>
334   
335        <listitem>
336        <para>
337         <varname>escape_string_warning</> &mdash; warn about backslashes in
338         ordinary (non-E) strings
339        </para>
340       </listitem>
341
342       </itemizedlist>
343
344       <para>
345        The <varname>standard_conforming_strings</> value is read-only.
346        Applications can retrieve the value to know how backslashes are
347        processed.  (Presence of the parameter can also be taken as an
348        indication that <literal>E''</> string syntax is supported.)
349        In a future release, <varname>standard_conforming_strings</>
350        will be true, meaning backslashes will be treated literally in
351        non-E strings. To prepare for this change, use <literal>E''</>
352        strings in places that need special backslash processing, and
353        turn on <varname>escape_string_warning</> to find additional
354        strings that need to be converted to use <literal>E''</>.
355        Also, use two single-quotes (<literal>''</>) to embed a literal
356        single-quote in a string, rather than the
357        <productname>PostgreSQL</productname>-supported syntax of
358        backslash single-quote (<literal>\'</>).  The former is
359        standards-conforming and does not require the use of the
360        <literal>E''</> string syntax.  You can also use the
361        <literal>$$</> string syntax, which does not treat backslashes
362        specially.
363       </para>
364      </listitem>
365
366      <listitem>
367       <para>
368        Make <command>REINDEX DATABASE</> reindex all indexes in the
369        database (Tom)
370       </para>
371       <para>
372        Formerly, <command>REINDEX DATABASE</> reindexed only
373        system tables. This new behavior seems more intuitive. A new
374        command <command>REINDEX SYSTEM</> provides the old functionality
375        of reindexing just the system tables.
376       </para>
377      </listitem>
378
379      <listitem>
380       <para>
381        In <application>psql</application>, treat unquoted
382        <literal>\{digit}+</> sequences as octal (Bruce)
383       </para>
384       <para>
385        In previous releases, <literal>\{digit}+</> sequences were
386        treated as decimal, and only <literal>\0{digit}+</> were treated
387        as octal. This change was made for consistency.
388       </para>
389      </listitem>
390
391      <listitem>
392       <para>
393        Remove grammar productions for prefix and postfix <literal>%</>
394        and <literal>^</> operators
395        (Tom)
396       </para>
397       <para>
398        These have never been documented and complicated the use of the
399        modulus operator (<literal>%</>) with negative numbers.
400       </para>
401      </listitem>
402
403      <listitem>
404       <para>
405        Make <literal>&amp;&lt;</> and <literal>&amp;&gt;</> for polygons
406        consistent with the box "over" operators (Tom)
407       </para>
408      </listitem>
409
410      <listitem>
411       <para>
412        <command>CREATE LANGUAGE</> may ignore the provided arguments
413        in favor of information from <structname>pg_pltemplate</>
414        (Tom)
415       </para>
416       <para>
417        A new system catalog <structname>pg_pltemplate</> has been defined
418        to carry information about the preferred definitions of procedural
419        languages (such as whether they have validator functions).  When
420        an entry exists in this catalog for the language being created,
421        <command>CREATE LANGUAGE</> will ignore all its parameters except the
422        language name and instead use the catalog information.  This measure
423        was taken because of increasing problems with obsolete language
424        definitions being loaded by old dump files.  As of 8.1,
425        <application>pg_dump</> will dump procedural language definitions as
426        just <command>CREATE LANGUAGE <replaceable>name</></command>, relying
427        on a template entry to exist at load time.  We expect this will be a
428        more future-proof representation.
429       </para>
430      </listitem>
431
432      <listitem>
433       <para>
434        Make <function>pg_cancel_backend(int)</function> return a
435        <type>boolean</type> rather than an <type>integer</type> (Neil)
436       </para>
437      </listitem>
438     </itemizedlist>
439    </sect2>
440  
441    <sect2>
442     <title>Additional Changes</title>
443  
444     <para>
445      Below you will find a detailed account of the additional changes
446      between <productname>PostgreSQL</productname> 8.1 and the
447      previous major release.
448     </para>
449  
450     <sect3>
451      <title>Performance Improvements</title>
452      <itemizedlist>
453
454       <listitem>
455        <para>
456         Improve GiST and rtree index performance (Neil)
457        </para>
458       </listitem>
459
460       <listitem>
461        <para>
462         Improve the optimizer, including auto-resizing of hash joins
463         (Tom)
464        </para>
465       </listitem>
466
467       <listitem>
468        <para>
469         Overhaul internal API in several areas
470        </para>
471       </listitem>
472
473       <listitem>
474        <para>
475         Change WAL record CRCs from 64-bit to 32-bit (Tom)
476        </para>
477        <para>
478         We determined that the extra cost of computing 64-bit CRCs was
479         significant, and the gain in reliability too marginal to justify it.
480        </para>
481       </listitem>
482
483       <listitem>
484        <para>
485         Prevent writing large empty gaps in WAL pages (Tom)
486        </para>
487       </listitem>
488
489       <listitem>
490        <para>
491         Allow non-consecutive index columns to be used in a multi-column
492         index (Tom)
493        </para>
494        <para>
495         For example, this allows an index on columns a,b,c to be used in
496         a query with <command>WHERE a = 4 and c = 10</>.
497        </para>
498       </listitem>
499
500       <listitem>
501        <para>
502         Skip WAL logging for <command>CREATE TABLE AS</> /
503         <command>SELECT INTO</> (Simon)
504        </para>
505        <para>
506         Since a crash during <command>CREATE TABLE AS</> would cause the
507         table to be dropped during recovery, there is no reason to WAL
508         log as the table is loaded.  (Logging still happens if WAL
509         archiving is enabled, however.)
510        </para>
511       </listitem>
512
513       <listitem>
514        <para>
515         Allow concurrent GIST index access (Teodor, Oleg)
516        </para>
517       </listitem>
518
519       <listitem>
520        <para>
521         Add configuration parameter <varname>full_page_writes</> to
522         control writing full pages to WAL (Bruce)
523        </para>
524        <para>
525         To prevent partial disk writes from corrupting the database,
526         <productname>PostgreSQL</productname> writes a complete copy of
527         each database disk page to WAL the first time it is modified
528         after a checkpoint. This option turns off that functionality for more
529         speed.  This is safe to use with battery-backed disk caches where
530         partial page writes cannot happen.
531        </para>
532       </listitem>
533
534       <listitem>
535        <para>
536         Use <literal>O_DIRECT</> if available when using
537         <literal>O_SYNC</> for <varname>wal_sync_method</varname>
538         (Itagaki Takahiro)
539        </para>
540        <para>
541         <literal>O_DIRECT</> causes disk writes to bypass the kernel
542         cache, and for WAL writes, this improves performance.
543        </para>
544       </listitem>
545
546       <listitem>
547        <para>
548         Improve <command>COPY FROM</> performance (Alon Goldshuv)
549        </para>
550        <para>
551         This was accomplished by reading <command>COPY</> input in
552         larger chunks, rather than character by character.
553        </para>
554       </listitem>
555
556       <listitem>
557        <para>
558         Improve the performance of <function>COUNT()</function>,
559         <function>SUM</function>, <function>AVG()</function>,
560         <function>STDDEV()</function>, and
561         <function>VARIANCE()</function> (Neil, Tom)
562        </para>
563       </listitem>
564      </itemizedlist>
565     </sect3>
566
567     <sect3>
568      <title>Server Changes</title>
569      <itemizedlist>
570
571       <listitem>
572        <para>
573         Prevent problems due to transaction ID (XID) wraparound (Tom)
574        </para>
575        <para>
576         The server will now warn when the transaction counter approaches
577         the wraparound point.  If the counter becomes too close to wraparound,
578         the server will stop accepting queries.  This ensures that data is
579         not lost before needed vacuuming is performed.
580        </para>
581       </listitem>
582
583       <listitem>
584        <para>
585         Fix problems with object IDs (OIDs) conflicting with existing system
586         objects after the OID counter has wrapped around (Tom)
587        </para>
588       </listitem>
589   
590       <listitem>
591        <para>
592         Add warning about the need to increase
593         <varname>max_fsm_relations</> and <varname>max_fsm_pages</>
594         during <command>VACUUM</> (Ron Mayer)
595        </para>
596       </listitem>
597
598       <listitem>
599        <para>
600         Add <varname>temp_buffers</> configuration parameter to allow
601         users to determine the size of the local buffer area for
602         temporary table access (Tom)
603        </para>
604       </listitem>
605
606       <listitem>
607        <para>
608         Add session start time and client IP address to
609         <literal>pg_stat_activity</> (Magnus)
610        </para>
611       </listitem>
612
613       <listitem>
614        <para>
615         Enhance <literal>pg_locks</> display (Tom)
616        </para>
617       </listitem>
618
619       <listitem>
620        <para>
621         Log queries for client-side <command>PREPARE</> and
622         <command>EXECUTE</> (Simon)
623        </para>
624       </listitem>
625
626       <listitem>
627        <para>
628         Allow Kerberos name and user name case sensitivity to be
629         specified in <filename>postgresql.conf</> (Magnus)
630        </para>
631       </listitem>
632
633       <listitem>
634        <para>
635         Add configuration parameter <varname>krb_server_hostname</> so
636         that the server hostname can be specified as part of service
637         principal (Todd Kover)
638        </para>
639        <para>
640         If not set, any service principal matching an entry in the
641         keytab can be used. This is new Kerberos matching behavior in
642         this release.
643        </para>
644       </listitem>
645
646       <listitem>
647        <para>
648         Add <varname>log_line_prefix</> options for millisecond
649         timestamps (<literal>%m</>) and remote host (<literal>%h</>) (Ed
650         L.)
651        </para>
652       </listitem>
653
654       <listitem>
655        <para>
656         Add WAL logging for GIST indexes (Teodor, Oleg)
657        </para>
658        <para>
659         GIST indexes are now safe for crash and point-in-time recovery.
660        </para>
661       </listitem>
662
663       <listitem>
664        <para>
665         Remove old <filename>*.backup</> files when we do
666         <function>pg_stop_backup()</> (Bruce)
667        </para>
668        <para>
669         This prevents a large number of <filename>*.backup</> files from
670         existing in <filename>/pg_xlog</>.
671        </para>
672       </listitem>
673
674       <listitem>
675        <para>
676         Add configuration parameters to control TCP/IP keep-alive
677         times for idle, interval, and count (Oliver Jowett)
678        </para>
679
680        <para>
681         These values can be changed to allow more rapid detection of
682         lost client connections.
683        </para>
684       </listitem>
685
686       <listitem>
687        <para>
688         Add per-user and per-database connection limits (Petr Jelinek)
689        </para>
690        <para>
691         Using <command>ALTER USER</> and <command>ALTER DATABASE</>,
692         limits can now be enforced on the maximum number of sessions that
693         can concurrently connect as a specific user or to a specific database.
694         Setting the limit to zero disables user or database connections.
695        </para>
696       </listitem>
697
698       <listitem>
699        <para>
700         Allow more than two gigabytes of shared memory and per-backend
701         work memory on 64-bit machines (Koichi Suzuki)
702        </para>
703       </listitem>
704
705       <listitem>
706        <para>
707         New system catalog <structname>pg_pltemplate</> allows overriding
708         obsolete procedural-language definitions in dump files (Tom)
709        </para>
710       </listitem>
711
712      </itemizedlist>
713     </sect3>
714   
715   
716     <sect3>
717      <title>Query Changes</title>
718      <itemizedlist>
719   
720       <listitem>
721        <para>
722         Add temporary views (Koju Iijima, Neil) 
723        </para>
724       </listitem>
725
726       <listitem>
727        <para>
728         Fix <command>HAVING</> without any aggregate functions or
729         <command>GROUP BY</> so that the query returns a single group (Tom)
730        </para>
731        <para>
732         Previously, such a case would treat the <command>HAVING</>
733         clause the same as a <command>WHERE</> clause.  This was not per spec.
734        </para>
735       </listitem>
736
737       <listitem>
738        <para>
739         Add <command>USING</> clause to allow additional tables to be
740         specified to <command>DELETE</> (Euler Taveira de Oliveira, Neil)
741        </para>
742        <para>
743         In prior releases, there was no clear method for specifying
744         additional tables to be used for joins in a <command>DELETE</>
745         statement. <command>UPDATE</> already has a <literal>FROM</>
746         clause for this purpose.
747        </para>
748       </listitem>
749
750       <listitem>
751        <para>
752         Add support for <literal>\x</> hex escapes in backend and ecpg
753         strings (Bruce)
754        </para>
755        <para>
756         This is just like the standard C <literal>\x</> escape syntax.
757         Octal escapes were already supported.
758        </para>
759       </listitem>
760
761       <listitem>
762        <para>
763         Add <command>BETWEEN SYMMETRIC</> query syntax (Pavel Stehule)
764        </para>
765        <para>
766         This feature allows <command>BETWEEN</> comparisons without
767         requiring the first value to be less than the second. For
768         example, <command>2 BETWEEN [ASYMMETRIC] 3 AND 1</> returns
769         false, while <command>2 BETWEEN SYMMETRIC 3 AND 1</> returns
770         true. <command>BETWEEN ASYMMETRIC</> was already supported.
771        </para>
772       </listitem>
773
774       <listitem>
775        <para>
776         Add <command>NOWAIT</> option to <command>SELECT ... FOR
777         UPDATE/SHARE</> (Hans-Juergen Schoenig)
778        </para>
779        <para>
780         While the <varname>statement_timeout</> configuration
781         parameter allows a query taking more than a certain amount of
782         time to be cancelled, the <command>NOWAIT</> option allows a
783         query to be canceled as soon as a <command>SELECT ... FOR
784         UPDATE/SHARE</> command cannot immediately acquire a row lock.
785        </para>
786       </listitem>
787      </itemizedlist>
788     </sect3>
789   
790   
791     <sect3>
792      <title>Object Manipulation Changes</title>
793      <itemizedlist>
794   
795       <listitem>
796        <para>
797         Track dependencies of shared objects (Alvaro)
798        </para>
799        <para>
800         <productname>PostgreSQL</productname> allows global tables
801         (users, databases, tablespaces) to reference information in
802         multiple databases. This addition adds dependency information
803         for global tables, so, for example, user ownership can be
804         tracked across databases, so a user who owns something in any
805         database can no longer be removed. Dependency tracking already
806         existed for database-local objects.
807        </para>
808       </listitem>
809
810       <listitem>
811        <para>
812         Allow limited <command>ALTER OWNER</> commands to be performed 
813         by the object owner (Stephen Frost)
814        </para>
815        <para>
816         Prior releases allowed only superusers to change object owners.
817         Now, ownership can be transferred if the user executing the command
818         owns the object and would be able to create it as the new owner
819         (that is, the user is a member of the new owning role and that role
820         has the CREATE permission that would be needed to create the object
821         afresh).
822        </para>
823       </listitem>
824
825       <listitem>
826        <para>
827         Add <command>ALTER</> object <command>SET SCHEMA</> capability
828         for some object types (tables, functions, types) (Bernd Helmle)
829        </para>
830        <para>
831         This allows objects to be moved to different schemas.
832        </para>
833       </listitem>
834     
835       <listitem>
836        <para>
837         Add <command>ALTER TABLE ENABLE/DISABLE TRIGGER</command> to
838         disable triggers (Satoshi Nagayasu)
839        </para>
840       </listitem>
841
842      </itemizedlist>
843     </sect3>
844   
845   
846     <sect3>
847      <title>Utility Command Changes</title>
848      <itemizedlist>
849   
850       <listitem>
851        <para>
852         Allow <command>TRUNCATE</> to truncate multiple tables in a
853         single command (Alvaro)
854        </para>
855        <para>
856         Because of referential integrity checks, it is not allowed to
857         truncate a table that is part of a referential integrity
858         constraint. Using this new functionality, <command>TRUNCATE</>
859         can be used to truncate such tables, if both tables involved in
860         a referential integrity constraint are truncated in a single
861         <command>TRUNCATE</> command.
862        </para>
863       </listitem>
864
865       <listitem>
866        <para>
867         Properly process carriage returns and line feeds in
868         <command>COPY CSV</> mode (Andrew)
869        </para>
870        <para>
871         In release 8.0, carriage returns and line feeds in <command>CSV
872         COPY TO</> were processed in an inconsistent manner. (This was
873         documented on the TODO list.)
874        </para>
875       </listitem>
876
877       <listitem>
878        <para>
879         Add <command>COPY WITH CSV HEADER</> to allow a header line as
880         the first line in <command>COPY</> (Andrew)
881        </para>
882        <para>
883         This allows handling of the common <command>CSV</> usage of
884         placing the column names on the first line of the data file. For
885         <command>COPY TO</>, the first line contains the column names,
886         and for <command>COPY FROM</>, the first line is ignored.
887        </para>
888       </listitem>
889
890       <listitem>
891        <para>
892         On Windows, display better sub-second precision in
893         <command>EXPLAIN ANALYZE</> (Magnus)
894        </para>
895       </listitem>
896
897       <listitem>
898        <para>
899         Add trigger duration display to <command>EXPLAIN ANALYZE</>
900         (Tom)
901        </para>
902        <para>
903         Prior releases included trigger execution time as part of the
904         total execution time, but did not show it separately.  It is now
905         possible to see how much time is spent in each trigger.
906        </para>
907       </listitem>
908
909       <listitem>
910        <para>
911         Add support for <literal>\x</> hex escapes in <command>COPY</>
912         (Sergey Ten)
913        </para>
914        <para>
915         Previous releases only supported octal escapes.
916        </para>
917       </listitem>
918
919       <listitem>
920        <para>
921         Make <command>SHOW ALL</> include variable descriptions
922         (Matthias Schmidt)
923        </para>
924        <para>
925         <command>SHOW</> varname still only displays the variable's
926         value and does not include the description.
927        </para>
928       </listitem>
929
930       <listitem>
931        <para>
932         Make <application>initdb</application> create a new standard
933         database called <literal>postgres</>, and convert utilities to
934         use <literal>postgres</> rather than <literal>template1</> for
935         standard lookups (Dave)
936        </para>
937        <para>
938         In prior releases, <literal>template1</> was used both as a
939         default connection for utilities like
940         <application>createuser</application>, and as a template for
941         new databases. This caused <command>CREATE DATABASE</> to
942         sometimes fail, because a new database cannot be created if
943         anyone else is in the template database. With this change, the
944         default connection database is now <literal>postgres</>,
945         meaning it is much less likely someone will be using
946         <literal>template1</> during <command>CREATE DATABASE</>.
947        </para>
948       </listitem>
949
950       <listitem>
951        <para>
952         Create new <application>reindexdb</application> command-line
953         utility by moving <filename>/contrib/reindexdb</> into the
954         server (Euler Taveira de Oliveira)
955        </para>
956       </listitem>
957
958      </itemizedlist>
959     </sect3>
960   
961   
962     <sect3>
963      <title>Data Type and Function Changes</title>
964      <itemizedlist>
965   
966       <listitem>
967        <para>
968         Add <function>MAX()</> and <function>MIN()</> aggregates for
969         array types (Koju Iijima)
970        </para>
971       </listitem>
972
973       <listitem>
974        <para>
975         Fix <function>to_date()</> and <function>to_timestamp()</> to
976         behave reasonably when <literal>CC</> and <literal>YY</> fields
977         are both used (Karel Zak)
978        </para>
979        <para>
980         If the format specification contains <literal>CC</> and a year
981         specification is <literal>YYY</> or longer, ignore the
982         <literal>CC</>. If the year specification is <literal>YY</> or
983         shorter, interpret <literal>CC</> as the previous century.
984        </para>
985       </listitem>
986
987       <listitem>
988        <para>
989         Add <function>md5(bytea)</> (Abhijit Menon-Sen)
990        </para>
991        <para>
992         <function>md5(text)</> already existed.
993        </para>
994       </listitem>
995
996       <listitem>
997        <para>
998         Fix <type>CHAR()</> to properly pad spaces to the specified
999         length when using a multiple-byte character set (Yoshiyuki
1000         Asaba)
1001        </para>
1002        <para>
1003         In prior releases, the padding of <type>CHAR()</> was incorrect
1004         because it only padded to the specified number of bytes without
1005         considering how many characters were stored.
1006        </para>
1007       </listitem>
1008
1009       <listitem>
1010        <para>
1011         Add support for <command>numeric ^ numeric</> based on
1012         <function>power(numeric, numeric)</>
1013        </para>
1014        <para>
1015         The function already existed, but there was no operator assigned
1016         to it.
1017        </para>
1018       </listitem>
1019
1020       <listitem>
1021        <para>
1022         Fix <type>NUMERIC</> modulus by properly truncating the quotient
1023         during computation (Bruce)
1024        </para>
1025        <para>
1026         In previous releases, modulus for large values sometimes
1027         returned negative results due to rounding of the quotient.
1028        </para>
1029       </listitem>
1030
1031       <listitem>
1032        <para>
1033         Add a function <function>lastval()</>(Dennis Björklund)
1034        </para>
1035        <para>
1036         <function>lastval()</> is a simplified version of
1037         <function>currval()</>. It automatically determines the proper
1038         sequence name based on the most recent <function>nextval()</> or
1039         <function>setval()</> call performed by the current session.
1040        </para>
1041       </listitem>
1042
1043       <listitem>
1044        <para>
1045         Add <function>to_timestamp(DOUBLE PRECISION)</>
1046        </para>
1047        <para>
1048         Converts Unix seconds since 1970 to a <type>TIMESTAMP WITH
1049         TIMEZONE</>.
1050        </para>
1051       </listitem>
1052
1053       <listitem>
1054        <para>
1055         Add <function>pg_postmaster_start_time()</> function (Euler
1056         Taveira de Oliveira, Matthias Schmidt)
1057        </para>
1058       </listitem>
1059
1060       <listitem>
1061        <para>
1062         Allow the full use of time zone names in <command>AT TIME
1063         ZONE</>, not just the short list previously available (Magnus)
1064        </para>
1065        <para>
1066         Previously, only a predefined list of time zone names were
1067         supported by <command>AT TIME ZONE</>. Now any supported time
1068         zone name can be used, e.g.:
1069         <programlisting>
1070          SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London';
1071         </programlisting>
1072         In the above query, the time zone used is adjusted based on the
1073         daylight savings time rules that were in effect on the supplied
1074         date.
1075        </para>
1076       </listitem>
1077
1078       <listitem>
1079        <para>
1080         Add <function>GREATEST()</> and <function>LEAST()</> variadic
1081         functions (Pavel Stehule)
1082        </para>
1083        <para>
1084         These functions take a variable number of arguments and return
1085         the greatest or least value among the arguments.
1086        </para>
1087       </listitem>
1088
1089       <listitem>
1090        <para>
1091         Add <function>pg_column_size()</> (Mark Kirkwood)
1092        </para>
1093        <para>
1094         This returns storage size of a column, including any
1095         compression used.
1096        </para>
1097       </listitem>
1098
1099       <listitem>
1100        <para>
1101         Add <function>regexp_replace()</> (Atsushi Ogawa)
1102        </para>
1103        <para>
1104         This allows regular expression replacement, like sed. An optional
1105         flag argument allows selection of global (replace all) and
1106         case-insensitive modes.
1107        </para>
1108       </listitem>
1109
1110       <listitem>
1111        <para>
1112         Fix interval division and multiplication (Bruce)
1113        </para>
1114        <para>
1115         Previous versions sometimes returned unjustified results, like
1116         <command>'4 months'::interval / 5</> returning <command>'1 mon
1117         -6 days'</>.
1118        </para>
1119       </listitem>
1120
1121       <listitem>
1122        <para>
1123         Add an internal day field to <type>INTERVAL</> so a one day
1124         interval can be distinguished from a 24 hour interval (Michael
1125         Glaesemann)
1126        </para>
1127        <para>
1128         Days that contain a daylight savings time adjustment are not 24
1129         hours, but typically 23 or 25 hours. This change allows days
1130         (not fixed 24-hour periods) to be added to dates who's result
1131         includes a daylight savings time adjustment period. Therefore,
1132         while in previous releases <literal>1 day</> and <literal>24
1133         hours</> were interchangeable interval values, in this release
1134         they are treated differently, e.g.
1135         <programlisting>
1136          '2005-05-03 00:00:00 EST' + '1 day' = '2005-05-04 00:00:00-04'
1137          '2005-05-03 00:00:00 EST' + '24 hours' = '2005-05-04 01:00:00-04'
1138         </programlisting>
1139        </para>
1140       </listitem>
1141
1142       <listitem>
1143        <para>
1144         Add <function>justify_days()</> and <function>justify_hours()</>
1145         (Michael Glaesemann)
1146        </para>
1147        <para>
1148         These functions, respectively, adjust days to an appropriate
1149         number of full months and days, and adjust hours to an
1150         appropriate number of full days and hours.
1151        </para>
1152       </listitem>
1153
1154       <listitem>
1155        <para>
1156         Move <filename>/contrib/dbsize</> into the backend, and rename
1157         some of the functions (Dave Page, Andreas Pflug)
1158        </para>
1159        <para>
1160         <itemizedlist>
1161   
1162          <listitem>
1163           <para>
1164             <function>pg_tablespace_size()</>
1165           </para>
1166          </listitem>
1167
1168          <listitem>
1169           <para>
1170            <function>pg_database_size()</>
1171           </para>
1172          </listitem>
1173
1174          <listitem>
1175           <para>
1176            <function>pg_relation_size()</>
1177           </para>
1178          </listitem>
1179
1180          <listitem>
1181           <para>
1182            <function>pg_total_relation_size()</>
1183           </para>
1184          </listitem>
1185
1186          <listitem>
1187           <para>
1188            <function>pg_size_pretty()</>
1189           </para>
1190          </listitem>
1191  
1192         </itemizedlist>
1193        </para>
1194        <para>
1195         <function>pg_total_relation_size()</> includes indexes and TOAST
1196         tables.
1197        </para>
1198       </listitem>
1199
1200       <listitem>
1201        <para>
1202         Add functions for read-only file access to the cluster directory
1203         (Dave Page, Andreas Pflug)
1204        </para>
1205        <para>
1206         <itemizedlist>
1207   
1208          <listitem>
1209           <para>
1210            <function>pg_stat_file()</>
1211           </para>
1212          </listitem>
1213
1214          <listitem>
1215           <para>
1216            <function>pg_read_file()</>
1217           </para>
1218          </listitem>
1219
1220          <listitem>
1221           <para>
1222            <function>pg_ls_dir()</>
1223           </para>
1224          </listitem>
1225
1226         </itemizedlist>
1227        </para>
1228       </listitem>
1229       
1230       <listitem>
1231        <para>
1232         Add <function>pg_reload_conf()</> to force reloading of the
1233         configuration files (Dave Page, Andreas Pflug)
1234        </para>
1235       </listitem>
1236
1237       <listitem>
1238        <para>
1239         Add <function>pg_rotate_logfile()</> to force rotation of the
1240         server log file (Dave Page, Andreas Pflug)
1241        </para>
1242       </listitem>
1243
1244       <listitem>
1245        <para>
1246         Change <literal>pg_stat_*</> views to include TOAST tables (Tom)
1247        </para>
1248       </listitem>
1249
1250      </itemizedlist>
1251     </sect3>
1252   
1253   
1254     <sect3>
1255      <title>Encoding and Locale Changes</title>
1256      <itemizedlist>
1257   
1258       <listitem>
1259        <para>
1260         Rename some encodings to be more consistent and to follow
1261         international standards (Bruce)
1262        </para>
1263        <para>
1264         <itemizedlist>
1265   
1266          <listitem>
1267           <para>
1268            <literal>UNICODE</> is now <literal>UTF8</>
1269           </para>
1270          </listitem>
1271
1272          <listitem>
1273           <para>
1274            <literal>ALT</> is now <literal>WIN866</>
1275           </para>
1276          </listitem>
1277
1278          <listitem>
1279           <para>
1280            <literal>WIN</> is now <literal>WIN1251</>
1281           </para>
1282          </listitem>
1283
1284          <listitem>
1285           <para>
1286           <literal>TCVN</> is now <literal>WIN1258</>
1287           </para>
1288          </listitem>
1289
1290         </itemizedlist>
1291        </para>
1292
1293        <para>
1294         The original names still work.
1295        </para>
1296       </listitem>
1297
1298       <listitem>
1299        <para>
1300         Add support for <literal>WIN1252</> encoding (Roland Volkmann)
1301        </para>
1302       </listitem>
1303
1304       <listitem>
1305        <para>
1306         Add support for 3 and 4-byte <literal>UTF8</> characters (John
1307         Hansen)
1308        </para>
1309        <para>
1310         Previously only one and two-byte <literal>UTF8</> characters
1311         were supported. This is particularly important for support for
1312         some Chinese characters.
1313        </para>
1314       </listitem>
1315
1316       <listitem>
1317        <para>
1318         Allow direct conversion between <literal>EUC_JP</> and
1319         <literal>SJIS</> to improve performance (Atsushi Ogawa)
1320        </para>
1321       </listitem>
1322
1323       <listitem>
1324        <para>
1325         Allow the UTF8 encoding to work on Windows (Magnus)
1326        </para>
1327        <para>
1328         This is done by mapping UTF8 to the Windows-native UTF16 
1329         implementation.
1330        </para>
1331       </listitem>
1332
1333      </itemizedlist>
1334     </sect3>
1335   
1336   
1337     <sect3>
1338      <title>General Server-Side Language Changes</title>
1339      <itemizedlist>
1340   
1341       <listitem>
1342        <para>
1343         Fix <command>ALTER LANGUAGE RENAME</> (Sergey Yatskevich)
1344        </para>
1345       </listitem>
1346
1347       <listitem>
1348        <para>
1349         Allow function characteristics, like strictness and volatility,
1350         to be modified via <command>ALTER FUNCTION</> (Neil)
1351        </para>
1352       </listitem>
1353
1354       <listitem>
1355        <para>
1356         Increase the maximum number of function arguments to 100 (Tom)
1357        </para>
1358       </listitem>
1359
1360       <listitem>
1361        <para>
1362         Allow SQL and PL/PgSQL functions to use <command>OUT</> and
1363         <command>INOUT</> parameters (Tom)
1364        </para>
1365        <para>
1366         <command>OUT</> is an alternate way for a function to return
1367         values. Instead of using <command>RETURN</>, values can be
1368         returned by assigning to parameters declared as <command>OUT</> or
1369         <command>INOUT</>.  This is notationally simpler in some cases,
1370         particularly so when multiple values need to be returned.
1371         While returning multiple values from a function
1372         was possible in previous releases, this greatly simplifies the
1373         process.  (The feature will be extended to other server-side
1374         languages in future releases.)
1375        </para>
1376       </listitem>
1377
1378       <listitem>
1379        <para>
1380         Move language handler functions into the <literal>pg_catalog</> schema
1381        </para>
1382        <para>
1383         This makes it easier to drop the public schema if desired.
1384        </para>
1385       </listitem>
1386
1387       <listitem>
1388        <para>
1389         Add <function>SPI_getnspname()</function> to SPI (Neil)
1390        </para>
1391       </listitem>
1392
1393      </itemizedlist>
1394     </sect3>
1395   
1396     <sect3>
1397      <title>PL/PgSQL Server-Side Language Changes</title>
1398      <itemizedlist>
1399   
1400       <listitem>
1401        <para>
1402         Overhaul the memory management of PL/PgSQL functions (Neil)
1403        </para>
1404        <para>
1405         The parsetree of each function is now stored in a separate
1406         memory context. This allows this memory to be easily reclaimed
1407         when it is no longer needed.
1408        </para>
1409       </listitem>
1410
1411       <listitem>
1412        <para>
1413         Check function syntax at <command>CREATE FUNCTION</> time,
1414         rather than at runtime (Neil)
1415        </para>
1416        <para>
1417         Previously, most syntax errors were reported only when the
1418         function was executed.
1419        </para>
1420       </listitem>
1421
1422       <listitem>
1423        <para>
1424         Allow <command>OPEN</> to open non-<command>SELECT</> queries
1425         like <command>EXPLAIN</> and <command>SHOW</> (Tom)
1426        </para>
1427       </listitem>
1428
1429       <listitem>
1430        <para>
1431         No longer require functions to issue a <command>RETURN</>
1432         statement (Tom)
1433        </para>
1434        <para>
1435         This is a byproduct of the newly added <command>OUT</> and
1436         <command>INOUT</> functionality.  <command>RETURN</> can
1437         be omitted when it is not needed to provide the function's
1438         return value.
1439        </para>
1440       </listitem>
1441
1442       <listitem>
1443        <para>
1444         Add support for an optional <command>INTO</> clause to
1445         PL/PgSQL's <command>EXECUTE</> statement (Pavel Stehule, Neil)
1446        </para>
1447       </listitem>
1448
1449       <listitem>
1450        <para>
1451         Make <command>CREATE TABLE AS</> set <command>ROW_COUNT</> (Tom)
1452        </para>
1453       </listitem>
1454
1455       <listitem>
1456        <para>
1457         Define <literal>SQLSTATE</> and <literal>SQLERRM</> to return
1458         the <literal>SQLSTATE</> and error message of the current
1459         exception (Pavel Stehule, Neil)
1460        </para>
1461        <para>
1462         These variables are only defined inside exception blocks.
1463        </para>
1464       </listitem>
1465
1466       <listitem>
1467        <para>
1468         Allow the parameters to the <command>RAISE</> statement to be
1469         expressions (Pavel Stehule, Neil)
1470        </para>
1471       </listitem>
1472
1473       <listitem>
1474        <para>
1475         Add a loop <command>CONTINUE</> statement (Pavel Stehule, Neil)
1476        </para>
1477       </listitem>
1478
1479       <listitem>
1480        <para>
1481         Allow block and loop labels (Pavel Stehule)
1482        </para>
1483       </listitem>
1484
1485      </itemizedlist>
1486     </sect3>
1487   
1488   
1489     <sect3>
1490      <title>PL/Perl Server-Side Language Changes</title>
1491      <itemizedlist>
1492
1493       <listitem>
1494        <para>
1495         Allow large result sets to be returned efficiently (Abhijit
1496         Menon-Sen)
1497        </para>
1498        <para>
1499         This allows functions to use <function>return_next()</> to avoid
1500         building the entire result set in memory.
1501        </para>
1502       </listitem>
1503
1504       <listitem>
1505        <para>
1506         Allow one-row-at-a-time retrieval of query results (Abhijit Menon-Sen)
1507        </para>
1508        <para>
1509         This allows functions to use <function>spi_query()</> and
1510         <function>spi_fetchrow()</> to avoid accumulating the entire
1511         result set in memory.
1512        </para>
1513       </listitem>
1514
1515       <listitem>
1516        <para>
1517         Force PL/Perl to handle strings as <literal>UTF8</> if the
1518         server encoding is <literal>UTF8</> (David Kamholz)
1519        </para>
1520       </listitem>
1521
1522       <listitem>
1523        <para>
1524         Add a validator function for PL/Perl (Andrew)
1525        </para>
1526        <para>
1527         This allows syntax errors to be reported at definition time,
1528         rather than execution time.
1529        </para>
1530       </listitem>
1531
1532       <listitem>
1533        <para>
1534         Allow PL/Perl to return a Perl array when the function returns
1535         an array type (Andrew)
1536        </para>
1537        <para>
1538         This basically maps <productname>PostgreSQL</productname> arrays
1539         to Perl arrays.
1540        </para>
1541       </listitem>
1542
1543       <listitem>
1544        <para>
1545         Allow Perl non-fatal warnings to generate <command>NOTICE</>
1546         messages (Andrew)
1547        </para>
1548       </listitem>
1549
1550       <listitem>
1551        <para>
1552         Allow Perl's <literal>strict</> mode to be enabled (Andrew)
1553        </para>
1554       </listitem>
1555
1556      </itemizedlist>
1557     </sect3>
1558
1559
1560     <sect3>
1561      <title><application>psql</> Changes</title>
1562      <itemizedlist>
1563   
1564       <listitem>
1565        <para>
1566         Add <command>\set ON_ERROR_ROLLBACK</> to allow statements in
1567         a transaction to error without affecting the rest of the
1568         transaction (Greg Sabino Mullane)
1569        </para>
1570        <para>
1571         This is basically implemented by wrapping every statement in a
1572         sub-transaction.
1573        </para>
1574       </listitem>
1575
1576       <listitem>
1577        <para>
1578         Add support for <literal>\x</> hex strings in
1579         <application>psql</> variables (Bruce)
1580        </para>
1581        <para>
1582         Octal escapes were already supported.
1583        </para>
1584       </listitem>
1585
1586       <listitem>
1587        <para>
1588         Add support for <command>troff -ms</> output format (Roger
1589         Leigh)
1590        </para>
1591       </listitem>
1592
1593       <listitem>
1594        <para>
1595         Allow the history file location to be controlled by
1596         <envar>HISTFILE</> (Andreas Seltenreich)
1597        </para>
1598        <para>
1599         This allows configuration of per-database history storage.
1600        </para>
1601       </listitem>
1602
1603       <listitem>
1604        <para>
1605         Prevent <command>\x</> (expanded mode) from affecting
1606         backslash-command displays (Neil)
1607        </para>
1608       </listitem>
1609
1610       <listitem>
1611        <para>
1612         Add <option>-L</> option to <application>psql</application> to
1613         log sessions (Lorne Sunley)
1614        </para>
1615        <para>
1616         This option was added because some operating systems do not have
1617         simple command-line activity logging functionality.
1618        </para>
1619       </listitem>
1620
1621       <listitem>
1622        <para>
1623         Make <command>\d</> show the tablespaces of indexes (Qingqing
1624         Zhou)
1625        </para>
1626       </listitem>
1627
1628       <listitem>
1629        <para>
1630         Allow <application>psql</application> help (<command>\h</>) to
1631         make a best guess on the proper help information (Greg Sabino
1632         Mullane)
1633        </para>
1634        <para>
1635         This allows the user to just add <command>\h</> to the front of
1636         the syntax error query and get help on the supported syntax.
1637         Previously any additional query text beyond the command name
1638         had to be removed to use <command>\h</>.
1639        </para>
1640       </listitem>
1641
1642       <listitem>
1643        <para>
1644         Add <command>\pset numericlocale</> to allow numbers to be
1645         output in a locale-aware format (Eugen Nedelcu)
1646        </para>
1647        <para>
1648         For example, using <literal>C</> locale <literal>100000</> would
1649         be output as <literal>100,000.0</> while a European locale might
1650         output this value as <literal>100.000,0</>.
1651        </para>
1652       </listitem>
1653
1654       <listitem>
1655        <para>
1656         Make startup banner show both server version number and
1657         <application>psql</>'s version number, when they are different (Bruce)
1658        </para>
1659        <para>
1660         Also, a warning will be shown if the server and <application>psql</>
1661         are from different major releases.
1662        </para>
1663       </listitem>
1664
1665      </itemizedlist>
1666     </sect3>
1667   
1668   
1669     <sect3>
1670      <title><application>pg_dump</> Changes</title>
1671      <itemizedlist>
1672   
1673       <listitem>
1674        <para>
1675         Add <option>-n</> / <option>--schema</> switch to 
1676         <application>pg_restore</> (Richard van den Berg)
1677        </para>
1678        <para>
1679         This allows only objects from a specified schema to be restored.
1680        </para>
1681       </listitem>
1682
1683       <listitem>
1684        <para>
1685         Allow <application>pg_dump</> to dump a consistent snapshot of 
1686         large objects (Tom)
1687        </para>
1688       </listitem>
1689
1690       <listitem>
1691        <para>
1692         Allow <application>pg_dump</> to dump large objects even in 
1693         text mode (Tom)
1694        </para>
1695       </listitem>
1696
1697       <listitem>
1698        <para>
1699         Dump comments for large objects (Tom)
1700        </para>
1701       </listitem>
1702
1703       <listitem>
1704        <para>
1705         Add <option>--encoding</> to <application>pg_dump</> 
1706         (Magnus Hagander)
1707        </para>
1708        <para>
1709         This allows a database to be dumped in an encoding that is
1710         different from the server's encoding. This is valuable when
1711         transferring the dump to a machine with a different encoding.
1712        </para>
1713       </listitem>
1714
1715       <listitem>
1716        <para>
1717         Rely on <structname>pg_pltemplate</> for procedural languages (Tom)
1718        </para>
1719        <para>
1720         If the call handler for a procedural language is in the
1721         <literal>pg_catalog</> schema, <application>pg_dump</> does not
1722         dump the handler.  Instead, it dumps the language using just
1723         <command>CREATE LANGUAGE <replaceable>name</></command>,
1724         relying on the <structname>pg_pltemplate</> catalog to provide
1725         the language's creation parameters at load time.
1726        </para>
1727       </listitem>
1728
1729      </itemizedlist>
1730     </sect3>
1731   
1732   
1733     <sect3>
1734      <title><application>libpq</application> Changes</title>
1735      <itemizedlist>
1736   
1737       <listitem>
1738        <para>
1739         Add a <envar>PGPASSFILE</> environment variable to specify the
1740         password file's filename (Andrew)
1741        </para>
1742       </listitem>
1743
1744       <listitem>
1745        <para>
1746         Add <function>lo_create()</>, that is similar to
1747         <function>lo_creat()</> but allows the OID of the large object
1748         to be specified (Tom)
1749        </para>
1750       </listitem>
1751
1752       <listitem>
1753        <para>
1754         Make <application>libpq</application> consistently return an error
1755         to the client application on <function>malloc()</function>
1756         failure (Neil)
1757        </para>
1758       </listitem>
1759      </itemizedlist>
1760     </sect3>
1761   
1762   
1763     <sect3>
1764      <title>Source Code Changes</title>
1765      <itemizedlist>
1766   
1767       <listitem>
1768        <para>
1769         Add spinlock support for the Itanium processor using Intel
1770         compiler (Vikram Kalsi)
1771        </para>
1772       </listitem>
1773
1774       <listitem>
1775        <para>
1776         Add Kerberos 5 support for Windows (Magnus)
1777        </para>
1778       </listitem>
1779
1780       <listitem>
1781        <para>
1782         Add Chinese FAQ (laser@pgsqldb.com)
1783        </para>
1784       </listitem>
1785
1786       <listitem>
1787        <para>
1788         Rename Rendezvous to Bonjour to match OS/X feature renaming
1789         (Bruce)
1790        </para>
1791       </listitem>
1792
1793       <listitem>
1794        <para>
1795         Add support for <literal>fsync_writethrough</literal> on
1796         Darwin (Chris Campbell)
1797        </para>
1798       </listitem>
1799
1800       <listitem>
1801        <para>
1802         Streamline the passing of information within the server, the
1803         optimizer, and the lock system (Tom)
1804        </para>
1805       </listitem>
1806
1807       <listitem>
1808        <para>
1809         Allow <application>pg_config</> to be compiled using MSVC (Andrew)
1810        </para>
1811        <para>
1812         This is required to build DBD::Pg using <application>MSVC</>.
1813        </para>
1814       </listitem>
1815
1816       <listitem>
1817        <para>
1818         Remove support for Kerberos V4 (Magnus)
1819        </para>
1820        <para>
1821         Kerberos 4 had security vulnerabilities and is no longer
1822         maintained.
1823        </para>
1824       </listitem>
1825
1826       <listitem>
1827        <para>
1828         Code cleanups (Coverity static analysis performed by
1829         EnterpriseDB)
1830        </para>
1831       </listitem>
1832
1833       <listitem>
1834        <para>
1835         Modify <filename>postgresql.conf</> to use documentation defaults
1836         <literal>on</>/<literal>off</> rather than
1837         <literal>true</>/<literal>false</> (Bruce)
1838        </para>
1839       </listitem>
1840
1841       <listitem>
1842        <para>
1843         Enhance <application>pg_config</> to be able to report more
1844         build-time values (Tom)
1845        </para>
1846       </listitem>
1847
1848       <listitem>
1849        <para>
1850         Allow <application>libpq</application> to be built thread-safe
1851         on Windows (Dave Page)
1852        </para>
1853       </listitem>
1854
1855       <listitem>
1856        <para>
1857         Allow IPv6 connections to be used on Win32 (Andrew)
1858        </para>
1859       </listitem>
1860
1861       <listitem>
1862        <para>
1863         Move private declarations from <filename>gist.h</filename> to
1864         <filename>gist_private.h</filename> (Neil)
1865        </para>
1866
1867        <para>
1868         In previous releases, <filename>gist.h</> contained both the
1869         public GiST API (intended for use by authors of GiST index
1870         implementations) as well as some private declarations used by
1871         the implementation of GiST itself. The latter have been moved
1872         to a separate file, <filename>gist_private.h</>. Most GiST
1873         index implementations should be unaffected.
1874        </para>
1875       </listitem>
1876
1877       <listitem>
1878        <para>
1879         Overhaul GiST memory management (Neil)
1880        </para>
1881
1882        <para>
1883         GiST methods are now always invoked in a short-lived memory
1884         context. Therefore, memory allocated via <function>palloc()</>
1885         will be reclaimed automatically, so GiST index implementations
1886         do not need to manually release allocated memory via
1887         <function>pfree()</>.
1888        </para>
1889       </listitem>
1890      </itemizedlist>
1891     </sect3>
1892
1893
1894     <sect3>
1895      <title>Contrib Changes</title>
1896      <itemizedlist>
1897   
1898       <listitem>
1899        <para>
1900         Add <filename>/contrib/pg_buffercache</> contrib module (Mark
1901         Kirkwood)
1902        </para>
1903        <para>
1904         This displays the contents of the buffer cache, for debugging and
1905         performance tuning purposes.
1906        </para>
1907       </listitem>
1908
1909       <listitem>
1910        <para>
1911         Remove <filename>/contrib/array</> because it is obsolete (Tom)
1912        </para>
1913       </listitem>
1914
1915       <listitem>
1916        <para>
1917         Clean up the <filename>/contrib/lo</> module (Tom)
1918        </para>
1919       </listitem>
1920
1921       <listitem>
1922        <para>
1923         Move <filename>/contrib/findoidjoins</> to
1924         <filename>/src/tools</> (Tom)
1925        </para>
1926       </listitem>
1927
1928       <listitem>
1929        <para>
1930         Remove the <literal>&lt;&lt</>, <literal>&gt;&gt;</>,
1931         <literal>&amp;&lt</>, and <literal>&amp;&gt;</> operators from
1932         <filename>/contrib/cube</>
1933        </para>
1934        <para>
1935         These operators were not useful.
1936        </para>
1937       </listitem>
1938
1939       <listitem>
1940        <para>
1941         Improve <filename>/contrib/btree_gist</> (Janko Richter)
1942        </para>
1943       </listitem>
1944
1945       <listitem>
1946        <para>
1947         Improve <filename>/contrib/pgcrypto</> (Marko Kreen)
1948        </para>
1949
1950        <itemizedlist>
1951   
1952         <listitem>
1953          <para>
1954           Implementation of OpenPGP symmetric-key and public-key encryption
1955          </para>
1956          <para>
1957           Both RSA and Elgamal public-key algorithms are supported.
1958          </para>
1959         </listitem>
1960
1961         <listitem>
1962          <para>
1963           Stand alone build: include SHA256/384/512 hashes, Fortuna PRNG
1964          </para>
1965         </listitem>
1966
1967         <listitem>
1968          <para>
1969           OpenSSL build: support 3DES, use internal AES with OpenSSL &lt; 0.9.7
1970          </para>
1971         </listitem>
1972
1973         <listitem>
1974          <para>
1975           Take build parameters (OpenSSL, zlib) from <filename>configure</> result
1976          </para>
1977          <para>
1978           There is no need to edit the <filename>Makefile</> anymore.
1979          </para>
1980         </listitem>
1981
1982         <listitem>
1983          <para>
1984           Remove support for <filename>libmhash</> and <filename>libmcrypt</>
1985          </para>
1986         </listitem>
1987
1988        </itemizedlist>
1989       </listitem>
1990
1991      </itemizedlist>
1992     </sect3>
1993   
1994    </sect2>
1995   </sect1>
1996  
1997   <sect1 id="release-8-0-3">
1998    <title>Release 8.0.3</title>
1999
2000    <note>
2001    <title>Release date</title>
2002    <simpara>2005-05-09</simpara>
2003    </note>
2004
2005    <para>
2006     This release contains a variety of fixes from 8.0.2, including several
2007     security-related issues.
2008    </para>
2009
2010    <sect2>
2011     <title>Migration to version 8.0.3</title>
2012
2013     <para>
2014      A dump/restore is not required for those running 8.0.X.  However,
2015      it is one possible way of handling two significant security problems
2016      that have been found in the initial contents of 8.0.X system
2017      catalogs.  A dump/initdb/reload sequence using 8.0.3's initdb will
2018      automatically correct these problems.
2019     </para>
2020
2021     <para>
2022      The larger security problem is that the built-in character set encoding
2023      conversion functions can be invoked from SQL commands by unprivileged
2024      users, but the functions were not designed for such use and are not
2025      secure against malicious choices of arguments.  The fix involves changing
2026      the declared parameter list of these functions so that they can no longer
2027      be invoked from SQL commands.  (This does not affect their normal use
2028      by the encoding conversion machinery.)
2029     </para>
2030
2031     <para>
2032      The lesser problem is that the <filename>contrib/tsearch2</> module
2033      creates several functions that are improperly declared to return
2034      <type>internal</> when they do not accept <type>internal</> arguments.
2035      This breaks type safety for all functions using <type>internal</>
2036      arguments.
2037     </para>
2038
2039     <para>
2040      It is strongly recommended that all installations repair these errors,
2041      either by initdb or by following the manual repair procedure given
2042      below.  The errors at least allow unprivileged database users to crash
2043      their server process, and may allow unprivileged users to gain the
2044      privileges of a database superuser.
2045     </para>
2046
2047     <para>
2048      If you wish not to do an initdb, perform the same manual repair
2049      procedures shown in the <link linkend="release-7-4-8">7.4.8 release
2050      notes</link>.
2051     </para>
2052    </sect2>
2053
2054    <sect2>
2055     <title>Changes</title>
2056
2057 <itemizedlist>
2058 <listitem><para>Change encoding function signature to prevent
2059 misuse</para></listitem>
2060 <listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
2061 <type>INTERNAL</> function results</para></listitem>
2062 <listitem><para>Guard against incorrect second parameter to
2063 <function>record_out</></para></listitem>
2064 <listitem><para>Repair ancient race condition that allowed a transaction to be
2065 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
2066 than for other purposes</para>
2067 <para>This is an extremely serious bug since it could lead to apparent
2068 data inconsistencies being briefly visible to applications.</para></listitem>
2069 <listitem><para>Repair race condition between relation extension and
2070 VACUUM</para>
2071 <para>This could theoretically have caused loss of a page's worth of
2072 freshly-inserted data, although the scenario seems of very low probability.
2073 There are no known cases of it having caused more than an Assert failure.
2074 </para></listitem>
2075 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
2076 <para>
2077 The comparison code was wrong in the case where the
2078 <literal>--enable-integer-datetimes</> configuration switch had been used.
2079 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
2080 it will need to be <command>REINDEX</>ed after installing this update, because
2081 the fix corrects the sort order of column values.
2082 </para></listitem>
2083 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
2084 <type>TIME WITH TIME ZONE</> values</para></listitem>
2085 <listitem><para>Fix mis-display of negative fractional seconds in
2086 <type>INTERVAL</> values</para>
2087 <para>
2088 This error only occurred when the
2089 <literal>--enable-integer-datetimes</> configuration switch had been used.
2090 </para></listitem>
2091 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
2092 correctly (Neil)</para></listitem>
2093 <listitem><para>Still more 64-bit fixes for
2094 <filename>contrib/intagg</></para></listitem>
2095 <listitem><para>Prevent incorrect optimization of functions returning
2096 <type>RECORD</></para></listitem>
2097 <listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
2098 <listitem><para>Fix Borland makefile for libpq</para></listitem>
2099 <listitem><para>Fix <filename>contrib/btree_gist</> for <type>timetz</> type
2100 (Teodor)</para></listitem>
2101 <listitem><para>Make <command>pg_ctl</> check the PID found in
2102 <filename>postmaster.pid</> to see if it is still a live
2103 process</para></listitem>
2104 <listitem><para>Fix <command>pg_dump</>/<command>pg_restore</> problems caused
2105 by addition of dump timestamps</para></listitem>
2106 <listitem><para>Fix interaction between materializing holdable cursors and
2107 firing deferred triggers during transaction commit</para></listitem>
2108 <listitem><para>Fix memory leak in SQL functions returning pass-by-reference
2109 data types</para></listitem>
2110 </itemizedlist>
2111
2112    </sect2>
2113   </sect1>
2114
2115   <sect1 id="release-8-0-2">
2116    <title>Release 8.0.2</title>
2117
2118    <note>
2119    <title>Release date</title>
2120    <simpara>2005-04-07</simpara>
2121    </note>
2122
2123    <para>
2124     This release contains a variety of fixes from 8.0.1.
2125    </para>
2126
2127    <sect2>
2128     <title>Migration to version 8.0.2</title>
2129
2130     <para>
2131      A dump/restore is not required for those running 8.0.*.
2132      This release updates the major version number of the
2133      <productname>PostgreSQL</productname> libraries, so it might be
2134      necessary to re-link some user applications if they cannot
2135      find the properly-numbered shared library.
2136     </para>
2137    </sect2>
2138
2139    <sect2>
2140     <title>Changes</title>
2141
2142 <itemizedlist>
2143 <listitem><para>Increment the major version number of all interface 
2144  libraries (Bruce)</para>
2145 <para>
2146  This should have been done in 8.0.0.  It is required so 7.4.X versions 
2147  of PostgreSQL client applications, like <application>psql</>,
2148  can be used on the same machine as 8.0.X applications.  This might require 
2149  re-linking user applications that use these libraries.
2150 </para></listitem>
2151 <listitem><para>Add Windows-only <varname>wal_sync_method</> setting of
2152  <option>fsync_writethrough</> (Magnus, Bruce)</para>
2153 <para>
2154  This setting causes <productname>PostgreSQL</productname> to write through
2155  any disk-drive write cache when writing to WAL.
2156  This behavior was formerly called <option>fsync</>, but was
2157  renamed because it acts quite differently from <option>fsync</> on other
2158  platforms.
2159 </para>
2160 </listitem>
2161 <listitem><para>Enable the <varname>wal_sync_method</> setting of
2162  <option>open_datasync</> on Windows, and make it the default for that 
2163   platform (Magnus, Bruce)</para>
2164 <para>
2165  Because the default is no longer <option>fsync_writethrough</>,
2166  data loss is possible during a power failure if the disk drive has
2167  write caching enabled. To turn off the write cache on Windows, 
2168  from the <application>Device Manager</>, choose the drive properties, 
2169  then <literal>Policies</>.
2170 </para>
2171 </listitem>
2172 <listitem><para>New cache management algorithm <acronym>2Q</> replaces 
2173  <acronym>ARC</> (Tom)</para>
2174 <para>
2175  This was done to avoid a pending US patent on <acronym>ARC</>.  The 
2176  <acronym>2Q</> code might be a few percentage points slower than 
2177  <acronym>ARC</> for some work loads.  A better cache management algorithm
2178  will appear in 8.1.
2179 </para></listitem>
2180 <listitem><para>Planner adjustments to improve behavior on freshly-created
2181 tables (Tom)</para></listitem>
2182 <listitem><para>Allow plpgsql to assign to an element of an array that is
2183 initially <literal>NULL</> (Tom)</para>
2184 <para>
2185  Formerly the array would remain <literal>NULL</>, but now it becomes a
2186  single-element array.  The main SQL engine was changed to handle
2187  <command>UPDATE</> of a null array value this way in 8.0, but the similar
2188  case in plpgsql was overlooked.
2189 </para>
2190 </listitem>
2191 <listitem><para>Convert <literal>\r\n</> and <literal>\r</> to <literal>\n</>
2192 in plpython function bodies (Michael Fuhr)</para>
2193 <para>
2194   This prevents syntax errors when plpython code is written on a Windows or
2195   Mac client.
2196 </para>
2197 </listitem>
2198 <listitem><para>Allow SPI cursors to handle utility commands that return rows,
2199 such as <command>EXPLAIN</> (Tom)</para></listitem>
2200 <listitem><para>Fix <command>CLUSTER</> failure after <command>ALTER TABLE 
2201  SET WITHOUT OIDS</> (Tom)</para></listitem>
2202 <listitem><para>Reduce memory usage of <command>ALTER TABLE ADD COLUMN</> 
2203  (Neil)</para></listitem>
2204 <listitem><para>Fix <command>ALTER LANGUAGE RENAME</> (Tom)</para></listitem>
2205 <listitem><para>Document the Windows-only <literal>register</> and
2206 <literal>unregister</> options of <application>pg_ctl</> (Magnus)</para></listitem>
2207 <listitem><para>Ensure operations done during backend shutdown are counted by
2208 statistics collector</para>
2209 <para>
2210  This is expected to resolve reports of <application>pg_autovacuum</>
2211  not vacuuming the system catalogs often enough &mdash; it was not being
2212  told about catalog deletions caused by temporary table removal during
2213  backend exit.
2214 </para></listitem>
2215 <listitem><para>Change the Windows default for configuration parameter
2216  <varname>log_destination</> to <option>eventlog</> (Magnus)</para>
2217 <para>
2218  By default, a server running on Windows will now send log output to the
2219  Windows event logger rather than standard error.
2220 </para></listitem>
2221 <listitem><para>Make Kerberos authentication work on Windows (Magnus)</para></listitem>
2222 <listitem><para>Allow <command>ALTER DATABASE RENAME</> by superusers 
2223  who aren't flagged as having CREATEDB privilege (Tom)</para></listitem>
2224 <listitem><para>Modify WAL log entries for <command>CREATE</> and
2225 <command>DROP DATABASE</> to not specify absolute paths (Tom)</para>
2226  <para>This allows point-in-time recovery on a different machine with possibly
2227  different database location.  Note that <command>CREATE TABLESPACE</> still
2228  poses a hazard in such situations.
2229 </para></listitem>
2230 <listitem><para>Fix crash from a backend exiting with an open transaction 
2231  that created a table and opened a cursor on it (Tom)</para></listitem>
2232 <listitem><para>Fix <function>array_map()</> so it can call PL functions 
2233  (Tom)</para></listitem>
2234 <listitem><para>Several <filename>contrib/tsearch2</> and
2235 <filename>contrib/btree_gist</> fixes (Teodor)
2236  </para></listitem>
2237 <listitem><para>Fix crash of some <filename>contrib/pgcrypto</> 
2238  functions on some platforms (Marko Kreen)</para></listitem>
2239 <listitem><para>Fix <filename>contrib/intagg</> for 64-bit platforms 
2240  (Tom)</para></listitem>
2241 <listitem><para>Fix ecpg bugs in parsing of <command>CREATE</> statement 
2242  (Michael)</para></listitem>
2243 <listitem><para>Work around gcc bug on powerpc and amd64 causing problems in 
2244  ecpg (Christof Petig)</para></listitem>
2245 <listitem><para>Do not use locale-aware versions of <function>upper()</>, 
2246  <function>lower()</>, and <function>initcap()</> when the locale is
2247  <literal>C</> (Bruce)</para>
2248 <para>
2249   This allows these functions to work on platforms that generate errors
2250   for non-7-bit data when the locale is <literal>C</>.
2251 </para></listitem>
2252 <listitem><para>Fix <function>quote_ident()</> to quote names that match keywords (Tom)</para></listitem>
2253 <listitem><para>Fix <function>to_date()</> to behave reasonably when 
2254  <literal>CC</> and <literal>YY</> fields are both used (Karel)</para></listitem>
2255 <listitem><para>Prevent <function>to_char(interval)</> from failing 
2256  when given a zero-month interval (Tom)</para></listitem>
2257 <listitem><para>Fix wrong week returned by <function>date_trunc('week')</>
2258 (Bruce)</para>
2259 <para>
2260  <function>date_trunc('week')</>
2261  returned the wrong year for the first few days of January in some years.
2262 </para></listitem>
2263 <listitem><para>Use the correct default mask length for class <literal>D</>
2264  addresses in <type>INET</> data types (Tom)</para></listitem>
2265 </itemizedlist>
2266
2267    </sect2>
2268   </sect1>
2269
2270   <sect1 id="release-8-0-1">
2271    <title>Release 8.0.1</title>
2272
2273    <note>
2274    <title>Release date</title>
2275    <simpara>2005-01-31</simpara>
2276    </note>
2277
2278    <para>
2279     This release contains a variety of fixes from 8.0.0, including several
2280     security-related issues.
2281    </para>
2282
2283    <sect2>
2284     <title>Migration to version 8.0.1</title>
2285
2286     <para>
2287      A dump/restore is not required for those running 8.0.0.
2288     </para>
2289    </sect2>
2290
2291    <sect2>
2292     <title>Changes</title>
2293
2294 <itemizedlist>
2295 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
2296 <para>
2297 On platforms that will automatically execute initialization functions of a
2298 shared library (this includes at least Windows and ELF-based Unixen),
2299 <command>LOAD</> can be used to make the server execute arbitrary code.
2300 Thanks to NGS Software for reporting this.</para></listitem>
2301 <listitem><para>Check that creator of an aggregate function has the right to
2302 execute the specified transition functions</para>
2303 <para>
2304 This oversight made it possible to bypass denial of EXECUTE
2305 permission on a function.</para></listitem>
2306 <listitem><para>Fix security and 64-bit issues in
2307 contrib/intagg</para></listitem>
2308 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
2309 Jurka)</para></listitem>
2310 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
2311 many parameters (Neil)</para></listitem>
2312 <listitem><para>Make <command>ALTER TABLE ADD COLUMN</> enforce domain
2313 constraints in all cases</para></listitem>
2314 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
2315 <para>
2316 The result of the join was mistakenly supposed to be sorted the same as the
2317 left input.  This could not only deliver mis-sorted output to the user, but
2318 in case of nested merge joins could give outright wrong answers.
2319 </para></listitem>
2320 <listitem><para>Improve planning of grouped aggregate queries</para></listitem>
2321 <listitem><para><command>ROLLBACK TO <replaceable>savepoint</></command>
2322 closes cursors created since the savepoint</para></listitem>
2323 <listitem><para>Fix inadequate backend stack size on Windows</para></listitem>
2324 <listitem><para>Avoid SHGetSpecialFolderPath() on Windows
2325 (Magnus)</para></listitem>
2326 <listitem><para>Fix some problems in running pg_autovacuum as a Windows
2327 service (Dave Page)</para></listitem>
2328 <listitem><para>Multiple minor bug fixes in
2329 pg_dump/pg_restore</para></listitem>
2330 <listitem><para>Fix ecpg segfault with named structs used in
2331 typedefs (Michael)</para></listitem>
2332 </itemizedlist>
2333
2334    </sect2>
2335   </sect1>
2336
2337   <sect1 id="release-8-0">
2338    <title>Release 8.0</title>
2339
2340    <note>
2341     <title>Release date</title>
2342     <simpara>2005-01-19</simpara>
2343    </note>
2344  
2345    <sect2>
2346     <title>Overview</title>
2347  
2348     <para>
2349      Major changes in this release:
2350     </para>
2351
2352     <variablelist>
2353      <varlistentry>
2354       <term>
2355        Microsoft Windows Native Server
2356       </term>
2357
2358       <listitem>
2359        <para>
2360         This is the first <productname>PostgreSQL</productname> release
2361         to run natively on <trademark class=registered>Microsoft Windows</> as
2362         a server. It can run as a <productname>Windows</> service. This
2363         release supports NT-based Windows releases like
2364         <productname>Windows 2000</>, <productname>Windows XP</>, and
2365         <productname>Windows 2003</>. Older releases like
2366         <productname>Windows 95</>, <productname>Windows 98</>, and
2367         <productname>Windows ME</> are not supported because these operating
2368         systems do not have the infrastructure to support
2369         <productname>PostgreSQL</productname>. A separate installer
2370         project has been created to ease installation on
2371         <productname>Windows</> &mdash; see <ulink
2372         url="http://www.postgresql.org/ftp/win32/"></ulink>.
2373        </para>
2374
2375        <para>
2376         Although tested throughout our release cycle, the Windows port
2377         does not have the benefit of years of use in production
2378         environments that <productname>PostgreSQL</productname> has on
2379         Unix platforms.  Therefore it should be treated with the same
2380         level of caution as you would a new product.
2381        </para>
2382
2383        <para>
2384         Previous releases required the Unix emulation toolkit
2385         <productname>Cygwin</> in order to run the server on Windows
2386         operating systems.  <productname>PostgreSQL</productname> has
2387         supported native clients on Windows for many years.
2388        </para>
2389       </listitem>
2390      </varlistentry>
2391
2392      <varlistentry>
2393       <term>
2394        Savepoints
2395       </term>
2396
2397       <listitem>
2398        <para>
2399         Savepoints allow specific parts of a transaction to be aborted
2400         without affecting the remainder of the transaction. Prior
2401         releases had no such capability; there was no way to recover
2402         from a statement failure within a transaction except by
2403         aborting the whole transaction. This feature is valuable for
2404         application writers who require error recovery within a
2405         complex transaction.
2406        </para>
2407       </listitem>
2408      </varlistentry>
2409
2410      <varlistentry>
2411       <term>
2412        Point-In-Time Recovery
2413       </term>
2414
2415       <listitem>
2416        <para>
2417         In previous releases there was no way to recover from disk
2418         drive failure except to restore from a previous backup or use
2419         a standby replication server.  Point-in-time recovery allows
2420         continuous backup of the server.  You can recover either to
2421         the point of failure or to some transaction in the past.
2422        </para>
2423       </listitem>
2424      </varlistentry>
2425
2426      <varlistentry>
2427       <term>
2428        Tablespaces
2429       </term>
2430
2431       <listitem>
2432        <para>
2433         Tablespaces allow administrators to select different file systems
2434         for storage of individual tables, indexes, and databases.
2435         This improves performance and control over disk space
2436         usage. Prior releases used <application>initlocation</> and
2437         manual symlink management for such tasks.
2438        </para>
2439       </listitem>
2440      </varlistentry>
2441
2442      <varlistentry>
2443       <term>
2444        Improved Buffer Management, <command>CHECKPOINT</command>,
2445        <command>VACUUM</command>
2446       </term>
2447
2448       <listitem>
2449        <para>
2450         This release has a more intelligent buffer replacement strategy,
2451         which will make better use of available shared buffers and
2452         improve performance. The performance impact of vacuum and
2453         checkpoints is also lessened.
2454        </para>
2455       </listitem>
2456      </varlistentry>
2457
2458      <varlistentry>
2459       <term>
2460        Change Column Types
2461       </term>
2462
2463       <listitem>
2464        <para>
2465         A column's data type can now be changed with <command>ALTER
2466         TABLE</command>.
2467        </para>
2468       </listitem>
2469      </varlistentry>
2470
2471      <varlistentry>
2472       <term>
2473        New Perl Server-Side Language
2474       </term>
2475
2476       <listitem>
2477        <para>
2478         A new version of the <application>plperl</> server-side language now
2479         supports a persistent shared storage area, triggers, returning records
2480         and arrays of records, and SPI calls to access the database.
2481        </para>
2482       </listitem>
2483      </varlistentry>
2484
2485      <varlistentry>
2486       <term>
2487         Comma-separated-value (CSV) support in <command>COPY</command>
2488       </term>
2489
2490       <listitem>
2491        <para>
2492         <command>COPY</command> can now read and write
2493         comma-separated-value files. It has the flexibility to
2494         interpret non-standard quoting and separation characters too.
2495        </para>
2496       </listitem>
2497      </varlistentry>
2498
2499     </variablelist>
2500    </sect2>
2501  
2502    <sect2>
2503     <title>Migration to version 8.0</title>
2504                                        
2505     <para>
2506      A dump/restore using <application>pg_dump</application> is
2507      required for those wishing to migrate data from any previous
2508      release.
2509     </para>
2510     
2511     <para>
2512      Observe the following incompatibilities:
2513     </para>
2514     
2515     <itemizedlist>
2516
2517      <listitem>
2518       <para>
2519        In <option>READ COMMITTED</> serialization mode, volatile functions
2520        now see the results of concurrent transactions committed up to the
2521        beginning of each statement within the function, rather than up to the
2522        beginning of the interactive command that called the function.
2523       </para>
2524      </listitem>
2525
2526      <listitem>
2527       <para>
2528        Functions declared <option>STABLE</> or <option>IMMUTABLE</> always
2529        use the snapshot of the calling query, and therefore do not see the
2530        effects of actions taken after the calling query starts, whether in
2531        their own transaction or other transactions.  Such a function must be
2532        read-only, too, meaning that it cannot use any SQL commands other than
2533        <command>SELECT</>.
2534       </para>
2535      </listitem>
2536
2537      <listitem>
2538       <para>
2539        Non-deferred <option>AFTER</> triggers are now fired immediately
2540        after completion of the triggering query, rather than upon
2541        finishing the current interactive command. This makes a
2542        difference when the triggering query occurred within a function:
2543        the trigger is invoked before the function proceeds to its next
2544        operation.
2545       </para>
2546      </listitem>
2547
2548      <listitem>
2549       <para>
2550        Server configuration parameters <varname>virtual_host</> and
2551        <varname>tcpip_socket</> have been replaced with a more general
2552        parameter <varname>listen_addresses</>. Also, the server now listens on
2553        <literal>localhost</> by default, which eliminates the need for the
2554        <literal>-i</> postmaster switch in many scenarios.
2555       </para>
2556      </listitem>
2557
2558      <listitem>
2559       <para>
2560        Server configuration parameters <varname>SortMem</> and
2561        <varname>VacuumMem</> have been renamed to <varname>work_mem</>
2562        and <varname>maintenance_work_mem</> to better reflect their
2563        use. The original names are still supported in
2564        <command>SET</command> and <command>SHOW</command>.
2565       </para>
2566      </listitem>
2567
2568      <listitem>
2569       <para>
2570        Server configuration parameters <varname>log_pid</>,
2571        <varname>log_timestamp</>, and <varname>log_source_port</> have been
2572        replaced with a more general parameter <varname>log_line_prefix</>.
2573       </para>
2574      </listitem>
2575
2576      <listitem>
2577       <para>
2578        Server configuration parameter <varname>syslog</> has been
2579        replaced with a more logical <varname>log_destination</> variable to
2580        control the log output destination.
2581       </para>
2582      </listitem>
2583
2584      <listitem>
2585       <para>
2586        Server configuration parameter <varname>log_statement</> has been
2587        changed so it can selectively log just database modification or
2588        data definition statements.  Server configuration parameter
2589        <varname>log_duration</> now prints only when <varname>log_statement</>
2590        prints the query.
2591       </para>
2592      </listitem>
2593
2594      <listitem>
2595       <para>
2596        Server configuration parameter <varname>max_expr_depth</> parameter has
2597        been replaced with <varname>max_stack_depth</> which measures the
2598        physical stack size rather than the expression nesting depth. This
2599        helps prevent session termination due to stack overflow caused by
2600        recursive functions.
2601       </para>
2602      </listitem>
2603
2604      <listitem>
2605       <para>
2606        The <function>length()</> function no longer counts trailing spaces in
2607        <type>CHAR(n)</> values.
2608       </para>
2609      </listitem>
2610
2611     <listitem>
2612      <para>
2613       Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the
2614       integer, not the leftmost N bits as before.
2615      </para>
2616     </listitem>
2617
2618     <listitem>
2619      <para>
2620       Updating an element or slice of a NULL array value now produces
2621       a non-NULL array result, namely an array containing
2622       just the assigned-to positions.
2623      </para>
2624     </listitem>
2625
2626      <listitem>
2627       <para>
2628        Syntax checking of array input values has been tightened up
2629        considerably. Junk that was previously allowed in odd places with
2630        odd results now causes an error. Empty-string element values
2631        must now be written as <literal>""</>, rather than writing nothing.
2632        Also changed behavior with respect to whitespace surrounding
2633        array elements: trailing whitespace is now ignored, for symmetry
2634        with leading whitespace (which has always been ignored).
2635       </para>
2636      </listitem>
2637
2638      <listitem>
2639       <para>
2640        Overflow in integer arithmetic operations is now detected and
2641        reported as an error.
2642       </para>
2643      </listitem>
2644
2645      <listitem>
2646       <para>
2647        The arithmetic operators associated with the single-byte
2648        <type>"char"</> data type have been removed.
2649       </para>
2650      </listitem>
2651
2652      <listitem>
2653       <para>
2654        The <function>extract()</> function (also called
2655        <function>date_part</>) now returns the proper year for BC dates.
2656        It previously returned one less than the correct year. The
2657        function now also returns the proper values for millennium and
2658        century.
2659       </para>
2660      </listitem>
2661
2662     <listitem>
2663      <para>
2664       <type>CIDR</> values now must have their non-masked bits be zero.
2665       For example, we no longer allow
2666       <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such
2667       values should never have been accepted by
2668       <productname>PostgreSQL</productname> and will now be rejected.
2669      </para>
2670     </listitem>
2671
2672      <listitem>
2673       <para>
2674        <command>EXECUTE</command> now returns a completion tag that
2675        matches the executed statement.
2676       </para>
2677      </listitem>
2678
2679      <listitem>
2680       <para>
2681        <application>psql</>'s <command>\copy</> command now reads or
2682        writes to the query's <literal>stdin/stdout</>, rather than
2683        <application>psql</>'s <literal>stdin/stdout</>. The previous
2684        behavior can be accessed via new
2685        <option>pstdin</>/<option>pstdout</> parameters.
2686       </para>
2687      </listitem>
2688
2689      <listitem>
2690       <para>
2691       The JDBC client interface has been removed from the core
2692       distribution, and is now hosted at <ulink url=
2693       "http://jdbc.postgresql.org"></ulink>.
2694       </para>
2695      </listitem>
2696
2697      <listitem>
2698       <para>
2699       The Tcl client interface has also been removed. There are several
2700       Tcl interfaces now hosted at <ulink url=
2701       "http://gborg.postgresql.org"></ulink>.
2702       </para>
2703      </listitem>
2704
2705      <listitem>
2706       <para>
2707        The server now uses its own time zone database, rather than the
2708        one supplied by the operating system. This will provide consistent
2709        behavior across all platforms.  In most cases, there should be
2710        little noticeable difference in time zone behavior, except that
2711        the time zone names used by <command>SET</>/<command>SHOW</>
2712        <varname>TimeZone</> may
2713        be different from what your platform provides.
2714       </para>
2715      </listitem>
2716
2717      <listitem>
2718       <para>
2719        <application>Configure</>'s threading option no longer requires
2720        users to run tests or edit configuration files; threading options
2721        are now detected automatically.
2722       </para>
2723      </listitem>
2724
2725      <listitem>
2726       <para>
2727        Now that tablespaces have been implemented,
2728        <application>initlocation</> has been removed.
2729       </para>
2730      </listitem>
2731
2732      <listitem>
2733       <para>
2734        The API for user-defined GiST indexes has been changed. The
2735        Union and PickSplit methods are now passed a pointer to a
2736        special <structname>GistEntryVector</structname> structure,
2737        rather than a <type>bytea</type>.
2738       </para>
2739      </listitem>
2740
2741     </itemizedlist>
2742    </sect2>
2743
2744   <sect2>
2745    <title>Deprecated Features</title>
2746
2747    <para>
2748      Some aspects of <productname>PostgreSQL</productname>'s behavior
2749      have been determined to be suboptimal. For the sake of backward
2750      compatibility these have not been removed in 8.0, but they are
2751      considered deprecated and will be removed in the next major
2752      release.
2753      </para>
2754  
2755     <itemizedlist>
2756      <listitem>
2757       <para>
2758        The 8.1 release will remove the <function>to_char()</> function
2759        for intervals.
2760       </para>
2761      </listitem>
2762  
2763       <listitem>
2764        <para>
2765         The server now warns of empty strings passed to
2766         <type>oid</type>/<type>float4</type>/<type>float8</type> data
2767         types, but continues to interpret them as zeroes as before.
2768         In the next major release, empty strings will be considered
2769         invalid input for these data types.
2770        </para>
2771       </listitem>
2772  
2773      <listitem>
2774       <para>
2775        By default, tables in <productname>PostgreSQL</productname> 8.0
2776        and earlier are created with <type>OID</>s. In the next release,
2777        this will <emphasis>not</emphasis> be the case: to create a table
2778        that contains <type>OID</>s, the <option>WITH OIDS</> clause must
2779        be specified or the <varname>default_with_oids</varname>
2780        configuration parameter must be set. Users are encouraged to
2781        explicitly specify <option>WITH OIDS</> if their tables
2782        require OIDs for compatibility with future releases of
2783        <productname>PostgreSQL</productname>.
2784       </para>
2785      </listitem>
2786
2787     </itemizedlist>
2788    </sect2>
2789  
2790    <sect2>
2791     <title>Changes</title>
2792  
2793     <para>
2794      Below you will find a detailed account of the changes between
2795      release 8.0 and the previous major release.
2796     </para>
2797  
2798     <sect3>
2799      <title>Performance Improvements</title>
2800      <itemizedlist>
2801   
2802       <listitem>
2803        <para>
2804         Support cross-data-type index usage (Tom)
2805        </para>
2806        <para>
2807         Before this change, many queries would not use an index if the data
2808         types did not match exactly. This improvement makes index usage more
2809         intuitive and consistent.
2810        </para>
2811       </listitem>
2812   
2813       <listitem>
2814        <para>
2815         New buffer replacement strategy that improves caching (Jan)
2816        </para>
2817        <para>
2818         Prior releases used a least-recently-used (LRU) cache to keep
2819         recently referenced pages in memory. The LRU algorithm
2820         did not consider the number of times a specific cache entry was
2821         accessed, so large table scans could force out useful cache pages.
2822         The new cache algorithm uses four separate lists to track most
2823         recently used and most frequently used cache pages and dynamically 
2824         optimize their replacement based on the work load. This should
2825         lead to much more efficient use of the shared buffer cache.
2826         Administrators who have tested shared buffer sizes in the past
2827         should retest with this new cache replacement policy.
2828        </para>
2829       </listitem>
2830   
2831       <listitem>
2832        <para>
2833         Add subprocess to write dirty buffers periodically to reduce
2834         checkpoint writes (Jan)
2835        </para>
2836        <para>
2837         In previous releases, the checkpoint process, which runs every few
2838         minutes, would write all dirty buffers to the operating system's
2839         buffer cache then flush all dirty operating system buffers to
2840         disk. This resulted in a periodic spike in disk usage that often
2841         hurt performance. The new code uses a background writer to trickle
2842         disk writes at a steady pace so checkpoints have far fewer dirty
2843         pages to write to disk. Also, the new code does not issue a global
2844         <function>sync()</> call, but instead <function>fsync()</>s just
2845         the files written since the last checkpoint. This should improve
2846         performance and minimize degradation during checkpoints.
2847        </para>
2848       </listitem>
2849   
2850       <listitem>
2851        <para>
2852         Add ability to prolong vacuum to reduce performance impact (Jan)
2853        </para>
2854        <para>
2855         On busy systems, <command>VACUUM</command> performs many I/O
2856         requests which can hurt performance for other users. This
2857         release allows you to slow down <command>VACUUM</command> to
2858         reduce its impact on other users, though this increases the
2859         total duration of <command>VACUUM</command>.
2860        </para>
2861       </listitem>
2862   
2863       <listitem>
2864        <para>
2865         Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom)
2866        </para>
2867        <para>
2868         This improves the way indexes are scanned when many duplicate
2869         values exist in the index.
2870        </para>
2871       </listitem>
2872   
2873       <listitem>
2874        <para>
2875         Use dynamically-generated table size estimates while planning (Tom)
2876        </para>
2877        <para>
2878         Formerly the planner estimated table sizes using the values seen
2879         by the last <command>VACUUM</command> or <command>ANALYZE</command>,
2880         both as to physical table size (number of pages) and number of rows.
2881         Now, the current physical table size is obtained from the kernel,
2882         and the number of rows is estimated by multiplying the table size
2883         by the row density (rows per page) seen by the last
2884         <command>VACUUM</command> or <command>ANALYZE</command>.  This should
2885         produce more reliable estimates in cases where the table size has
2886         changed significantly since the last housekeeping command.
2887        </para>
2888       </listitem>
2889   
2890       <listitem>
2891        <para>
2892         Improved index usage with <literal>OR</> clauses (Tom)
2893        </para>
2894        <para>
2895         This allows the optimizer to use indexes in statements with many OR
2896         clauses that would not have been indexed in the past.  It can also use
2897         multi-column indexes where the first column is specified and the second
2898         column is part of an <literal>OR</> clause.
2899        </para>
2900       </listitem>
2901   
2902       <listitem>
2903        <para>
2904         Improve matching of partial index clauses (Tom)
2905        </para>
2906        <para>
2907         The server is now smarter about using partial indexes in queries
2908         involving complex <option>WHERE</> clauses.
2909        </para>
2910       </listitem>
2911   
2912       <listitem>
2913        <para>
2914         Improve performance of the GEQO optimizer (Tom)
2915        </para>
2916        <para>
2917         The GEQO optimizer is used to plan queries involving many tables (by
2918         default, twelve or more). This release speeds up the way queries are
2919         analyzed to decrease time spent in optimization.
2920        </para>
2921       </listitem>
2922   
2923       <listitem>
2924        <para>
2925         Miscellaneous optimizer improvements
2926        </para>
2927        <para>
2928         There is not room here to list all the minor improvements made, but
2929         numerous special cases work better than in prior releases.
2930        </para>
2931       </listitem>
2932   
2933       <listitem>
2934        <para>
2935         Improve lookup speed for C functions (Tom)
2936        </para>
2937        <para>
2938         This release uses a hash table to lookup information for dynamically
2939         loaded C functions. This improves their speed so they perform nearly as
2940         quickly as functions that are built into the server executable.
2941        </para>
2942       </listitem>
2943   
2944       <listitem>
2945        <para>
2946         Add type-specific <command>ANALYZE</command> statistics
2947         capability (Mark Cave-Ayland)
2948        </para>
2949        <para>
2950         This feature allows more flexibility in generating statistics
2951         for non-standard data types.
2952        </para>
2953       </listitem>
2954   
2955       <listitem>
2956        <para>
2957         <command>ANALYZE</command> now collects statistics for
2958         expression indexes (Tom)
2959        </para>
2960        <para>
2961         Expression indexes (also called functional indexes) allow users to
2962         index not just columns but the results of expressions and function
2963         calls. With this release, the optimizer can gather and use statistics
2964         about the contents of expression indexes.  This will greatly improve
2965         the quality of planning for queries in which an expression index is
2966         relevant.
2967        </para>
2968       </listitem>
2969   
2970       <listitem>
2971        <para>
2972         New two-stage sampling method for <command>ANALYZE</command>
2973         (Manfred Koizar)
2974        </para>
2975        <para>
2976         This gives better statistics when the density of valid rows is very
2977         different in different regions of a table.
2978        </para>
2979       </listitem>
2980   
2981       <listitem>
2982        <para>
2983         Speed up <command>TRUNCATE</command> (Tom)
2984        </para>
2985        <para>
2986         This buys back some of the performance loss observed in 7.4, while still
2987         keeping <command>TRUNCATE</command> transaction-safe.
2988        </para>
2989       </listitem>
2990   
2991      </itemizedlist>
2992     </sect3>
2993   
2994   
2995     <sect3>
2996      <title>Server Changes</title>
2997      <itemizedlist>
2998   
2999       <listitem>
3000        <para>
3001         Add WAL file archiving and point-in-time recovery (Simon Riggs)
3002        </para>
3003       </listitem>
3004   
3005       <listitem>
3006        <para>
3007         Add tablespaces so admins can control disk layout (Gavin)
3008        </para>
3009       </listitem>
3010   
3011       <listitem>
3012        <para>
3013         Add a built-in log rotation program (Andreas Pflug)
3014        </para>
3015        <para>
3016         It is now possible to log server messages conveniently without
3017         relying on either <application>syslog</> or an external log
3018         rotation program.
3019        </para>
3020       </listitem>
3021   
3022       <listitem>
3023        <para>
3024         Add new read-only server configuration parameters to show server
3025         compile-time settings: <varname>block_size</>,
3026         <varname>integer_datetimes</>, <varname>max_function_args</>,
3027         <varname>max_identifier_length</>, <varname>max_index_keys</>  (Joe)
3028        </para>
3029       </listitem>
3030   
3031       <listitem>
3032        <para>
3033         Make quoting of <literal>sameuser</>, <literal>samegroup</>, and
3034         <literal>all</> remove special meaning of these terms in
3035         <filename>pg_hba.conf</> (Andrew)
3036        </para>
3037       </listitem>
3038   
3039       <listitem>
3040        <para>
3041         Use clearer IPv6 name <literal>::1/128</> for
3042         <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew)
3043        </para>
3044       </listitem>
3045   
3046       <listitem>
3047        <para>
3048         Use CIDR format in <filename>pg_hba.conf</> examples (Andrew)
3049        </para>
3050       </listitem>
3051   
3052       <listitem>
3053        <para>
3054         Rename server configuration parameters <varname>SortMem</> and
3055         <varname>VacuumMem</> to <varname>work_mem</> and
3056         <varname>maintenance_work_mem</> (Old names still supported) (Tom)
3057        </para>
3058        <para>
3059         This change was made to clarify that bulk operations such as index and
3060         foreign key creation use <varname>maintenance_work_mem</>, while
3061         <varname>work_mem</> is for workspaces used during query execution.
3062        </para>
3063       </listitem>
3064   
3065       <listitem>
3066        <para>
3067         Allow logging of session disconnections using server configuration
3068         <varname>log_disconnections</> (Andrew)
3069        </para>
3070       </listitem>
3071   
3072       <listitem>
3073        <para>
3074         Add new server configuration parameter <varname>log_line_prefix</> to
3075         allow control of information emitted in each log line (Andrew)
3076        </para>
3077        <para>
3078         Available information includes user name, database name, remote IP
3079         address, and session start time.
3080        </para>
3081       </listitem>
3082   
3083       <listitem>
3084        <para>
3085         Remove server configuration parameters <varname>log_pid</>,
3086         <varname>log_timestamp</>, <varname>log_source_port</>; functionality
3087         superseded by <varname>log_line_prefix</> (Andrew)
3088        </para>
3089       </listitem>
3090   
3091       <listitem>
3092        <para>
3093         Replace the <varname>virtual_host</> and <varname>tcpip_socket</>
3094         parameters with a unified <varname>listen_addresses</> parameter
3095         (Andrew, Tom)
3096        </para>
3097        <para>
3098         <varname>virtual_host</> could only specify a single IP address to
3099         listen on.  <varname>listen_addresses</> allows multiple addresses
3100         to be specified.
3101        </para>
3102       </listitem>
3103   
3104       <listitem>
3105        <para>
3106         Listen on localhost by default, which eliminates the need for the
3107         <option>-i</> postmaster switch in many scenarios (Andrew)
3108        </para>
3109        <para>
3110         Listening on localhost (<literal>127.0.0.1</>) opens no new
3111         security holes but allows configurations like Windows and JDBC,
3112         which do not support local sockets, to work without special
3113         adjustments.
3114        </para>
3115       </listitem>
3116   
3117       <listitem>
3118        <para>
3119         Remove <varname>syslog</> server configuration parameter, and add more
3120         logical <varname>log_destination</> variable to control log output
3121         location (Magnus)
3122        </para>
3123       </listitem>
3124   
3125       <listitem>
3126        <para>
3127         Change server configuration parameter <varname>log_statement</> to take
3128         values <varname>all</>, <varname>mod</>, <varname>ddl</>, or
3129         <varname>none</> to select which queries are logged (Bruce)
3130        </para>
3131        <para>
3132         This allows administrators to log only data definition changes or
3133         only data modification statements.
3134        </para>
3135       </listitem>
3136   
3137       <listitem>
3138        <para>
3139         Some logging-related configuration parameters could formerly be adjusted
3140         by ordinary users, but only in the <quote>more verbose</> direction.
3141         They are now treated more strictly: only superusers can set them.
3142         However, a superuser may use <command>ALTER USER</> to provide per-user
3143         settings of these values for non-superusers.  Also, it is now possible
3144         for superusers to set values of superuser-only configuration parameters
3145         via <literal>PGOPTIONS</>.
3146        </para>
3147       </listitem>
3148   
3149       <listitem>
3150        <para>
3151         Allow configuration files to be placed outside the data directory (mlw)
3152        </para>
3153        <para>
3154         By default, configuration files are kept in the cluster's top directory.
3155         With this addition, configuration files can be placed outside the
3156         data directory, easing administration.
3157        </para>
3158       </listitem>
3159   
3160       <listitem>
3161        <para>
3162         Plan prepared queries only when first executed so constants can be
3163         used for statistics (Oliver Jowett)
3164        </para>
3165        <para>
3166         Prepared statements plan queries once and execute them many
3167         times. While prepared queries avoid the overhead of re-planning
3168         on each use, the quality of the plan suffers from not knowing the exact
3169         parameters to be used in the query.  In this release, planning of
3170         unnamed prepared statements is delayed until the first execution,
3171         and the actual parameter values of that execution are used as
3172         optimization hints.  This allows use of out-of-line parameter passing
3173         without incurring a performance penalty.
3174        </para>
3175       </listitem>
3176   
3177       <listitem>
3178        <para>
3179         Allow <command>DECLARE CURSOR</command> to take parameters
3180         (Oliver Jowett)
3181        </para>
3182        <para>
3183         It is now useful to issue <command>DECLARE CURSOR</command> in a
3184         <function>Parse</> message with parameters. The parameter values
3185         sent at <function>Bind</> time will be substituted into the
3186         execution of the cursor's query.
3187        </para>
3188       </listitem>
3189   
3190       <listitem>
3191        <para>
3192         Fix hash joins and aggregates of <type>inet</type> and
3193         <type>cidr</type> data types (Tom)
3194        </para>
3195        <para>
3196         Release 7.4 handled hashing of mixed <type>inet</type> and
3197         <type>cidr</type> values incorrectly.  (This bug did not exist
3198         in prior releases because they wouldn't try to hash either
3199         data type.)
3200        </para>
3201       </listitem>
3202   
3203       <listitem>
3204        <para>
3205         Make <varname>log_duration</> print only when <varname>log_statement</>
3206         prints the query (Ed L.)
3207        </para>
3208       </listitem>
3209   
3210      </itemizedlist>
3211     </sect3>
3212   
3213   
3214     <sect3>
3215      <title>Query Changes</title>
3216      <itemizedlist>
3217   
3218       <listitem>
3219        <para>
3220         Add savepoints (nested transactions) (Alvaro)
3221        </para>
3222       </listitem>
3223   
3224       <listitem>
3225        <para>
3226         Unsupported isolation levels are now accepted and promoted to the
3227         nearest supported level (Peter)
3228        </para>
3229        <para>
3230         The SQL specification states that if a database doesn't support a
3231         specific isolation level, it should use the next more restrictive level.
3232         This change complies with that recommendation.
3233        </para>
3234       </listitem>
3235   
3236       <listitem>
3237        <para>
3238         Allow <command>BEGIN WORK</command> to specify transaction
3239         isolation levels like <command>START TRANSACTION</command> does
3240         (Bruce)
3241        </para>
3242       </listitem>
3243   
3244       <listitem>
3245        <para>
3246         Fix table permission checking for cases in which rules generate
3247         a query type different from the originally submitted query (Tom)
3248        </para>
3249       </listitem>
3250   
3251       <listitem>
3252        <para>
3253         Implement dollar quoting to simplify single-quote usage (Andrew, Tom, 
3254         David Fetter)
3255        </para>
3256        <para>
3257         In previous releases, because single quotes had to be used to
3258         quote a function's body, the use of single quotes inside the
3259         function text required use of two single quotes or other error-prone
3260         notations. With this release we add the ability to use "dollar
3261         quoting" to quote a block of text.  The ability to use different
3262         quoting delimiters at different nesting levels greatly simplifies
3263         the task of quoting correctly, especially in complex functions.
3264         Dollar quoting can be used anywhere quoted text is needed.
3265        </para>
3266       </listitem>
3267   
3268       <listitem>
3269        <para>
3270         Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom)
3271        </para>
3272        <para>
3273         <option>CASE</> no longer evaluates the tested expression multiple
3274         times. This has benefits when the expression is complex or is
3275         volatile.
3276        </para>
3277       </listitem>
3278   
3279       <listitem>
3280        <para>
3281         Test <option>HAVING</> before computing target list of an
3282         aggregate query (Tom)
3283        </para>
3284        <para>
3285         Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose)
3286         ... GROUP BY ... HAVING SUM(lose) &gt; 0</>.  This should work but formerly
3287         could fail with divide-by-zero.
3288        </para>
3289       </listitem>
3290   
3291       <listitem>
3292        <para>
3293         Replace <varname>max_expr_depth</> parameter with
3294         <varname>max_stack_depth</> parameter, measured in kilobytes of stack
3295         size (Tom)
3296        </para>
3297        <para>
3298        This gives us a fairly bulletproof defense against crashing due to 
3299        runaway recursive functions. Instead of measuring the depth of expression
3300        nesting, we now directly measure the size of the execution stack.
3301        </para>
3302       </listitem>
3303   
3304       <listitem>
3305        <para>
3306         Allow arbitrary row expressions (Tom)
3307        </para>
3308        <para>
3309         This release allows SQL expressions to contain arbitrary composite
3310         types, that is, row values. It also allows functions to more easily
3311         take rows as arguments and return row values.
3312        </para>
3313       </listitem>
3314         
3315       <listitem>
3316        <para>
3317         Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator
3318         in row and subselect comparisons (Fabien Coelho)
3319        </para>
3320       </listitem>
3321         
3322       <listitem>
3323        <para>
3324         Avoid locale-specific case conversion of basic ASCII letters in
3325         identifiers and keywords (Tom)
3326        </para>
3327        <para>
3328         This solves the <quote>Turkish problem</> with mangling of words
3329         containing <literal>I</> and  <literal>i</>.  Folding of characters
3330         outside the 7-bit-ASCII set is still locale-aware.
3331        </para>
3332       </listitem>
3333         
3334       <listitem>
3335        <para>
3336         Improve syntax error reporting (Fabien, Tom)
3337        </para>
3338        <para>
3339         Syntax error reports are more useful than before.
3340        </para>
3341       </listitem>
3342   
3343       <listitem>
3344        <para>
3345         Change <command>EXECUTE</command> to return a completion tag
3346         matching the executed statement (Kris Jurka)
3347        </para>
3348        <para>
3349         Previous releases return an <command>EXECUTE</command> tag for
3350         any <command>EXECUTE</command> call. In this release, the tag
3351         returned will reflect the command executed.
3352        </para>
3353       </listitem>
3354   
3355       <listitem>
3356        <para>
3357         Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom)
3358        </para>
3359        <para>
3360         Such a clause makes no logical sense, but in some cases the rule
3361         decompiler formerly produced this syntax.
3362        </para>
3363       </listitem>
3364   
3365      </itemizedlist>
3366     </sect3>
3367   
3368   
3369     <sect3>
3370      <title>Object Manipulation Changes</title>
3371      <itemizedlist>
3372   
3373       <listitem>
3374        <para>
3375         Add <command>COMMENT ON</> for casts, conversions, languages,
3376         operator classes, and large objects (Christopher)
3377        </para>
3378       </listitem>
3379   
3380       <listitem>
3381        <para>
3382         Add new server configuration parameter <varname>default_with_oids</> to
3383         control whether tables are created with <type>OID</>s by default (Neil)
3384        </para>
3385        <para>
3386         This allows administrators to control whether <command>CREATE
3387         TABLE</command> commands create tables with or without <type>OID</>
3388         columns by default.  (Note: the current factory default setting for
3389         <varname>default_with_oids</> is <literal>TRUE</>, but the default
3390         will become <literal>FALSE</> in future releases.)
3391        </para>
3392       </listitem>
3393   
3394       <listitem>
3395        <para>
3396         Add <option>WITH</> / <option>WITHOUT OIDS</> clause to
3397         <command>CREATE TABLE AS</command> (Neil)
3398        </para>
3399       </listitem>
3400   
3401       <listitem>
3402        <para>
3403         Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</>
3404         column (<command>ALTER TABLE SET WITHOUT OIDS</> still works)
3405         (Tom)
3406        </para>
3407       </listitem>
3408   
3409       <listitem>
3410        <para>
3411         Allow composite types as table columns (Tom)
3412        </para>
3413       </listitem>
3414   
3415       <listitem>
3416        <para>
3417         Allow <command>ALTER ... ADD COLUMN</> with defaults and
3418         <option>NOT NULL</> constraints; works per SQL spec (Rod)
3419        </para>
3420        <para>
3421         It is now possible for <option>ADD COLUMN</> to create a column
3422         that is not initially filled with NULLs, but with a specified
3423         default value.
3424        </para>
3425       </listitem>
3426   
3427       <listitem>
3428        <para>
3429         Add <command>ALTER COLUMN TYPE</> to change column's type (Rod)
3430        </para>
3431        <para>
3432         It is now possible to alter a column's data type without dropping
3433         and re-adding the column.
3434        </para>
3435       </listitem>
3436   
3437       <listitem>
3438        <para>
3439         Allow multiple <command>ALTER</> actions in a single <command>ALTER
3440         TABLE</command> command (Rod)
3441        </para>
3442        <para>
3443         This is particularly useful for <command>ALTER</> commands that
3444         rewrite the table (which include <option>ALTER COLUMN TYPE</> and
3445         <option>ADD COLUMN</> with a default). By grouping
3446         <command>ALTER</> commands together, the table need be rewritten
3447         only once.
3448        </para>
3449       </listitem>
3450   
3451       <listitem>
3452        <para>
3453         Allow <command>ALTER TABLE</command> to add <type>SERIAL</type>
3454         columns (Tom)
3455        </para>
3456        <para>
3457         This falls out from the new capability of specifying defaults for new
3458         columns.
3459        </para>
3460       </listitem>
3461   
3462       <listitem>
3463        <para>
3464         Allow changing the owners of aggregates, conversions, databases,
3465         functions, operators, operator classes, schemas, types, and tablespaces
3466         (Christopher, Euler Taveira de Oliveira)
3467        </para>
3468        <para>
3469         Previously this required modifying the system tables directly.
3470        </para>
3471       </listitem>
3472   
3473       <listitem>
3474        <para>
3475         Allow temporary object creation to be limited to <option>SECURITY
3476         DEFINER</> functions (Sean Chittenden)
3477        </para>
3478       </listitem>
3479   
3480       <listitem>
3481        <para>
3482         Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher)
3483        </para>
3484        <para>
3485         Prior to this release, there was no way to clear an auto-cluster
3486         specification except to modify the system tables.
3487        </para>
3488       </listitem>
3489   
3490       <listitem>
3491        <para>
3492         Constraint/Index/<type>SERIAL</> names are now
3493         <replaceable>table_column_type</>
3494         with numbers appended to guarantee uniqueness within the schema
3495         (Tom)
3496        </para>
3497        <para>
3498         The SQL specification states that such names should be unique
3499         within a schema.
3500        </para>
3501       </listitem>
3502   
3503       <listitem>
3504        <para>
3505         Add <function>pg_get_serial_sequence()</> to return a
3506         <type>SERIAL</> column's sequence name (Christopher)
3507        </para>
3508        <para>
3509         This allows automated scripts to reliably find the <type>SERIAL</>
3510         sequence name.
3511        </para>
3512       </listitem>
3513   
3514       <listitem>
3515        <para>
3516         Warn when primary/foreign key data type mismatch requires costly lookup
3517        </para>
3518       </listitem>
3519   
3520       <listitem>
3521        <para>
3522         New <command>ALTER INDEX</> command to allow moving of indexes
3523         between tablespaces (Gavin)
3524        </para>
3525       </listitem>
3526   
3527       <listitem>
3528        <para>
3529         Make <command>ALTER TABLE OWNER</> change dependent sequence
3530         ownership too (Alvaro)
3531        </para>
3532       </listitem>
3533   
3534   
3535      </itemizedlist>
3536     </sect3>
3537   
3538   
3539     <sect3>
3540      <title>Utility Command Changes</title>
3541      <itemizedlist>
3542   
3543       <listitem>
3544        <para>
3545         Allow <command>CREATE SCHEMA</command> to create triggers,
3546         indexes, and sequences (Neil)
3547        </para>
3548       </listitem>
3549   
3550       <listitem>
3551        <para>
3552         Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien
3553         Coelho)
3554        </para>
3555        <para>
3556         This allows <option>ALSO</> to be added to rule creation to contrast it with
3557         <option>INSTEAD</> rules.
3558        </para>
3559       </listitem>
3560   
3561       <listitem>
3562        <para>
3563         Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo)
3564        </para>
3565        <para>
3566         This allows the <command>LOCK</command> command to fail if it
3567         would have to wait for the requested lock.
3568        </para>
3569       </listitem>
3570   
3571       <listitem>
3572        <para>
3573         Allow <command>COPY</command> to read and write
3574         comma-separated-value (CSV) files (Andrew, Bruce)
3575        </para>
3576       </listitem>
3577   
3578       <listitem>
3579        <para>
3580         Generate error if the <command>COPY</command> delimiter and NULL
3581         string conflict (Bruce)
3582        </para>
3583       </listitem>
3584   
3585       <listitem>
3586        <para>
3587         <command>GRANT</command>/<command>REVOKE</command> behavior
3588         follows the SQL spec more closely
3589        </para>
3590       </listitem>
3591   
3592       <listitem>
3593        <para>
3594         Avoid locking conflict between <command>CREATE INDEX</command>
3595         and <command>CHECKPOINT</command> (Tom)
3596        </para>
3597        <para>
3598         In 7.3 and 7.4, a long-running B-tree index build could block concurrent
3599         <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the
3600         WAL log could not be recycled.
3601        </para>
3602       </listitem>
3603   
3604       <listitem>
3605        <para>
3606         Database-wide <command>ANALYZE</command> does not hold locks
3607         across tables (Tom)
3608        </para>
3609        <para>
3610         This reduces the potential for deadlocks against other backends
3611         that want exclusive locks on tables.  To get the benefit of this
3612         change, do not execute database-wide <command>ANALYZE</command>
3613         inside a transaction block (<command>BEGIN</command> block); it
3614         must be able to commit and start a new transaction for each
3615         table.
3616        </para>
3617       </listitem>
3618   
3619       <listitem>
3620        <para>
3621         <command>REINDEX</command> does not exclusively lock the index's
3622         parent table anymore
3623        </para>
3624        <para>
3625         The index itself is still exclusively locked, but readers of the
3626         table can continue if they are not using the particular index
3627         being rebuilt.
3628        </para>
3629       </listitem>
3630   
3631       <listitem>
3632        <para>
3633         Erase MD5 user passwords when a user is renamed (Bruce)
3634        </para>
3635        <para>
3636         <productname>PostgreSQL</productname> uses the user name as salt
3637         when encrypting passwords via MD5. When a user's name is changed,
3638         the salt will no longer match the stored MD5 password, so the
3639         stored password becomes useless.  In this release a notice is
3640         generated and the password is cleared.  A new password must then
3641         be assigned if the user is to be able to log in with a password.
3642        </para>
3643       </listitem>
3644   
3645       <listitem>
3646        <para>
3647         New <application>pg_ctl</> <option>kill</> option for Windows (Andrew)
3648        </para>
3649        <para>
3650         Windows does not have a <literal>kill</> command to send signals to
3651         backends so this capability was added to <application>pg_ctl</>.
3652        </para>
3653       </listitem>
3654   
3655       <listitem>
3656        <para>
3657         Information schema improvements
3658        </para>
3659       </listitem>
3660   
3661       <listitem>
3662        <para>
3663         Add <option>--pwfile</> option to
3664         <application>initdb</application> so the initial password can be
3665         set by GUI tools (Magnus)
3666        </para>
3667       </listitem>
3668   
3669       <listitem>
3670        <para>
3671         Detect locale/encoding mismatch in
3672         <application>initdb</application> (Peter)
3673        </para>
3674       </listitem>
3675   
3676       <listitem>
3677        <para>
3678         Add <option>register</> command to <application>pg_ctl</> to
3679         register Windows operating system service (Dave Page)
3680        </para>
3681       </listitem>
3682   
3683      </itemizedlist>
3684     </sect3>
3685   
3686   
3687     <sect3>
3688      <title>Data Type and Function Changes</title>
3689      <itemizedlist>
3690   
3691       <listitem>
3692        <para>
3693         More complete support for composite types (row types)  (Tom)
3694        </para>
3695        <para>
3696         Composite values can be used in many places where only scalar values
3697         worked before.
3698        </para>
3699       </listitem>
3700   
3701       <listitem>
3702        <para>
3703         Reject non-rectangular array values as erroneous (Joe)
3704        </para>
3705        <para>
3706         Formerly, <function>array_in</> would silently build a
3707         surprising result.
3708        </para>
3709       </listitem>
3710   
3711        <listitem>
3712         <para>
3713          Overflow in integer arithmetic operations is now detected (Tom)
3714         </para>
3715        </listitem>
3716   
3717        <listitem>
3718         <para>
3719          The arithmetic operators associated with the single-byte
3720          <type>"char"</> data type have been removed.
3721         </para>
3722         <para>
3723          Formerly, the parser would select these operators in many situations
3724          where an <quote>unable to select an operator</> error would be more
3725          appropriate, such as <literal>null * null</>.  If you actually want
3726          to do arithmetic on a <type>"char"</> column, you can cast it to
3727          integer explicitly.
3728         </para>
3729        </listitem>
3730   
3731       <listitem>
3732         <para>
3733          Syntax checking of array input values considerably tightened up (Joe)
3734         </para>
3735        <para>
3736          Junk that was previously allowed in odd places with odd results
3737          now causes an <literal>ERROR</>, for example, non-whitespace
3738          after the closing right brace.
3739         </para>
3740       </listitem>
3741   
3742       <listitem>
3743         <para>
3744          Empty-string array element values must now be written as
3745          <literal>""</>, rather than writing nothing (Joe)
3746         </para>
3747        <para>
3748          Formerly, both ways of writing an empty-string element value were
3749          allowed, but now a quoted empty string is required.  The case where
3750          nothing at all appears will probably be considered to be a NULL
3751          element value in some future release.
3752         </para>
3753       </listitem>
3754   
3755       <listitem>
3756         <para>
3757          Array element trailing whitespace is now ignored (Joe)
3758         </para>
3759        <para>
3760          Formerly leading whitespace was ignored, but trailing whitespace
3761          between an element value and the delimiter or right brace was
3762          significant.  Now trailing whitespace is also ignored.
3763         </para>
3764       </listitem>
3765   
3766       <listitem>
3767        <para>
3768         Emit array values with explicit array bounds when lower bound is not one
3769         (Joe)
3770        </para>
3771       </listitem>
3772   
3773       <listitem>
3774        <para>
3775         Accept <literal>YYYY-monthname-DD</> as a date string (Tom)
3776        </para>
3777       </listitem>
3778   
3779       <listitem>
3780        <para>
3781         Make <function>netmask</> and <function>hostmask</> functions
3782         return maximum-length mask length (Tom)
3783        </para>
3784       </listitem>
3785   
3786       <listitem>
3787        <para>
3788         Change factorial function to return <type>numeric</type> (Gavin)
3789        </para>
3790        <para>
3791         Returning <type>numeric</type> allows the factorial function to
3792         work for a wider range of input values.
3793        </para>
3794       </listitem>
3795   
3796       <listitem>
3797        <para>
3798         <function>to_char</>/<function>to_date()</> date conversion
3799         improvements (Kurt Roeckx, Fabien Coelho)
3800        </para>
3801       </listitem>
3802   
3803       <listitem>
3804        <para>
3805         Make <function>length()</> disregard trailing spaces in
3806         <type>CHAR(n)</> (Gavin)
3807        </para>
3808        <para>
3809         This change was made to improve consistency: trailing spaces are
3810         semantically insignificant in <type>CHAR(n)</> data, so they
3811         should not be counted by <function>length()</>.
3812        </para>
3813       </listitem>
3814   
3815       <listitem>
3816        <para>
3817         Warn about empty string being passed to
3818         <type>OID</>/<type>float4</>/<type>float8</> data types (Neil)
3819        </para>
3820        <para>
3821         8.1 will throw an error instead.
3822        </para>
3823       </listitem>
3824   
3825       <listitem>
3826        <para>
3827         Allow leading or trailing whitespace in
3828         <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</>
3829         input routines
3830         (Neil)
3831        </para>
3832       </listitem>
3833   
3834       <listitem>
3835        <para>
3836         Better support for IEEE <literal>Infinity</> and <literal>NaN</>
3837         values in <type>float4</type>/<type>float8</type> (Neil)
3838        </para>
3839        <para>
3840         These should now work on all platforms that support IEEE-compliant
3841         floating point arithmetic.
3842        </para>
3843       </listitem>
3844   
3845       <listitem>
3846        <para>
3847         Add <option>week</> option to <function>date_trunc()</> (Robert Creager)
3848        </para>
3849       </listitem>
3850   
3851       <listitem>
3852        <para>
3853         Fix <function>to_char</function> for <literal>1 BC</>
3854         (previously it returned <literal>1 AD</>) (Bruce)
3855        </para>
3856       </listitem>
3857   
3858       <listitem>
3859        <para>
3860         Fix <function>date_part(year)</> for BC dates (previously it
3861         returned one less than the correct year) (Bruce)
3862        </para>
3863       </listitem>
3864   
3865       <listitem>
3866        <para>
3867         Fix <function>date_part()</> to return the proper millennium and
3868         century (Fabien Coelho)
3869        </para>
3870        <para>
3871         In previous versions, the century and millennium results had a wrong
3872         number and started in the wrong year, as compared to standard
3873         reckoning of such things.
3874        </para>
3875       </listitem>
3876   
3877       <listitem>
3878        <para>
3879         Add <function>ceiling()</> as an alias for <function>ceil()</>,
3880         and <function>power()</> as an alias for <function>pow()</> for
3881         standards compliance (Neil)
3882        </para>
3883       </listitem>
3884   
3885       <listitem>
3886        <para>
3887         Change <function>ln()</>, <function>log()</>,
3888         <function>power()</>, and <function>sqrt()</> to emit the correct
3889         <literal>SQLSTATE</> error codes for certain error conditions, as
3890         specified by SQL:2003 (Neil)
3891        </para>
3892       </listitem>
3893   
3894       <listitem>
3895        <para>
3896         Add <function>width_bucket()</> function as defined by SQL:2003 (Neil)
3897        </para>
3898       </listitem>
3899   
3900       <listitem>
3901        <para>
3902         Add <function>generate_series()</> functions to simplify working
3903         with numeric sets (Joe)
3904        </para>
3905       </listitem>
3906   
3907       <listitem>
3908        <para>
3909         Fix <function>upper/lower/initcap()</> functions to work with
3910         multibyte encodings (Tom)
3911        </para>
3912       </listitem>
3913   
3914       <listitem>
3915        <para>
3916         Add boolean and bitwise integer <option>AND</>/<option>OR</>
3917         aggregates (Fabien Coelho)
3918        </para>
3919       </listitem>
3920   
3921       <listitem>
3922        <para>
3923         New session information functions to return network addresses for client
3924         and server (Sean Chittenden)
3925        </para>
3926       </listitem>
3927   
3928       <listitem>
3929        <para>
3930         Add function to determine the area of a closed path (Sean Chittenden)
3931        </para>
3932       </listitem>
3933   
3934       <listitem>
3935        <para>
3936         Add function to send cancel request to other backends (Magnus)
3937        </para>
3938       </listitem>
3939   
3940       <listitem>
3941        <para>
3942         Add <type>interval</> plus <type>datetime</> operators (Tom)
3943        </para>
3944        <para>
3945         The reverse ordering, <type>datetime</> plus <type>interval</>,
3946         was already supported, but both are required by the SQL standard.
3947        </para>
3948       </listitem>
3949   
3950       <listitem>
3951        <para>
3952         Casting an integer to <type>BIT(N)</> selects the rightmost N bits
3953         of the integer
3954         (Tom)
3955        </para>
3956        <para>
3957         In prior releases, the leftmost N bits were selected, but this was
3958         deemed unhelpful, not to mention inconsistent with casting from bit
3959         to int.
3960        </para>
3961       </listitem>
3962   
3963       <listitem>
3964        <para>
3965         Require <type>CIDR</> values to have all non-masked bits be zero
3966         (Kevin Brintnall)
3967        </para>
3968       </listitem>
3969   
3970      </itemizedlist>
3971     </sect3>
3972   
3973   
3974     <sect3>
3975      <title>Server-Side Language Changes</title>
3976      <itemizedlist>
3977   
3978       <listitem>
3979        <para>
3980         In <literal>READ COMMITTED</> serialization mode, volatile functions
3981         now see the results of concurrent transactions committed up to the
3982         beginning of each statement within the function, rather than up to the
3983         beginning of the interactive command that called the function.
3984        </para>
3985       </listitem>
3986   
3987       <listitem>
3988        <para>
3989         Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always
3990         use the snapshot of the calling query, and therefore do not see the
3991         effects of actions taken after the calling query starts, whether in
3992         their own transaction or other transactions.  Such a function must be
3993         read-only, too, meaning that it cannot use any SQL commands other than
3994         <command>SELECT</>.  There is a considerable performance gain from
3995         declaring a function <literal>STABLE</> or <literal>IMMUTABLE</>
3996         rather than <literal>VOLATILE</>.
3997        </para>
3998       </listitem>
3999   
4000       <listitem>
4001        <para>
4002         Non-deferred <option>AFTER</> triggers are now fired immediately
4003         after completion of the triggering query, rather than upon
4004         finishing the current interactive command. This makes a difference
4005         when the triggering query occurred within a function: the trigger
4006         is invoked before the function proceeds to its next operation. For
4007         example, if a function inserts a new row into a table, any
4008         non-deferred foreign key checks occur before proceeding with the
4009         function.
4010        </para>
4011       </listitem>
4012   
4013       <listitem>
4014        <para>
4015         Allow function parameters to be declared with names (Dennis Bjorklund)
4016        </para>
4017        <para>
4018         This allows better documentation of functions.  Whether the names
4019         actually do anything depends on the specific function language
4020         being used.
4021        </para>
4022       </listitem>
4023   
4024       <listitem>
4025        <para>
4026         Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bjorklund)
4027        </para>
4028        <para>
4029         This basically creates an automatic alias for each named parameter.
4030        </para>
4031       </listitem>
4032   
4033       <listitem>
4034        <para>
4035         Do minimal syntax checking of PL/pgSQL functions at creation time (Tom)
4036        </para>
4037        <para>
4038         This allows us to catch simple syntax errors sooner.
4039        </para>
4040       </listitem>
4041   
4042       <listitem>
4043        <para>
4044         More support for composite types (row and record variables) in PL/pgSQL
4045        </para>
4046        <para>
4047         For example, it now works to pass a rowtype variable to another function
4048         as a single variable.
4049        </para>
4050       </listitem>
4051   
4052       <listitem>
4053        <para>
4054         Default values for PL/pgSQL variables can now reference previously
4055         declared variables
4056        </para>
4057       </listitem>
4058   
4059       <listitem>
4060        <para>
4061         Improve parsing of PL/pgSQL FOR loops (Tom)
4062        </para>
4063        <para>
4064         Parsing is now driven by presence of <literal>".."</> rather than
4065         data type of <option>FOR</> variable. This makes no difference for
4066         correct functions, but should result in more understandable error
4067         messages when a mistake is made.
4068        </para>
4069       </listitem>
4070   
4071       <listitem>
4072        <para>
4073         Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan)
4074        </para>
4075       </listitem>
4076   
4077       <listitem>
4078        <para>
4079         In PL/Tcl, SPI commands are now run in subtransactions.  If an error
4080         occurs, the subtransaction is cleaned up and the error is reported
4081         as an ordinary Tcl error, which can be trapped with <literal>catch</>.
4082         Formerly, it was not possible to catch such errors.
4083        </para>
4084       </listitem>
4085   
4086       <listitem>
4087        <para>
4088         Accept <command>ELSEIF</> in PL/pgSQL (Neil)
4089        </para>
4090        <para>
4091         Previously PL/pgSQL only allowed <command>ELSIF</>, but many people
4092         are accustomed to spelling this keyword <command>ELSEIF</>.
4093        </para>
4094       </listitem>
4095   
4096      </itemizedlist>
4097     </sect3>
4098   
4099   
4100     <sect3>
4101      <title><application>psql</> Changes</title>
4102      <itemizedlist>
4103   
4104       <listitem>
4105        <para>
4106         Improve <application>psql</> information display about database
4107         objects (Christopher)
4108        </para>
4109       </listitem>
4110   
4111       <listitem>
4112        <para>
4113         Allow <application>psql</> to display group membership in
4114         <command>\du</> and <command>\dg</> (Markus Bertheau)
4115        </para>
4116       </listitem>
4117   
4118       <listitem>
4119        <para>
4120         Prevent <application>psql</> <command>\dn</command> from showing
4121         temporary schemas (Bruce)
4122        </para>
4123       </listitem>
4124   
4125       <listitem>
4126        <para>
4127         Allow <application>psql</> to handle tilde user expansion for file
4128         names (Zach Irmen)
4129        </para>
4130       </listitem>
4131   
4132       <listitem>
4133        <para>
4134         Allow <application>psql</> to display fancy prompts, including
4135         color, via <application>readline</> (Reece Hart, Chet Ramey)
4136        </para>
4137       </listitem>
4138   
4139       <listitem>
4140        <para>
4141         Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax
4142         fully (Tom)
4143        </para>
4144       </listitem>
4145   
4146       <listitem>
4147        <para>
4148         Show the location of syntax errors (Fabien Coelho, Tom)
4149        </para>
4150       </listitem>
4151   
4152       <listitem>
4153        <para>
4154         Add <command>CLUSTER</command> information to <application>psql</>
4155         <command>\d</> display
4156         (Bruce)
4157        </para>
4158       </listitem>
4159   
4160       <listitem>
4161        <para>
4162         Change <application>psql</> <command>\copy stdin/stdout</> to read
4163         from command input/output (Bruce)
4164        </para>
4165       </listitem>
4166   
4167       <listitem>
4168        <para>
4169         Add <option>pstdin</>/<option>pstdout</> to read from
4170         <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark
4171         Feit)
4172        </para>
4173       </listitem>
4174   
4175       <listitem>
4176        <para>
4177         Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename>
4178         (Bruce)
4179        </para>
4180        <para>
4181         This allows a central file where global <application>psql</> startup commands can
4182         be stored.
4183        </para>
4184       </listitem>
4185   
4186       <listitem>
4187        <para>
4188         Have <application>psql</> <command>\d+</> indicate if the table
4189         has an <type>OID</> column (Neil)
4190        </para>
4191       </listitem>
4192   
4193       <listitem>
4194        <para>
4195         On Windows, use binary mode in <application>psql</> when reading files so control-Z
4196         is not seen as end-of-file
4197        </para>
4198       </listitem>
4199   
4200       <listitem>
4201        <para>
4202         Have <command>\dn+</> show permissions and description for schemas (Dennis
4203         Bjorklund)
4204        </para>
4205       </listitem>
4206   
4207       <listitem>
4208        <para>
4209         Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane)
4210        </para>
4211       </listitem>
4212   
4213       <listitem>
4214        <para>
4215         Allow boolean settings to be set using upper or lower case (Michael Paesold)
4216        </para>
4217       </listitem>
4218   
4219      </itemizedlist>
4220     </sect3>
4221   
4222   
4223     <sect3>
4224      <title><application>pg_dump</> Changes</title>
4225      <itemizedlist>
4226   
4227       <listitem>
4228        <para>
4229         Use dependency information to improve the reliability of
4230         <application>pg_dump</> (Tom)
4231        </para>
4232        <para>
4233         This should solve the longstanding problems with related objects
4234         sometimes being dumped in the wrong order.
4235        </para>
4236       </listitem>
4237   
4238       <listitem>
4239        <para>
4240         Have <application>pg_dump</> output objects in alphabetical order if possible (Tom)
4241        </para>
4242        <para>
4243         This should make it easier to identify changes between
4244         dump files.
4245        </para>
4246       </listitem>
4247   
4248       <listitem>
4249        <para>
4250         Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho)
4251        </para>
4252        <para>
4253         This makes <application>pg_restore</>'s behavior similar to the
4254         results of feeding a <application>pg_dump</> output script to
4255         <application>psql</>. In most cases, ignoring errors and plowing
4256         ahead is the most useful thing to do. Also added was a pg_restore
4257         option to give the old behavior of exiting on an error.
4258        </para>
4259       </listitem>
4260   
4261       <listitem>
4262        <para>
4263         <application>pg_restore</> <option>-l</> display now includes
4264         objects' schema names
4265        </para>
4266       </listitem>
4267   
4268       <listitem>
4269        <para>
4270         New begin/end markers in <application>pg_dump</> text output (Bruce)
4271        </para>
4272       </listitem>
4273   
4274       <listitem>
4275        <para>
4276         Add start/stop times for
4277         <application>pg_dump</>/<application>pg_dumpall</> in verbose mode
4278         (Bruce)
4279        </para>
4280       </listitem>
4281   
4282       <listitem>
4283        <para>
4284         Allow most <application>pg_dump</> options in
4285         <application>pg_dumpall</> (Christopher)
4286        </para>
4287       </listitem>
4288   
4289       <listitem>
4290        <para>
4291         Have <application>pg_dump</> use <command>ALTER OWNER</> rather
4292         than <command>SET SESSION AUTHORIZATION</> by default
4293         (Christopher)
4294        </para>
4295       </listitem>
4296   
4297      </itemizedlist>
4298     </sect3>
4299   
4300   
4301     <sect3>
4302      <title>libpq Changes</title>
4303      <itemizedlist>
4304   
4305       <listitem>
4306        <para>
4307         Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce)
4308        </para>
4309       </listitem>
4310   
4311       <listitem>
4312        <para>
4313         Add <function>PQmbdsplen()</> which returns the display length
4314         of a character (Tatsuo)
4315        </para>
4316       </listitem>
4317   
4318       <listitem>
4319        <para>
4320         Add thread locking to <application>SSL</> and
4321         <application>Kerberos</> connections (Manfred Spraul)
4322        </para>
4323       </listitem>
4324   
4325       <listitem>
4326        <para>
4327         Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and
4328         <function>PQoidStatus()</> to work on <command>EXECUTE</command>
4329         commands (Neil)
4330        </para>
4331       </listitem>
4332   
4333       <listitem>
4334        <para>
4335         Add <function>PQserverVersion()</> to provide more convenient
4336         access to the server version number (Greg Sabino Mullane)
4337        </para>
4338       </listitem>
4339   
4340       <listitem>
4341        <para>
4342         Add <function>PQprepare/PQsendPrepared()</> functions to support
4343         preparing statements without necessarily specifying the data types
4344         of their parameters (Abhijit Menon-Sen)
4345        </para>
4346       </listitem>
4347   
4348       <listitem>
4349        <para>
4350         Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael)
4351        </para>
4352       </listitem>
4353   
4354      </itemizedlist>
4355     </sect3>
4356   
4357   
4358     <sect3>
4359      <title>Source Code Changes</title>
4360      <itemizedlist>
4361   
4362       <listitem>
4363        <para>
4364         Allow the database server to run natively on Windows (Claudio, Magnus, Andrew)
4365        </para>
4366       </listitem>
4367   
4368       <listitem>
4369        <para>
4370         Shell script commands converted to C versions for Windows support (Andrew)
4371        </para>
4372       </listitem>
4373   
4374       <listitem>
4375        <para>
4376         Create an extension makefile framework (Fabien Coelho, Peter)
4377        </para>
4378        <para>
4379         This simplifies the task of building extensions outside the original
4380         source tree.
4381        </para>
4382       </listitem>
4383   
4384       <listitem>
4385        <para>
4386         Support relocatable installations (Bruce)
4387        </para>
4388        <para>
4389         Directory paths for installed files (such as the
4390         <filename>/share</> directory) are now computed relative to the
4391         actual location of the executables, so that an installation tree
4392         can be moved to another place without reconfiguring and
4393         rebuilding.
4394        </para>
4395       </listitem>
4396   
4397       <listitem>
4398        <para>
4399         Use <option>--with-docdir</> to choose installation location of documentation; also
4400         allow <option>--infodir</> (Peter)
4401        </para>
4402       </listitem>
4403   
4404       <listitem>
4405        <para>
4406         Add <option>--without-docdir</> to prevent installation of documentation (Peter)
4407        </para>
4408       </listitem>
4409   
4410       <listitem>
4411        <para>
4412         Upgrade to <application>DocBook</> V4.2 SGML (Peter)
4413        </para>
4414       </listitem>
4415   
4416       <listitem>
4417        <para>
4418         New <literal>PostgreSQL</> <application>CVS</> tag (Marc)
4419        </para>
4420        <para>
4421         This was done to make it easier for organizations to manage their
4422         own copies of the <productname>PostgreSQL</productname>
4423         <application>CVS</> repository. File version stamps from the master
4424         repository will not get munged by checking into or out of a copied
4425         repository.
4426        </para>
4427       </listitem>
4428   
4429       <listitem>
4430        <para>
4431         Clarify locking code (Manfred Koizar)
4432        </para>
4433       </listitem>
4434   
4435       <listitem>
4436        <para>
4437         Buffer manager cleanup (Neil)
4438        </para>
4439       </listitem>
4440   
4441       <listitem>
4442        <para>
4443         Decouple platform tests from CPU spinlock code (Bruce, Tom)
4444        </para>
4445       </listitem>
4446   
4447       <listitem>
4448        <para>
4449         Add inlined test-and-set code on PA-RISC for <application>gcc</>
4450         (ViSolve, Tom)
4451        </para>
4452       </listitem>
4453   
4454       <listitem>
4455        <para>
4456         Improve i386 spinlock code (Manfred Spraul)
4457        </para>
4458       </listitem>
4459   
4460       <listitem>
4461        <para>
4462         Clean up spinlock assembly code to avoid warnings from newer
4463         <application>gcc</> releases (Tom)
4464        </para>
4465       </listitem>
4466   
4467       <listitem>
4468        <para>
4469         Remove JDBC from source tree; now a separate project
4470        </para>
4471       </listitem>
4472   
4473       <listitem>
4474        <para>
4475         Remove the libpgtcl client interface; now a separate project
4476        </para>
4477       </listitem>
4478   
4479       <listitem>
4480        <para>
4481         More accurately estimate memory and file descriptor usage (Tom)
4482        </para>
4483       </listitem>
4484   
4485       <listitem>
4486        <para>
4487         Improvements to the Mac OS X startup scripts (Ray A.)
4488        </para>
4489       </listitem>
4490   
4491       <listitem>
4492        <para>
4493         New <function>fsync()</> test program (Bruce)
4494        </para>
4495       </listitem>
4496   
4497       <listitem>
4498        <para>
4499         Major documentation improvements (Neil, Peter)
4500        </para>
4501       </listitem>
4502   
4503       <listitem>
4504        <para>
4505         Remove <application>pg_encoding</application>; not needed
4506         anymore
4507        </para>
4508       </listitem>
4509   
4510       <listitem>
4511        <para>
4512         Remove <application>pg_id</application>; not needed anymore
4513        </para>
4514       </listitem>
4515   
4516       <listitem>
4517        <para>
4518         Remove <application>initlocation</application>; not needed
4519         anymore
4520        </para>
4521       </listitem>
4522   
4523       <listitem>
4524        <para>
4525         Auto-detect thread flags (no more manual testing) (Bruce)
4526        </para>
4527       </listitem>
4528   
4529       <listitem>
4530        <para>
4531         Use Olson's public domain <application>timezone</> library (Magnus)
4532        </para>
4533       </listitem>
4534   
4535       <listitem>
4536        <para>
4537         With threading enabled, use thread flags on Unixware for 
4538         backend executables too (Bruce)
4539        </para>
4540        <para>
4541         Unixware cannot mix threaded and non-threaded object files in the
4542         same executable, so everything must be compiled as threaded.
4543        </para>
4544       </listitem>
4545   
4546       <listitem>
4547        <para>
4548         <application>psql</> now uses a <application>flex</>-generated
4549         lexical analyzer to process command strings
4550        </para>
4551       </listitem>
4552   
4553       <listitem>
4554        <para>
4555         Reimplement the linked list data structure used throughout the
4556         backend (Neil)
4557        </para>
4558        <para>
4559         This improves performance by allowing list append and length
4560         operations to be more efficient.
4561        </para>
4562       </listitem>
4563   
4564       <listitem>
4565        <para>
4566         Allow dynamically loaded modules to create their own server configuration
4567         parameters (Thomas Hallgren)
4568        </para>
4569       </listitem>
4570   
4571       <listitem>
4572        <para>
4573         New Brazilian version of FAQ (Euler Taveira de Oliveira)
4574        </para>
4575       </listitem>
4576   
4577       <listitem>
4578        <para>
4579         Add French FAQ (Guillaume Lelarge)
4580        </para>
4581       </listitem>
4582   
4583       <listitem>
4584        <para>
4585         New <application>pgevent</> for Windows logging
4586        </para>
4587       </listitem>
4588   
4589       <listitem>
4590        <para>
4591         Make libpq and ECPG build as proper shared libraries on OS X (Tom)
4592        </para>
4593       </listitem>
4594   
4595      </itemizedlist>
4596     </sect3>
4597   
4598   
4599     <sect3>
4600      <title>Contrib Changes</title>
4601      <itemizedlist>
4602   
4603       <listitem>
4604        <para>
4605         Overhaul of <filename>contrib/dblink</> (Joe)
4606        </para>
4607       </listitem>
4608   
4609       <listitem>
4610        <para>
4611         <filename>contrib/dbmirror</> improvements (Steven Singer)
4612        </para>
4613       </listitem>
4614   
4615       <listitem>
4616        <para>
4617         New <filename>contrib/xml2</> (John Gray, Torchbox)
4618        </para>
4619       </listitem>
4620   
4621       <listitem>
4622        <para>
4623         Updated <filename>contrib/mysql</filename>
4624        </para>
4625       </listitem>
4626   
4627       <listitem>
4628        <para>
4629         New version of <filename>contrib/btree_gist</> (Teodor)
4630        </para>
4631       </listitem>
4632   
4633       <listitem>
4634        <para>
4635         New <filename>contrib/trgm</>, trigram matching for
4636         <productname>PostgreSQL</productname> (Teodor)
4637        </para>
4638       </listitem>
4639   
4640       <listitem>
4641        <para>
4642         Many <filename>contrib/tsearch2</> improvements (Teodor)
4643        </para>
4644       </listitem>
4645   
4646       <listitem>
4647        <para>
4648         Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew)
4649        </para>
4650       </listitem>
4651   
4652       <listitem>
4653        <para>
4654         Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page)
4655        </para>
4656       </listitem>
4657   
4658       <listitem>
4659        <para>
4660         Add functions to <filename>contrib/dbsize</> (Andreas Pflug)
4661        </para>
4662       </listitem>
4663   
4664       <listitem>
4665        <para>
4666         Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging
4667         subprocess
4668        </para>
4669       </listitem>
4670   
4671       <listitem>
4672        <para>
4673         Removed <filename>contrib/rserv</>: obsoleted by various separate projects
4674        </para>
4675       </listitem>
4676   
4677      </itemizedlist>
4678     </sect3>
4679   
4680    </sect2>
4681   </sect1>
4682  
4683   <sect1 id="release-7-4-8">
4684    <title>Release 7.4.8</title>
4685
4686    <note>
4687    <title>Release date</title>
4688    <simpara>2005-05-09</simpara>
4689    </note>
4690
4691    <para>
4692     This release contains a variety of fixes from 7.4.7, including several
4693     security-related issues.
4694    </para>
4695
4696    <sect2>
4697     <title>Migration to version 7.4.8</title>
4698
4699     <para>
4700      A dump/restore is not required for those running 7.4.X.  However,
4701      it is one possible way of handling two significant security problems
4702      that have been found in the initial contents of 7.4.X system
4703      catalogs.  A dump/initdb/reload sequence using 7.4.8's initdb will
4704      automatically correct these problems.
4705     </para>
4706
4707     <para>
4708      The larger security problem is that the built-in character set encoding
4709      conversion functions can be invoked from SQL commands by unprivileged
4710      users, but the functions were not designed for such use and are not
4711      secure against malicious choices of arguments.  The fix involves changing
4712      the declared parameter list of these functions so that they can no longer
4713      be invoked from SQL commands.  (This does not affect their normal use
4714      by the encoding conversion machinery.)
4715     </para>
4716
4717     <para>
4718      The lesser problem is that the <filename>contrib/tsearch2</> module
4719      creates several functions that are misdeclared to return
4720      <type>internal</> when they do not accept <type>internal</> arguments.
4721      This breaks type safety for all functions using <type>internal</>
4722      arguments.
4723     </para>
4724
4725     <para>
4726      It is strongly recommended that all installations repair these errors,
4727      either by initdb or by following the manual repair procedures given
4728      below.  The errors at least allow unprivileged database users to crash
4729      their server process, and may allow unprivileged users to gain the
4730      privileges of a database superuser.
4731     </para>
4732
4733     <para>
4734      If you wish not to do an initdb, perform the following procedures instead.
4735      As the database superuser, do:
4736
4737 <programlisting>
4738 BEGIN;
4739 UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
4740 WHERE pronamespace = 11 AND pronargs = 5
4741       AND proargtypes[2] = 'cstring'::regtype;
4742 -- The command should report having updated 90 rows;
4743 -- if not, rollback and investigate instead of committing!
4744 COMMIT;
4745 </programlisting>
4746
4747      Next, if you have installed <filename>contrib/tsearch2</>, do
4748
4749 <programlisting>
4750 BEGIN;
4751 UPDATE pg_proc SET proargtypes[0] = 'internal'::regtype
4752 WHERE oid IN (
4753     'dex_init(text)'::regprocedure,
4754     'snb_en_init(text)'::regprocedure,
4755     'snb_ru_init(text)'::regprocedure,
4756     'spell_init(text)'::regprocedure,
4757     'syn_init(text)'::regprocedure
4758 );
4759 -- The command should report having updated 5 rows;
4760 -- if not, rollback and investigate instead of committing!
4761 COMMIT;
4762 </programlisting>
4763
4764      If this command fails with a message like <quote>function
4765      "dex_init(text)" does not exist</>, then either <filename>tsearch2</>
4766      is not installed in this database, or you already did the update.
4767     </para>
4768
4769     <para>
4770      The above procedures must be carried out in <emphasis>each</> database
4771      of an installation, including <literal>template1</>, and ideally
4772      including <literal>template0</> as well.  If you do not fix the
4773      template databases then any subsequently created databases will contain
4774      the same errors.  <literal>template1</> can be fixed in the same way
4775      as any other database, but fixing <literal>template0</> requires
4776      additional steps.  First, from any database issue
4777 <programlisting>
4778 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
4779 </programlisting>
4780       Next connect to <literal>template0</> and perform the above repair
4781       procedures.  Finally, do
4782 <programlisting>
4783 -- re-freeze template0:
4784 VACUUM FREEZE;
4785 -- and protect it against future alterations:
4786 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
4787 </programlisting>
4788     </para>
4789    </sect2>
4790
4791    <sect2>
4792     <title>Changes</title>
4793
4794 <itemizedlist>
4795 <listitem><para>Change encoding function signature to prevent
4796 misuse</para></listitem>
4797 <listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
4798 <type>INTERNAL</> function results</para></listitem>
4799 <listitem><para>Repair ancient race condition that allowed a transaction to be
4800 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
4801 than for other purposes</para>
4802 <para>This is an extremely serious bug since it could lead to apparent
4803 data inconsistencies being briefly visible to applications.</para></listitem>
4804 <listitem><para>Repair race condition between relation extension and
4805 VACUUM</para>
4806 <para>This could theoretically have caused loss of a page's worth of
4807 freshly-inserted data, although the scenario seems of very low probability.
4808 There are no known cases of it having caused more than an Assert failure.
4809 </para></listitem>
4810 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
4811 <para>
4812 The comparison code was wrong in the case where the
4813 <literal>--enable-integer-datetimes</> configuration switch had been used.
4814 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
4815 it will need to be <command>REINDEX</>ed after installing this update, because
4816 the fix corrects the sort order of column values.
4817 </para></listitem>
4818 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
4819 <type>TIME WITH TIME ZONE</> values</para></listitem>
4820 <listitem><para>Fix mis-display of negative fractional seconds in
4821 <type>INTERVAL</> values</para>
4822 <para>
4823 This error only occurred when the
4824 <literal>--enable-integer-datetimes</> configuration switch had been used.
4825 </para></listitem>
4826 <listitem><para>Ensure operations done during backend shutdown are counted by
4827 statistics collector</para>
4828 <para>
4829  This is expected to resolve reports of <application>pg_autovacuum</>
4830  not vacuuming the system catalogs often enough &mdash; it was not being
4831  told about catalog deletions caused by temporary table removal during
4832  backend exit.
4833 </para></listitem>
4834 <listitem><para>Additional buffer overrun checks in plpgsql
4835 (Neil)</para></listitem>
4836 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
4837 correctly (Neil)</para></listitem>
4838 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
4839 (Marko Kreen)</para></listitem>
4840 <listitem><para>Still more 64-bit fixes for
4841 <filename>contrib/intagg</></para></listitem>
4842 <listitem><para>Prevent incorrect optimization of functions returning
4843 <type>RECORD</></para></listitem>
4844 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
4845 month-related formats</para></listitem>
4846 <listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
4847 <listitem><para>Fix <function>array_map</> to call PL functions correctly</para></listitem>
4848 <listitem><para>Fix permission checking in <command>ALTER DATABASE RENAME</></para></listitem>
4849 <listitem><para>Fix <command>ALTER LANGUAGE RENAME</></para></listitem>
4850 <listitem><para>Make <function>RemoveFromWaitQueue</> clean up after itself</para>
4851 <para>
4852 This fixes a lock management error that would only be visible if a transaction
4853 was kicked out of a wait for a lock (typically by query cancel) and then the
4854 holder of the lock released it within a very narrow window.
4855 </para></listitem>
4856 <listitem><para>Fix problem with untyped parameter appearing in
4857 <command>INSERT ... SELECT</></para></listitem>
4858 <listitem><para>Fix <command>CLUSTER</> failure after
4859 <command>ALTER TABLE SET WITHOUT OIDS</></para></listitem>
4860 </itemizedlist>
4861
4862    </sect2>
4863   </sect1>
4864
4865   <sect1 id="release-7-4-7">
4866    <title>Release 7.4.7</title>
4867
4868    <note>
4869    <title>Release date</title>
4870    <simpara>2005-01-31</simpara>
4871    </note>
4872
4873    <para>
4874     This release contains a variety of fixes from 7.4.6, including several
4875     security-related issues.
4876    </para>
4877
4878    <sect2>
4879     <title>Migration to version 7.4.7</title>
4880
4881     <para>
4882      A dump/restore is not required for those running 7.4.X.
4883     </para>
4884    </sect2>
4885
4886    <sect2>
4887     <title>Changes</title>
4888
4889 <itemizedlist>
4890 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
4891 <para>
4892 On platforms that will automatically execute initialization functions of a
4893 shared library (this includes at least Windows and ELF-based Unixen),
4894 <command>LOAD</> can be used to make the server execute arbitrary code.
4895 Thanks to NGS Software for reporting this.</para></listitem>
4896 <listitem><para>Check that creator of an aggregate function has the right to
4897 execute the specified transition functions</para>
4898 <para>
4899 This oversight made it possible to bypass denial of EXECUTE
4900 permission on a function.</para></listitem>
4901 <listitem><para>Fix security and 64-bit issues in
4902 contrib/intagg</para></listitem>
4903 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
4904 Jurka)</para></listitem>
4905 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
4906 many parameters (Neil)</para></listitem>
4907 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
4908 <para>
4909 The result of the join was mistakenly supposed to be sorted the same as the
4910 left input.  This could not only deliver mis-sorted output to the user, but
4911 in case of nested merge joins could give outright wrong answers.
4912 </para></listitem>
4913 <listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
4914 <listitem><para>Fix display of negative intervals in SQL and GERMAN
4915 datestyles</para></listitem>
4916 <listitem><para>Make age(timestamptz) do calculation in local timezone not
4917 GMT</para></listitem>
4918 </itemizedlist>
4919
4920    </sect2>
4921   </sect1>
4922
4923   <sect1 id="release-7-4-6">
4924    <title>Release 7.4.6</title>
4925
4926    <note>
4927    <title>Release date</title>
4928    <simpara>2004-10-22</simpara>
4929    </note>
4930
4931    <para>
4932     This release contains a variety of fixes from 7.4.5.
4933    </para>
4934
4935
4936    <sect2>
4937     <title>Migration to version 7.4.6</title>
4938
4939     <para>
4940      A dump/restore is not required for those running 7.4.X.
4941     </para>
4942    </sect2>
4943
4944    <sect2>
4945     <title>Changes</title>
4946
4947 <itemizedlist>
4948 <listitem><para>Repair possible failure to update hint bits on disk</para>
4949 <para>
4950 Under rare circumstances this oversight could lead to 
4951 <quote>could not access transaction status</> failures, which qualifies
4952 it as a potential-data-loss bug.
4953 </para></listitem>
4954 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
4955 <para>
4956 Very large left joins using a hash join plan could fail to output unmatched
4957 left-side rows given just the right data distribution.
4958 </para></listitem>
4959 <listitem><para>Disallow running <application>pg_ctl</> as root</para>
4960 <para>
4961 This is to guard against any possible security issues.
4962 </para></listitem>
4963 <listitem><para>Avoid using temp files in <filename>/tmp</> in <command>make_oidjoins_check</command></para>
4964 <para>
4965 This has been reported as a security issue, though it's hardly worthy of
4966 concern since there is no reason for non-developers to use this script anyway.
4967 </para></listitem>
4968 <listitem><para>Prevent forced backend shutdown from re-emitting prior command
4969 result</para>
4970 <para>
4971 In rare cases, a client might think that its last command had succeeded when
4972 it really had been aborted by forced database shutdown.
4973 </para></listitem>
4974 <listitem><para>Repair bug in <function>pg_stat_get_backend_idset</function></para>
4975 <para>
4976 This could lead to misbehavior in some of the system-statistics views.
4977 </para></listitem>
4978 <listitem><para>Fix small memory leak in postmaster</para></listitem>
4979 <listitem><para>Fix <quote>expected both swapped tables to have TOAST
4980 tables</> bug</para>
4981 <para>
4982 This could arise in cases such as CLUSTER after ALTER TABLE DROP COLUMN.
4983 </para></listitem>
4984 <listitem><para>Prevent <literal>pg_ctl restart</> from adding <literal>-D</> multiple times</para></listitem>
4985 <listitem><para>Fix problem with NULL values in GiST indexes</para></listitem>
4986 <listitem><para><literal>::</> is no longer interpreted as a variable in an
4987 ECPG prepare statement</para></listitem>
4988 </itemizedlist>
4989
4990    </sect2>
4991   </sect1>
4992
4993   <sect1 id="release-7-4-5">
4994    <title>Release 7.4.5</title>
4995
4996    <note>
4997    <title>Release date</title>
4998    <simpara>2004-08-18</simpara>
4999    </note>
5000
5001    <para>
5002     This release contains one serious bug fix over 7.4.4.
5003    </para>
5004
5005
5006    <sect2>
5007     <title>Migration to version 7.4.5</title>
5008
5009     <para>
5010      A dump/restore is not required for those running 7.4.X.
5011     </para>
5012    </sect2>
5013
5014    <sect2>
5015     <title>Changes</title>
5016
5017 <itemizedlist>
5018 <listitem><para>Repair possible crash during concurrent B-tree index insertions</para>
5019 <para>
5020 This patch fixes a rare case in which concurrent insertions into a B-tree index
5021 could result in a server panic.  No permanent damage would result, but it's
5022 still worth a re-release.  The bug does not exist in pre-7.4 releases.
5023 </para></listitem>
5024 </itemizedlist>
5025
5026    </sect2>
5027   </sect1>
5028
5029   <sect1 id="release-7-4-4">
5030    <title>Release 7.4.4</title>
5031
5032    <note>
5033    <title>Release date</title>
5034    <simpara>2004-08-16</simpara>
5035    </note>
5036
5037    <para>
5038     This release contains a variety of fixes from 7.4.3.
5039    </para>
5040
5041
5042    <sect2>
5043     <title>Migration to version 7.4.4</title>
5044
5045     <para>
5046      A dump/restore is not required for those running 7.4.X.
5047     </para>
5048    </sect2>
5049
5050    <sect2>
5051     <title>Changes</title>
5052
5053 <itemizedlist>
5054 <listitem><para>Prevent possible loss of committed transactions during crash</para>
5055 <para>
5056 Due to insufficient interlocking between transaction commit and checkpointing,
5057 it was possible for transactions committed just before the most recent
5058 checkpoint to be lost, in whole or in part, following a database crash and
5059 restart.  This is a serious bug that has existed
5060 since <productname>PostgreSQL</productname> 7.1.
5061 </para></listitem>
5062 <listitem><para>Check HAVING restriction before evaluating result list of an
5063 aggregate plan</para></listitem>
5064 <listitem><para>Avoid crash when session's current user ID is deleted</para></listitem>
5065 <listitem><para>Fix hashed crosstab for zero-rows case (Joe)</para></listitem>
5066 <listitem><para>Force cache update after renaming a column in a foreign key</para></listitem>
5067 <listitem><para>Pretty-print UNION queries correctly</para></listitem>
5068 <listitem><para>Make psql handle <literal>\r\n</> newlines properly in COPY IN</para></listitem>
5069 <listitem><para><application>pg_dump</> handled ACLs with grant options incorrectly</para></listitem>
5070 <listitem><para>Fix thread support for OS X and Solaris</para></listitem>
5071 <listitem><para>Updated JDBC driver (build 215) with various fixes</para></listitem>
5072 <listitem><para>ECPG fixes</para></listitem>
5073 <listitem><para>Translation updates (various contributors)</para></listitem>
5074 </itemizedlist>
5075
5076    </sect2>
5077   </sect1>
5078
5079   <sect1 id="release-7-4-3">
5080    <title>Release 7.4.3</title>
5081
5082    <note>
5083    <title>Release date</title>
5084    <simpara>2004-06-14</simpara>
5085    </note>
5086
5087    <para>
5088     This release contains a variety of fixes from 7.4.2.
5089    </para>
5090
5091
5092    <sect2>
5093     <title>Migration to version 7.4.3</title>
5094
5095     <para>
5096      A dump/restore is not required for those running 7.4.X.
5097     </para>
5098    </sect2>
5099
5100    <sect2>
5101     <title>Changes</title>
5102
5103 <itemizedlist>
5104 <listitem><para>Fix temporary memory leak when using non-hashed aggregates (Tom)</para></listitem>
5105 <listitem><para>ECPG fixes, including some for Informix compatibility (Michael)</para></listitem>
5106 <listitem><para>Fixes for compiling with thread-safety, particularly Solaris (Bruce)</para></listitem>
5107 <listitem><para>Fix error in COPY IN termination when using the old network protocol (ljb)</para></listitem>
5108 <listitem><para>Several important fixes in pg_autovacuum, including fixes for
5109 large tables, unsigned oids, stability, temp tables, and debug mode
5110 (Matthew T. O'Connor)</para></listitem> 
5111 <listitem><para>Fix problem with reading tar-format dumps on NetBSD and BSD/OS (Bruce)</para></listitem>
5112 <listitem><para>Several JDBC fixes</para></listitem>
5113 <listitem><para>Fix ALTER SEQUENCE RESTART where last_value equals the restart value (Tom)</para></listitem>
5114 <listitem><para>Repair failure to recalculate nested sub-selects (Tom)</para></listitem>
5115 <listitem><para>Fix problems with non-constant expressions in LIMIT/OFFSET</para></listitem>
5116 <listitem><para>Support FULL JOIN with no join clause, such as X FULL JOIN Y ON TRUE (Tom)</para></listitem>
5117 <listitem><para>Fix another zero-column table bug (Tom)</para></listitem>
5118 <listitem><para>Improve handling of non-qualified identifiers in GROUP BY clauses in sub-selects (Tom)</para>
5119 <para>
5120 Select-list aliases within the sub-select will now take precedence over
5121 names from outer query levels.
5122 </para></listitem>
5123 <listitem><para>Do not generate <quote>NATURAL CROSS JOIN</> when decompiling rules (Tom)</para></listitem>
5124 <listitem><para>Add checks for invalid field length in binary COPY (Tom)</para>
5125 <para>
5126   This fixes a difficult-to-exploit security hole.
5127 </para></listitem>
5128 <listitem><para>Avoid locking conflict between <command>ANALYZE</command> and <command>LISTEN</command>/<command>NOTIFY</command></para></listitem>
5129 <listitem><para>Numerous translation updates (various contributors)</para></listitem>
5130 </itemizedlist>
5131
5132    </sect2>
5133   </sect1>
5134
5135   <sect1 id="release-7-4-2">
5136    <title>Release 7.4.2</title>
5137
5138    <note>
5139    <title>Release date</title>
5140    <simpara>2004-03-08</simpara>
5141    </note>
5142
5143    <para>
5144     This release contains a variety of fixes from 7.4.1.
5145    </para>
5146
5147
5148    <sect2>
5149     <title>Migration to version 7.4.2</title>
5150
5151     <para>
5152      A dump/restore is not required for those running 7.4.X.  However,
5153      it may be advisable as the easiest method of incorporating fixes for
5154      two errors that have been found in the initial contents of 7.4.X system
5155      catalogs.  A dump/initdb/reload sequence using 7.4.2's initdb will
5156      automatically correct these problems.
5157     </para>
5158
5159     <para>
5160      The more severe of the two errors is that data type <type>anyarray</>
5161      has the wrong alignment label; this is a problem because the
5162      <structname>pg_statistic</> system catalog uses <type>anyarray</>
5163      columns.  The mislabeling can cause planner misestimations and even
5164      crashes when planning queries that involve <literal>WHERE</> clauses on
5165      double-aligned columns (such as <type>float8</> and <type>timestamp</>).
5166      It is strongly recommended that all installations repair this error,
5167      either by initdb or by following the manual repair procedure given
5168      below.
5169     </para>
5170
5171     <para>
5172      The lesser error is that the system view <structname>pg_settings</>
5173      ought to be marked as having public update access, to allow
5174      <literal>UPDATE pg_settings</> to be used as a substitute for
5175      <command>SET</>.  This can also be fixed either by initdb or manually,
5176      but it is not necessary to fix unless you want to use <literal>UPDATE
5177      pg_settings</>.
5178     </para>
5179
5180     <para>
5181      If you wish not to do an initdb, the following procedure will work
5182      for fixing <structname>pg_statistic</>.  As the database superuser,
5183      do:
5184
5185 <programlisting>
5186 -- clear out old data in pg_statistic:
5187 DELETE FROM pg_statistic;
5188 VACUUM pg_statistic;
5189 -- this should update 1 row:
5190 UPDATE pg_type SET typalign = 'd' WHERE oid = 2277;
5191 -- this should update 6 rows:
5192 UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277;
5193 --     
5194 -- At this point you MUST start a fresh backend to avoid a crash!
5195 --
5196 -- repopulate pg_statistic:
5197 ANALYZE;
5198 </programlisting>
5199
5200      This can be done in a live database, but beware that all backends
5201      running in the altered database must be restarted before it is safe to
5202      repopulate <structname>pg_statistic</>.
5203     </para>
5204
5205     <para>
5206      To repair the <structname>pg_settings</> error, simply do:
5207 <programlisting>
5208 GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
5209 </programlisting>
5210     </para>
5211
5212     <para>
5213      The above procedures must be carried out in <emphasis>each</> database
5214      of an installation, including <literal>template1</>, and ideally
5215      including <literal>template0</> as well.  If you do not fix the
5216      template databases then any subsequently created databases will contain
5217      the same errors.  <literal>template1</> can be fixed in the same way
5218      as any other database, but fixing <literal>template0</> requires
5219      additional steps.  First, from any database issue
5220 <programlisting>
5221 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
5222 </programlisting>
5223       Next connect to <literal>template0</> and perform the above repair
5224       procedures.  Finally, do
5225 <programlisting>
5226 -- re-freeze template0:
5227 VACUUM FREEZE;
5228 -- and protect it against future alterations:
5229 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
5230 </programlisting>
5231     </para>
5232    </sect2>
5233
5234    <sect2>
5235     <title>Changes</title>
5236
5237 <para>
5238     Release 7.4.2 incorporates all the fixes included in release 7.3.6,
5239     plus the following fixes:
5240 </para>
5241
5242 <itemizedlist>
5243 <listitem><para>Fix <structname>pg_statistics</> alignment bug that could crash optimizer</para>
5244 <para>See above for details about this problem.</para></listitem>
5245 <listitem><para>Allow non-super users to update <structname>pg_settings</></para></listitem>
5246 <listitem><para>Fix several optimizer bugs, most of which led to
5247 <quote>variable not found in subplan target lists</> errors</para></listitem>
5248 <listitem><para>Avoid out-of-memory failure during startup of large multiple
5249 index scan</para></listitem>
5250 <listitem><para>Fix multibyte problem that could lead to <quote>out of
5251 memory</> error during <command>COPY IN</></para></listitem>
5252 <listitem><para>Fix problems with <command>SELECT INTO</> / <command>CREATE
5253 TABLE AS</> from tables without OIDs</para></listitem>
5254 <listitem><para>Fix problems with <filename>alter_table</> regression test
5255 during parallel testing</para></listitem>
5256 <listitem><para>Fix problems with hitting open file limit, especially on OS X (Tom)</para></listitem>
5257 <listitem><para>Partial fix for Turkish-locale issues</para>
5258 <para>initdb will succeed now in Turkish locale, but there are still some
5259 inconveniences associated with the <literal>i/I</> problem.</para></listitem>
5260 <listitem><para>Make pg_dump set client encoding on restore</para></listitem>
5261 <listitem><para>Other minor pg_dump fixes</para></listitem>
5262 <listitem><para>Allow ecpg to again use C keywords as column names (Michael)</para></listitem>
5263 <listitem><para>Added ecpg <literal>WHENEVER NOT_FOUND</> to
5264 <literal>SELECT/INSERT/UPDATE/DELETE</> (Michael)</para></listitem> 
5265 <listitem><para>Fix ecpg crash for queries calling set-returning functions (Michael)</para></listitem>
5266 <listitem><para>Various other ecpg fixes (Michael)</para></listitem>
5267 <listitem><para>Fixes for Borland compiler</para></listitem>
5268 <listitem><para>Thread build improvements (Bruce)</para></listitem>
5269 <listitem><para>Various other build fixes</para></listitem>
5270 <listitem><para>Various JDBC fixes</para></listitem>
5271 </itemizedlist>
5272
5273    </sect2>
5274   </sect1>
5275
5276   <sect1 id="release-7-4-1">
5277    <title>Release 7.4.1</title>
5278
5279    <note>
5280    <title>Release date</title>
5281    <simpara>2003-12-22</simpara>
5282    </note>
5283
5284    <para>
5285     This release contains a variety of fixes from 7.4.
5286    </para>
5287
5288
5289    <sect2>
5290     <title>Migration to version 7.4.1</title>
5291
5292     <para>
5293      A dump/restore is <emphasis>not</emphasis> required for those
5294      running 7.4.
5295     </para>
5296
5297     <para>
5298      If you want to install the fixes in the information schema
5299      you need to reload it into the database.
5300      This is either accomplished by initializing a new cluster
5301      by running <command>initdb</command>, or by running the following
5302      sequence of SQL commands in each database (ideally including
5303      <literal>template1</literal>) as a superuser in
5304      <application>psql</application>, after installing the new release:
5305 <programlisting>
5306 DROP SCHEMA information_schema CASCADE;
5307 \i /usr/local/pgsql/share/information_schema.sql
5308 </programlisting>
5309      Substitute your installation path in the second command.
5310     </para>
5311
5312    </sect2>
5313
5314    <sect2>
5315     <title>Changes</title>
5316
5317 <itemizedlist>
5318 <listitem><para>Fixed bug in <command>CREATE SCHEMA</command> parsing in ECPG (Michael)</para></listitem>
5319 <listitem><para>Fix compile error when <option>--enable-thread-safety</option> and <option>--with-perl</option> are used together (Peter)</para></listitem>
5320 <listitem><para>Fix for subqueries that used hash joins (Tom)</para>
5321 <para>
5322     Certain subqueries that used hash joins would crash because of
5323     improperly shared structures.
5324 </para></listitem>
5325 <listitem><para>Fix free space map compaction bug (Tom)</para>
5326 <para>
5327     This fixes a bug where compaction of the free space map could lead
5328     to a database server shutdown.
5329 </para>
5330 </listitem>
5331 <listitem><para>Fix for Borland compiler build of libpq (Bruce)</para></listitem>
5332 <listitem><para>Fix <function>netmask()</function> and <function>hostmask()</function> to return the maximum-length masklen (Tom)</para>
5333 <para>
5334     Fix these functions to return values consistent with pre-7.4
5335     releases.
5336 </para>
5337 </listitem>
5338 <listitem><para>Several <filename>contrib/pg_autovacuum</filename> fixes</para>
5339 <para>
5340     Fixes include improper variable initialization, missing vacuum after
5341     <command>TRUNCATE</command>, and duration computation overflow for long vacuums.
5342 </para>
5343 </listitem>
5344 <listitem><para>Allow compile of <filename>contrib/cube</filename> under Cygwin (Jason Tishler)</para></listitem>
5345 <listitem><para>Fix Solaris use of password file when no passwords are defined (Tom)</para>
5346 <para>
5347     Fix crash on Solaris caused by use of any type of password
5348     authentication when no passwords were defined.
5349 </para>
5350 </listitem>
5351 <listitem><para>JDBC fix for thread problems, other fixes</para></listitem>
5352 <listitem><para>Fix for <type>bytea</type> index lookups (Joe)</para></listitem>
5353 <listitem><para>Fix information schema for bit data types (Peter)</para></listitem>
5354 <listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
5355 <listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
5356 <listitem><para>Make <function>PQescapeBytea</function> and <function>byteaout</function> consistent with each other (Joe)</para></listitem>
5357 <listitem><para>Escape <type>bytea</type> output for bytes &gt; 0x7e(Joe)</para>
5358 <para>
5359   If different client encodings are used for <type>bytea</type> output and input, it
5360   is possible for <type>bytea</type> values to be corrupted by the differing
5361   encodings.  This fix escapes all bytes that might be affected.
5362 </para>
5363 </listitem>
5364 <listitem><para>Added missing <function>SPI_finish()</function> calls to dblink's <function>get_tuple_of_interest()</function> (Joe)</para></listitem>
5365 <listitem><para>New Czech FAQ</para></listitem>
5366 <listitem><para>Fix information schema view <literal>constraint_column_usage</literal> for foreign keys (Peter)</para></listitem>
5367 <listitem><para>ECPG fixes (Michael)</para></listitem>
5368 <listitem><para>Fix bug with multiple <literal>IN</literal> subqueries and joins in the subqueries (Tom)</para></listitem>
5369 <listitem><para>Alllow <literal>COUNT('x')</literal> to work (Tom)</para></listitem>
5370 <listitem><para>Install ECPG include files for Informix compatibility into separate directory (Peter)</para>
5371 <para>
5372   Some names of ECPG include files for Informix compatibility conflicted with operating system include files.
5373   By installing them in their own directory, name conflicts have been reduced.
5374 </para>
5375 </listitem>
5376 <listitem><para>Fix SSL memory leak (Neil)</para>
5377 <para>
5378   This release fixes a bug in 7.4 where SSL didn't free all memory it allocated.
5379 </para>
5380 </listitem>
5381 <listitem><para>Prevent <filename>pg_service.conf</filename> from using service name as default dbname (Bruce)</para></listitem>
5382 <listitem><para>Fix local ident authentication on FreeBSD (Tom)</para></listitem>
5383 </itemizedlist>
5384
5385   </sect2>
5386  </sect1>
5387
5388  <sect1 id="release-7-4">
5389   <title>Release 7.4</title>
5390
5391   <note>
5392    <title>Release date</title>
5393    <simpara>2003-11-17</simpara>
5394   </note>
5395
5396   <sect2>
5397    <title>Overview</title>
5398
5399    <para>
5400     Major changes in this release:
5401    </para>
5402
5403    <variablelist>
5404     <varlistentry>
5405      <term>
5406       <literal>IN</literal> / <literal>NOT IN</literal> subqueries are
5407       now much more efficient
5408      </term>
5409
5410      <listitem>
5411       <para>
5412        In previous releases, <literal>IN</literal>/<literal>NOT
5413        IN</literal> subqueries were joined to the upper query by
5414        sequentially scanning the subquery looking for a match.  The
5415        7.4 code uses the same sophisticated techniques used by
5416        ordinary joins and so is much faster.  An
5417        <literal>IN</literal> will now usually be as fast as or faster
5418        than an equivalent <literal>EXISTS</literal> subquery; this
5419        reverses the conventional wisdom that applied to previous
5420        releases.
5421       </para>
5422      </listitem>
5423     </varlistentry>
5424
5425     <varlistentry>
5426      <term>
5427       Improved <literal>GROUP BY</literal> processing by using hash buckets
5428      </term>
5429
5430      <listitem>
5431       <para>
5432        In previous releases, rows to be grouped had to be sorted
5433        first.  The 7.4 code can do <literal>GROUP BY</literal>
5434        without sorting, by accumulating results into a hash table
5435        with one entry per group.  It will still use the sort
5436        technique, however, if the hash table is estimated to be too
5437        large to fit in <varname>sort_mem</>.
5438       </para>
5439      </listitem>
5440     </varlistentry>
5441
5442     <varlistentry>
5443      <term>
5444       New multikey hash join capability
5445      </term>
5446
5447      <listitem>
5448       <para>
5449        In previous releases, hash joins could only occur on single
5450        keys.  This release allows multicolumn hash joins.
5451       </para>
5452      </listitem>
5453     </varlistentry>
5454
5455     <varlistentry>
5456      <term>
5457       Queries using the explicit <literal>JOIN</literal> syntax are
5458       now better optimized
5459      </term>
5460
5461      <listitem>
5462       <para>
5463        Prior releases evaluated queries using the explicit
5464        <literal>JOIN</literal> syntax only in the order implied by
5465        the syntax. 7.4 allows full optimization of these queries,
5466        meaning the optimizer considers all possible join orderings
5467        and chooses the most efficient.  Outer joins, however, must
5468        still follow the declared ordering.
5469       </para>
5470      </listitem>
5471     </varlistentry>
5472
5473     <varlistentry>
5474      <term>
5475       Faster and more powerful regular expression code
5476      </term>
5477
5478      <listitem>
5479       <para>
5480        The entire regular expression module has been replaced with a
5481        new version by Henry Spencer, originally written for Tcl.  The
5482        code greatly improves performance and supports several flavors
5483        of regular expressions.
5484       </para>
5485      </listitem>
5486     </varlistentry>
5487
5488     <varlistentry>
5489      <term>
5490       Function-inlining for simple SQL functions
5491      </term>
5492
5493      <listitem>
5494       <para>
5495        Simple SQL functions can now be inlined by including their SQL
5496        in the main query.  This improves performance by eliminating
5497        per-call overhead.  That means simple SQL functions now
5498        behave like macros.
5499       </para>
5500      </listitem>
5501     </varlistentry>
5502
5503     <varlistentry>
5504      <term>
5505       Full support for IPv6 connections and IPv6 address data types
5506      </term>
5507
5508      <listitem>
5509       <para>
5510        Previous releases allowed only IPv4 connections, and the IP
5511        data types only supported IPv4 addresses. This release adds
5512        full IPv6 support in both of these areas.
5513       </para>
5514      </listitem>
5515     </varlistentry>
5516
5517     <varlistentry>
5518      <term>
5519       Major improvements in SSL performance and reliability
5520      </term>
5521
5522      <listitem>
5523       <para>
5524        Several people very familiar with the SSL API have overhauled
5525        our SSL code to improve SSL key negotiation and error
5526        recovery.
5527       </para>
5528      </listitem>
5529     </varlistentry>
5530
5531     <varlistentry>
5532      <term>
5533       Make free space map efficiently reuse empty index pages,
5534       and other free space management improvements
5535      </term>
5536
5537      <listitem>
5538       <para>
5539        In previous releases, B-tree index pages that were left empty
5540        because of deleted rows could only be reused by rows with
5541        index values similar to the rows originally indexed on that
5542        page. In 7.4, <command>VACUUM</command> records empty index
5543        pages and allows them to be reused for any future index rows.
5544       </para>
5545      </listitem>
5546     </varlistentry>
5547
5548     <varlistentry>
5549      <term>
5550       SQL-standard information schema
5551      </term>
5552
5553      <listitem>
5554       <para>
5555        The information schema provides a standardized and stable way
5556        to access information about the schema objects defined in a
5557        database.
5558       </para>
5559      </listitem>
5560     </varlistentry>
5561
5562     <varlistentry>
5563      <term>
5564       Cursors conform more closely to the SQL standard
5565      </term>
5566
5567      <listitem>
5568       <para>
5569        The commands <command>FETCH</command> and
5570        <command>MOVE</command> have been overhauled to conform more
5571        closely to the SQL standard.
5572       </para>
5573      </listitem>
5574     </varlistentry>
5575
5576     <varlistentry>
5577      <term>
5578       Cursors can exist outside transactions
5579      </term>
5580
5581      <listitem>
5582       <para>
5583        These cursors are also called holdable cursors.
5584       </para>
5585      </listitem>
5586     </varlistentry>
5587
5588     <varlistentry>
5589      <term>
5590       New client-to-server protocol
5591      </term>
5592
5593      <listitem>
5594       <para>
5595        The new protocol adds error codes, more status information,
5596        faster startup, better support for binary data transmission,
5597        parameter values separated from SQL commands, prepared
5598        statements available at the protocol level, and cleaner
5599        recovery from <command>COPY</command> failures.  The older
5600        protocol is still supported by both server and clients.
5601       </para>
5602      </listitem>
5603     </varlistentry>
5604
5605     <varlistentry>
5606      <term>
5607       <application>libpq</application> and
5608       <application>ECPG</application> applications are now fully
5609       thread-safe
5610      </term>
5611
5612      <listitem>
5613       <para>
5614        While previous <application>libpq</application> releases
5615        already supported threads, this release improves thread safety
5616        by fixing some non-thread-safe code that was used during
5617        database connection startup.  The <command>configure</command>
5618        option <option>--enable-thread-safety</option> must be used to
5619        enable this feature.
5620       </para>
5621      </listitem>
5622     </varlistentry>
5623
5624     <varlistentry>
5625      <term>
5626       New version of full-text indexing
5627      </term>
5628
5629      <listitem>
5630       <para>
5631        A new full-text indexing suite is available in
5632        <filename>contrib/tsearch2</filename>.
5633       </para>
5634      </listitem>
5635     </varlistentry>
5636
5637     <varlistentry>
5638      <term>
5639       New autovacuum tool
5640      </term>
5641
5642      <listitem>
5643       <para>
5644        The new autovacuum tool in
5645        <filename>contrib/autovacuum</filename> monitors the database
5646        statistics tables for
5647        <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>
5648        activity and automatically vacuums tables when needed.
5649       </para>
5650      </listitem>
5651     </varlistentry>
5652
5653     <varlistentry>
5654      <term>
5655       Array handling has been improved and moved into the server core
5656      </term>
5657
5658      <listitem>
5659       <para>
5660        Many array limitations have been removed, and arrays behave
5661        more like fully-supported data types.
5662       </para>
5663      </listitem>
5664     </varlistentry>
5665
5666    </variablelist>
5667   </sect2>
5668
5669   <sect2>
5670    <title>Migration to version 7.4</title>
5671                                       
5672    <para>
5673     A dump/restore using <application>pg_dump</application> is
5674     required for those wishing to migrate data from any previous
5675     release.
5676    </para>
5677    
5678    <para>
5679     Observe the following incompatibilities:
5680    </para>
5681
5682    <itemizedlist>
5683     <listitem>
5684      <para>
5685       The server-side autocommit setting was removed and
5686       reimplemented in client applications and languages.
5687       Server-side autocommit was causing too many problems with
5688       languages and applications that wanted to control their own
5689       autocommit behavior, so autocommit was removed from the server
5690       and added to individual client APIs as appropriate.
5691      </para>
5692     </listitem>
5693
5694     <listitem>
5695      <para>
5696       Error message wording has changed substantially in this
5697       release.  Significant effort was invested to make the messages
5698       more consistent and user-oriented.  If your applications try to
5699       detect different error conditions by parsing the error message,
5700       you are strongly encouraged to use the new error code facility instead.
5701      </para>
5702     </listitem>
5703
5704     <listitem>
5705      <para>
5706       Inner joins using the explicit <literal>JOIN</literal> syntax
5707       may behave differently because they are now better
5708       optimized.
5709      </para>
5710     </listitem>
5711
5712     <listitem>
5713      <para>
5714       A number of server configuration parameters have been renamed
5715       for clarity, primarily those related to
5716       logging.
5717      </para>
5718     </listitem>
5719
5720     <listitem>
5721      <para>
5722       <literal>FETCH 0</literal> or <literal>MOVE 0</literal> now
5723       does nothing.  In prior releases, <literal>FETCH 0</literal>
5724       would fetch all remaining rows, and <literal>MOVE 0</literal>
5725       would move to the end of the cursor.
5726      </para>
5727     </listitem>
5728
5729     <listitem>
5730      <para>
5731       <command>FETCH</command> and <command>MOVE</command> now return
5732       the actual number of rows fetched/moved, or zero if at the
5733       beginning/end of the cursor.  Prior releases would return the
5734       row count passed to the command, not the number of rows
5735       actually fetched or moved.
5736      </para>
5737     </listitem>
5738
5739     <listitem>
5740      <para>
5741       <command>COPY</command> now can process files that use
5742       carriage-return or carriage-return/line-feed end-of-line
5743       sequences. Literal carriage-returns and line-feeds are no
5744       longer accepted in data values; use <literal>\r</literal> and
5745       <literal>\n</literal> instead.
5746      </para>
5747     </listitem>
5748
5749     <listitem>
5750      <para>
5751       Trailing spaces are now trimmed when converting from type
5752       <type>char(<replaceable>n</>)</type> to
5753       <type>varchar(<replaceable>n</>)</type> or <type>text</type>.
5754       This is what most people always expected to happen anyway.
5755      </para>
5756     </listitem>
5757
5758     <listitem>
5759      <para>
5760       The data type <type>float(<replaceable>p</>)</type> now
5761       measures <replaceable>p</> in binary digits, not decimal
5762       digits.  The new behavior follows the SQL standard.
5763      </para>
5764     </listitem>
5765
5766     <listitem>
5767      <para>
5768       Ambiguous date values now must match the ordering specified by
5769       the <varname>datestyle</varname> setting.  In prior releases, a
5770       date specification of <literal>10/20/03</> was interpreted as a
5771       date in October even if <varname>datestyle</> specified that
5772       the day should be first.  7.4 will throw an error if a date
5773       specification is invalid for the current setting of
5774       <varname>datestyle</>.
5775      </para>
5776     </listitem>
5777
5778     <listitem>
5779      <para>
5780       The functions <function>oidrand</function>,
5781       <function>oidsrand</function>, and
5782       <function>userfntest</function> have been removed.  These
5783       functions were determined to be no longer useful.
5784      </para>
5785     </listitem>
5786
5787     <listitem>
5788      <para>
5789       String literals specifying time-varying date/time values, such
5790       as <literal>'now'</literal> or <literal>'today'</literal> will
5791       no longer work as expected in column default expressions; they
5792       now cause the time of the table creation to be the default, not
5793       the time of the insertion.  Functions such as
5794       <function>now()</>, <function>current_timestamp</>, or
5795       <function>current_date</function> should be used instead.
5796      </para>
5797
5798      <para>
5799       In previous releases, there was special code so that strings
5800       such as <literal>'now'</literal> were interpreted at
5801       <command>INSERT</> time and not at table creation time, but
5802       this work around didn't cover all cases.  Release 7.4 now
5803       requires that defaults be defined properly using functions such
5804       as <function>now()</> or <function>current_timestamp</>. These
5805       will work in all situations.
5806      </para>
5807     </listitem>
5808
5809     <listitem>
5810      <para>
5811       The dollar sign (<literal>$</>) is no longer allowed in
5812       operator names.  It can instead be a non-first character in
5813       identifiers.  This was done to improve compatibility with other
5814       database systems, and to avoid syntax problems when parameter
5815       placeholders (<literal>$<replaceable>n</></>) are written
5816       adjacent to operators.
5817      </para>
5818     </listitem>
5819
5820    </itemizedlist>
5821   </sect2>
5822
5823   <sect2>
5824    <title>Changes</title>
5825
5826    <para>
5827     Below you will find a detailed account of the changes between
5828     release 7.4 and the previous major release.
5829    </para>
5830
5831   <sect3>
5832    <title>Server Operation Changes</title>
5833
5834    <itemizedlist>
5835     <listitem>
5836      <para>
5837       Allow IPv6 server connections (Nigel Kukard, Johan Jordaan,
5838       Bruce, Tom, Kurt Roeckx, Andrew Dunstan)
5839      </para>
5840     </listitem>
5841
5842     <listitem>
5843      <para>
5844       Fix SSL to handle errors cleanly (Nathan Mueller)
5845      </para>
5846      <para>
5847       In prior releases, certain SSL API error reports were not
5848       handled correctly.  This release fixes those problems.
5849      </para>
5850     </listitem>
5851
5852     <listitem>
5853      <para>
5854       SSL protocol security and performance improvements (Sean Chittenden)
5855      </para>
5856      <para>
5857       SSL key renegotiation was happening too frequently, causing poor
5858       SSL performance.  Also, initial key handling was improved.
5859      </para>
5860     </listitem>
5861
5862     <listitem>
5863      <para>
5864       Print lock information when a deadlock is detected (Tom)
5865      </para>
5866      <para>
5867       This allows easier debugging of deadlock situations.
5868      </para>
5869     </listitem>
5870
5871     <listitem>
5872      <para>
5873       Update <filename>/tmp</filename> socket modification times
5874       regularly to avoid their removal (Tom)
5875      </para>
5876      <para>
5877       This should help prevent <filename>/tmp</filename> directory
5878       cleaner administration scripts from removing server socket
5879       files.
5880      </para>
5881     </listitem>
5882
5883     <listitem><para>Enable PAM for Mac OS X (Aaron Hillegass)</para></listitem>
5884
5885     <listitem>
5886      <para>Make B-tree indexes fully WAL-safe (Tom)</para>
5887      <para>
5888       In prior releases, under certain rare cases, a server crash
5889       could cause B-tree indexes to become corrupt. This release
5890       removes those last few rare cases.
5891      </para>
5892     </listitem>
5893
5894     <listitem><para>Allow B-tree index compaction and empty page reuse (Tom)</para></listitem>
5895
5896     <listitem>
5897      <para>
5898       Fix inconsistent index lookups during split of first root page (Tom)
5899      </para>
5900      <para>
5901       In prior releases, when a single-page index split into two
5902       pages, there was a brief period when another database session
5903       could miss seeing an index entry.  This release fixes that rare
5904       failure case.
5905      </para>
5906     </listitem>
5907
5908     <listitem><para>Improve free space map allocation logic (Tom)</para></listitem>
5909
5910     <listitem>
5911      <para>Preserve free space information between server restarts (Tom)</para>
5912      <para>
5913       In prior releases, the free space map was not saved when the
5914       postmaster was stopped, so newly started servers had no free
5915       space information. This release saves the free space map, and
5916       reloads it when the server is restarted.
5917      </para>
5918     </listitem>
5919
5920     <listitem><para>Add start time to <literal>pg_stat_activity</literal> (Neil)</para></listitem>
5921     <listitem><para>New code to detect corrupt disk pages; erase with <varname>zero_damaged_pages</varname> (Tom)</para></listitem>
5922     <listitem><para>New client/server protocol: faster, no username length limit, allow clean exit from <command>COPY</command> (Tom)</para></listitem>
5923     <listitem><para>Add transaction status, table ID, column ID to client/server protocol (Tom)</para></listitem>
5924     <listitem><para>Add binary I/O to client/server protocol (Tom)</para></listitem>
5925     <listitem><para>Remove autocommit server setting; move to client applications (Tom)</para></listitem>
5926     <listitem><para>New error message wording, error codes, and three levels of error detail (Tom, Joe, Peter)</para></listitem>
5927    </itemizedlist>
5928   </sect3>
5929
5930   <sect3>
5931    <title>Performance Improvements</title>
5932
5933    <itemizedlist>
5934     <listitem><para>Add hashing for <literal>GROUP BY</literal> aggregates (Tom)</para></listitem>
5935     <listitem><para>Make nested-loop joins be smarter about multicolumn indexes (Tom)</para></listitem>
5936     <listitem><para>Allow multikey hash joins (Tom)</para></listitem>
5937     <listitem><para>Improve constant folding (Tom)</para></listitem>
5938     <listitem><para>Add ability to inline simple SQL functions (Tom)</para></listitem>
5939
5940     <listitem>
5941      <para>Reduce memory usage for queries using complex functions (Tom)</para>
5942      <para>
5943       In prior releases, functions returning allocated memory would
5944       not free it until the query completed. This release allows the
5945       freeing of function-allocated memory when the function call
5946       completes, reducing the total memory used by functions.
5947      </para>
5948     </listitem>
5949
5950     <listitem>
5951      <para>Improve GEQO optimizer performance (Tom)</para>
5952      <para>
5953       This release fixes several inefficiencies in the way the GEQO optimizer
5954       manages potential query paths.
5955      </para>
5956     </listitem>
5957
5958     <listitem>
5959      <para>
5960       Allow <literal>IN</>/<literal>NOT IN</> to be handled via hash
5961       tables (Tom)
5962      </para>
5963     </listitem>
5964
5965     <listitem>
5966      <para>
5967       Improve <literal>NOT IN (<replaceable>subquery</>)</literal>
5968       performance (Tom)
5969      </para>
5970     </listitem>
5971
5972     <listitem>
5973      <para>
5974       Allow most <literal>IN</literal> subqueries to be processed as
5975       joins (Tom)
5976      </para>
5977     </listitem>
5978
5979     <listitem>
5980      <para>
5981       Pattern matching operations can use indexes regardless of
5982       locale (Peter)
5983      </para>
5984      <para>
5985       There is no way for non-ASCII locales to use the standard
5986       indexes for <literal>LIKE</literal> comparisons. This release
5987       adds a way to create a special index for
5988       <literal>LIKE</literal>.
5989      </para>
5990     </listitem>
5991
5992     <listitem>
5993      <para>Allow the postmaster to preload libraries using <varname>preload_libraries</varname> (Joe)</para>
5994      <para>
5995       For shared libraries that require a long time to load, this
5996       option is available so the library can be preloaded in the
5997       postmaster and inherited by all database sessions.
5998      </para>
5999     </listitem>
6000
6001     <listitem>
6002      <para>
6003       Improve optimizer cost computations, particularly for subqueries (Tom)
6004      </para>
6005     </listitem>
6006
6007     <listitem>
6008      <para>
6009       Avoid sort when subquery <literal>ORDER BY</literal> matches upper query (Tom)
6010      </para>
6011     </listitem>
6012
6013     <listitem>
6014      <para>
6015       Deduce that <literal>WHERE a.x = b.y AND b.y = 42</literal> also
6016       means <literal>a.x = 42</literal> (Tom)
6017      </para>
6018     </listitem>
6019
6020     <listitem>
6021      <para>
6022       Allow hash/merge joins on complex joins (Tom)
6023      </para>
6024     </listitem>
6025
6026     <listitem>
6027      <para>
6028       Allow hash joins for more data types (Tom)
6029      </para>
6030     </listitem>
6031
6032     <listitem>
6033      <para>
6034       Allow join optimization of explicit inner joins, disable with
6035       <varname>join_collapse_limit</varname> (Tom)
6036      </para>
6037     </listitem>
6038
6039     <listitem>
6040      <para>
6041       Add parameter <varname>from_collapse_limit</varname> to control
6042       conversion of subqueries to joins (Tom)
6043      </para>
6044     </listitem>
6045
6046     <listitem>
6047      <para>
6048       Use faster and more powerful regular expression code from Tcl
6049       (Henry Spencer, Tom)
6050      </para>
6051     </listitem>
6052
6053     <listitem>
6054      <para>
6055       Use bit-mapped relation sets in the optimizer (Tom)
6056      </para>
6057     </listitem>
6058
6059     <listitem>
6060      <para>Improve connection startup time (Tom)</para>
6061      <para>
6062       The new client/server protocol requires fewer network packets to
6063       start a database session.
6064      </para>
6065     </listitem>
6066
6067     <listitem>
6068      <para>
6069       Improve trigger/constraint performance (Stephan)
6070      </para>
6071     </listitem>
6072
6073     <listitem>
6074      <para>
6075       Improve speed of <literal>col IN (const, const, const, ...)</literal> (Tom)
6076      </para>
6077     </listitem>
6078
6079     <listitem>
6080      <para>
6081       Fix hash indexes which were broken in rare cases (Tom)
6082      </para>
6083     </listitem>
6084
6085     <listitem><para>Improve hash index concurrency and speed (Tom)</para>
6086      <para>
6087       Prior releases suffered from poor hash index performance,
6088       particularly for high concurrency situations. This release fixes
6089       that, and the development group is interested in reports
6090       comparing B-tree and hash index performance.
6091      </para>
6092     </listitem>
6093
6094     <listitem>
6095      <para>Align shared buffers on 32-byte boundary for copy speed improvement (Manfred Spraul)</para>
6096      <para>
6097       Certain CPU's perform faster data copies when addresses are
6098       32-byte aligned.
6099      </para>
6100     </listitem>
6101
6102     <listitem>
6103      <para>Data type <type>numeric</type> reimplemented for better performance (Tom)</para>
6104      <para>
6105       <type>numeric</type> used to be stored in base 100. The new code
6106       uses base 10000, for significantly better performance.
6107      </para>
6108     </listitem>
6109    </itemizedlist>
6110   </sect3>
6111
6112   <sect3>
6113    <title>Server Configuration Changes</title>
6114
6115    <itemizedlist>
6116     <listitem>
6117      <para>Rename server parameter <varname>server_min_messages</> to <varname>log_min_messages</> (Bruce)</para>
6118      <para>
6119       This was done so most parameters that control the server logs
6120       begin with <literal>log_</>.
6121      </para>
6122     </listitem>
6123
6124     <listitem><para>Rename <varname>show_*_stats</> to <varname>log_*_stats</> (Bruce)</para></listitem>
6125     <listitem><para>Rename <varname>show_source_port</> to <varname>log_source_port</> (Bruce)</para></listitem>
6126     <listitem><para>Rename <varname>hostname_lookup</> to <varname>log_hostname</> (Bruce)</para></listitem>
6127
6128     <listitem>
6129      <para>Add <varname>checkpoint_warning</> to warn of excessive checkpointing (Bruce)</para>
6130      <para>
6131       In prior releases, it was difficult to determine if checkpoint
6132       was happening too frequently. This feature adds a warning to the
6133       server logs when excessive checkpointing happens.
6134      </para>
6135     </listitem>
6136
6137     <listitem><para>New read-only server parameters for localization (Tom)</para></listitem>
6138
6139     <listitem>
6140      <para>
6141       Change debug server log messages to output as <literal>DEBUG</>
6142       rather than <literal>LOG</> (Bruce)
6143      </para>
6144     </listitem>
6145
6146     <listitem>
6147      <para>Prevent server log variables from being turned off by non-superusers (Bruce)</para>
6148      <para>
6149       This is a security feature so non-superusers cannot disable
6150       logging that was enabled by the administrator.
6151      </para>
6152     </listitem>
6153
6154     <listitem>
6155      <para>
6156       <varname>log_min_messages</>/<varname>client_min_messages</> now
6157       controls <varname>debug_*</> output (Bruce)
6158      </para>
6159      <para>
6160       This centralizes client debug information so all debug output
6161       can be sent to either the client or server logs.
6162      </para>
6163     </listitem>
6164
6165     <listitem>
6166      <para>Add Mac OS X Rendezvous server support (Chris Campbell)</para>
6167      <para>
6168       This allows Mac OS X hosts to query the network for available
6169       <productname>PostgreSQL</productname> servers.
6170      </para>
6171     </listitem>
6172
6173     <listitem>
6174      <para>
6175       Add ability to print only slow statements using
6176       <varname>log_min_duration_statement</varname>
6177       (Christopher)
6178      </para>
6179      <para>
6180       This is an often requested debugging feature that allows
6181       administrators to see only slow queries in their server logs.
6182      </para>
6183     </listitem>
6184
6185     <listitem>
6186      <para>Allow <filename>pg_hba.conf</filename> to accept netmasks in CIDR format (Andrew Dunstan)</para>
6187      <para>
6188       This allows administrators to merge the host IP address and
6189       netmask fields into a single CIDR field in <filename>pg_hba.conf</filename>.
6190      </para>
6191     </listitem>
6192
6193     <listitem><para>New read-only parameter <varname>is_superuser</varname> (Tom)</para></listitem>
6194
6195     <listitem>
6196      <para>New parameter <varname>log_error_verbosity</varname> to control error detail (Tom)</para>
6197      <para>
6198       This works with the new error reporting feature to supply
6199       additional error information like hints, file names and line
6200       numbers.
6201      </para>
6202     </listitem>
6203
6204     <listitem>
6205      <para><literal>postgres --describe-config</literal> now dumps server config variables (Aizaz Ahmed, Peter)</para>
6206      <para>
6207       This option is useful for administration tools that need to know
6208       the configuration variable names and their minimums, maximums,
6209       defaults, and descriptions.
6210      </para>
6211     </listitem>
6212
6213     <listitem>
6214      <para>
6215       Add new columns in <literal>pg_settings</literal>:
6216       <literal>context</>, <literal>type</>, <literal>source</>,
6217       <literal>min_val</>, <literal>max_val</> (Joe)
6218      </para>
6219     </listitem>
6220
6221     <listitem>
6222      <para>
6223       Make default <varname>shared_buffers</> 1000 and
6224       <varname>max_connections</> 100, if possible (Tom)
6225      </para>
6226      <para>
6227       Prior versions defaulted to 64 shared buffers so <productname>PostgreSQL</productname>
6228       would start on even very old systems. This release tests the
6229       amount of shared memory allowed by the platform and selects more
6230       reasonable default values if possible.  Of course, users are
6231       still encouraged to evaluate their resource load and size
6232       <varname>shared_buffers</varname> accordingly.
6233      </para>
6234     </listitem>
6235
6236     <listitem>
6237      <para>
6238       New <filename>pg_hba.conf</filename> record type
6239       <literal>hostnossl</> to prevent SSL connections (Jon
6240       Jensen)
6241      </para>
6242      <para>
6243       In prior releases, there was no way to prevent SSL connections
6244       if both the client and server supported SSL. This option allows
6245       that capability.
6246      </para>
6247     </listitem>
6248
6249     <listitem>
6250      <para>
6251       Remove parameter <varname>geqo_random_seed</varname>
6252       (Tom)
6253      </para>
6254     </listitem>
6255
6256     <listitem>
6257      <para>
6258       Add server parameter <varname>regex_flavor</varname> to control regular expression processing (Tom)
6259      </para>
6260     </listitem>
6261
6262     <listitem>
6263      <para>
6264       Make <command>pg_ctl</command> better handle nonstandard ports (Greg)
6265      </para>
6266     </listitem>
6267    </itemizedlist>
6268   </sect3>
6269
6270   <sect3>
6271    <title>Query Changes</title>
6272
6273    <itemizedlist>
6274     <listitem><para>New SQL-standard information schema (Peter)</para></listitem>
6275     <listitem><para>Add read-only transactions (Peter)</para></listitem>
6276     <listitem><para>Print key name and value in foreign-key violation messages (Dmitry Tkach)</para></listitem>
6277
6278     <listitem>
6279      <para>Allow users to see their own queries in <literal>pg_stat_activity</literal> (Kevin Brown)</para>
6280      <para>
6281       In prior releases, only the superuser could see query strings
6282       using <literal>pg_stat_activity</literal>. Now ordinary users
6283       can see their own query strings.
6284      </para>
6285     </listitem>
6286
6287     <listitem>
6288      <para>Fix aggregates in subqueries to match SQL standard (Tom)</para>
6289      <para>
6290       The SQL standard says that an aggregate function appearing
6291       within a nested subquery belongs to the outer query if its
6292       argument contains only outer-query variables.  Prior
6293       <productname>PostgreSQL</productname> releases did not handle
6294       this fine point correctly.
6295      </para>
6296     </listitem>
6297
6298     <listitem>
6299      <para>Add option to prevent auto-addition of tables referenced in query (Nigel J. Andrews)</para>
6300      <para>
6301       By default, tables mentioned in the query are automatically
6302       added to the <literal>FROM</> clause if they are not already
6303       there.  This is compatible with historic
6304       <productname>POSTGRES</productname> behavior but is contrary to
6305       the SQL standard.  This option allows selecting
6306       standard-compatible behavior.
6307      </para>
6308     </listitem>
6309
6310     <listitem>
6311      <para>Allow <literal>UPDATE ... SET col = DEFAULT</literal> (Rod)</para>
6312      <para>
6313       This allows <command>UPDATE</command> to set a column to its
6314       declared default value.
6315      </para>
6316     </listitem>
6317
6318     <listitem>
6319      <para>Allow expressions to be used in <literal>LIMIT</>/<literal>OFFSET</> (Tom)</para>
6320      <para>
6321       In prior releases, <literal>LIMIT</>/<literal>OFFSET</> could
6322       only use constants, not expressions.
6323      </para>
6324     </listitem>
6325
6326     <listitem>
6327      <para>Implement <literal>CREATE TABLE AS EXECUTE</literal> (Neil, Peter)</para>
6328     </listitem>
6329    </itemizedlist>
6330   </sect3>
6331
6332   <sect3>
6333    <title>Object Manipulation Changes</title>
6334
6335    <itemizedlist>
6336     <listitem>
6337      <para>Make <command>CREATE SEQUENCE</command> grammar more conforming to SQL:2003 (Neil)</para>
6338     </listitem>
6339
6340     <listitem>
6341      <para>Add statement-level triggers (Neil)</para>
6342      <para>
6343       While this allows a trigger to fire at the end of a statement,
6344       it does not allow the trigger to access all rows modified by the
6345       statement.  This capability is planned for a future release.
6346      </para>
6347     </listitem>
6348
6349     <listitem>
6350      <para>Add check constraints for domains (Rod)</para>
6351      <para>
6352       This greatly increases the usefulness of domains by allowing
6353       them to use check constraints.
6354      </para>
6355     </listitem>
6356
6357     <listitem>
6358      <para>Add <command>ALTER DOMAIN</command> (Rod)</para>
6359      <para>
6360       This allows manipulation of existing domains.
6361      </para>
6362     </listitem>
6363
6364     <listitem>
6365      <para>Fix several zero-column table bugs (Tom)</para>
6366      <para>
6367       <productname>PostgreSQL</productname> supports zero-column tables. This fixes various bugs
6368       that occur when using such tables.
6369      </para>
6370     </listitem>
6371
6372     <listitem>
6373      <para>Have <literal>ALTER TABLE ... ADD PRIMARY KEY</literal> add not-null constraint (Rod)</para>
6374      <para>
6375       In prior releases, <literal>ALTER TABLE ... ADD
6376       PRIMARY</literal> would add a unique index, but not a not-null
6377       constraint.  That is fixed in this release.
6378      </para>
6379     </listitem>
6380
6381     <listitem><para>Add <literal>ALTER TABLE ... WITHOUT OIDS</literal> (Rod)</para>
6382      <para>
6383       This allows control over whether new and updated rows will have
6384       an OID column.  This is most useful for saving storage space.
6385      </para>
6386     </listitem>
6387
6388     <listitem>
6389      <para>
6390       Add <literal>ALTER SEQUENCE</literal> to modify minimum, maximum,
6391       increment, cache, cycle values (Rod)
6392      </para>
6393     </listitem>
6394
6395     <listitem>
6396      <para>Add <literal>ALTER TABLE ... CLUSTER ON</literal> (Alvaro Herrera)</para>
6397      <para>
6398       This command is used by <command>pg_dump</command> to record the
6399       cluster column for each table previously clustered. This
6400       information is used by database-wide cluster to cluster all
6401       previously clustered tables.
6402      </para>
6403     </listitem>
6404
6405     <listitem><para>Improve automatic type casting for domains (Rod, Tom)</para></listitem>
6406     <listitem><para>Allow dollar signs in identifiers, except as first character (Tom)</para></listitem>
6407     <listitem><para>Disallow dollar signs in operator names, so <literal>x=$1</> works (Tom)</para></listitem>
6408
6409     <listitem>
6410      <para>
6411       Allow copying table schema using <literal>LIKE
6412       <replaceable>subtable</replaceable></literal>, also SQL:2003
6413       feature <literal>INCLUDING DEFAULTS</literal> (Rod)
6414      </para>
6415     </listitem>
6416
6417     <listitem>
6418      <para>
6419       Add <literal>WITH GRANT OPTION</literal> clause to
6420       <command>GRANT</command> (Peter)
6421      </para>
6422      <para>
6423       This enabled <command>GRANT</command> to give other users the
6424       ability to grant privileges on a object.
6425      </para>
6426     </listitem>
6427    </itemizedlist>
6428   </sect3>
6429
6430   <sect3>
6431    <title>Utility Command Changes</title>
6432
6433    <itemizedlist>
6434     <listitem>
6435      <para>Add <literal>ON COMMIT</literal> clause to <command>CREATE TABLE</command> for temporary tables (Gavin)</para>
6436      <para>
6437       This adds the ability for a table to be dropped or all rows
6438       deleted on transaction commit.
6439      </para>
6440     </listitem>
6441
6442     <listitem>
6443      <para>Allow cursors outside transactions using <literal>WITH HOLD</literal> (Neil)</para>
6444      <para>
6445       In previous releases, cursors were removed at the end of the
6446       transaction that created them. Cursors can now be created with
6447       the <literal>WITH HOLD</literal> option, which allows them to
6448       continue to be accessed after the creating transaction has
6449       committed.
6450      </para>
6451     </listitem>
6452
6453     <listitem>
6454      <para><literal>FETCH 0</literal> and <literal>MOVE 0 </literal> now do nothing (Bruce)</para>
6455      <para>
6456       In previous releases, <literal>FETCH 0</literal> fetched all
6457       remaining rows, and <literal>MOVE 0</literal> moved to the end
6458       of the cursor.
6459      </para>
6460     </listitem>
6461
6462     <listitem>
6463      <para>
6464       Cause <command>FETCH</command> and <command>MOVE</command> to
6465       return the number of rows fetched/moved, or zero if at the
6466       beginning/end of cursor, per SQL standard (Bruce)
6467      </para>
6468      <para>
6469       In prior releases, the row count returned by
6470       <command>FETCH</command> and <command>MOVE</command> did not
6471       accurately reflect the number of rows processed.
6472      </para>
6473     </listitem>
6474
6475     <listitem>
6476      <para>Properly handle <literal>SCROLL</literal> with cursors, or
6477      report an error (Neil)</para>
6478      <para>
6479       Allowing random access (both forward and backward scrolling) to
6480       some kinds of queries cannot be done without some additional
6481       work. If <literal>SCROLL</literal> is specified when the cursor
6482       is created, this additional work will be performed. Furthermore,
6483       if the cursor has been created with <literal>NO SCROLL</literal>,
6484       no random access is allowed.
6485      </para>
6486     </listitem>
6487
6488     <listitem>
6489      <para>
6490       Implement SQL-compatible options <literal>FIRST</>,
6491       <literal>LAST</>, <literal>ABSOLUTE <replaceable>n</></>,
6492       <literal>RELATIVE <replaceable>n</></> for
6493       <command>FETCH</command> and <command>MOVE</command> (Tom)
6494      </para>
6495     </listitem>
6496
6497     <listitem>
6498      <para>Allow <command>EXPLAIN</command> on <command>DECLARE CURSOR</command> (Tom)</para>
6499     </listitem>
6500
6501     <listitem>
6502      <para>Allow <command>CLUSTER</command> to use index marked as pre-clustered by default (Alvaro Herrera)</para>
6503     </listitem>
6504
6505     <listitem>
6506      <para>Allow <command>CLUSTER</command> to cluster all tables (Alvaro Herrera)</para>
6507      <para>
6508       This allows all previously clustered tables in a database to be
6509       reclustered with a single command.
6510      </para>
6511     </listitem>
6512
6513     <listitem><para>Prevent <command>CLUSTER</command> on partial indexes (Tom)</para></listitem>
6514
6515     <listitem><para>Allow DOS and Mac line-endings in <command>COPY</> files (Bruce)</para></listitem>
6516
6517     <listitem>
6518      <para>
6519       Disallow literal carriage return as a data value,
6520       backslash-carriage-return and <literal>\r</> are still allowed
6521       (Bruce)
6522      </para>
6523     </listitem>
6524
6525     <listitem>
6526      <para><command>COPY</> changes (binary, <literal>\.</>) (Tom)</para>
6527     </listitem>
6528
6529     <listitem>
6530      <para>Recover from <command>COPY</command> failure cleanly (Tom)</para>
6531     </listitem>
6532
6533     <listitem>
6534      <para>Prevent possible memory leaks in <command>COPY</command> (Tom)</para>
6535     </listitem>
6536
6537     <listitem>
6538      <para>Make <command>TRUNCATE</command> transaction-safe (Rod)</para>
6539      <para>
6540       <command>TRUNCATE</command> can now be used inside a
6541       transaction. If the transaction aborts, the changes made by the
6542       <command>TRUNCATE</command> are automatically rolled back.
6543      </para>
6544     </listitem>
6545
6546     <listitem>
6547      <para>
6548       Allow prepare/bind of utility commands like
6549       <command>FETCH</command> and <command>EXPLAIN</command> (Tom)
6550      </para>
6551     </listitem>
6552
6553     <listitem>
6554      <para>Add <command>EXPLAIN EXECUTE</command> (Neil)</para>
6555     </listitem>
6556
6557     <listitem>
6558      <para>Improve <command>VACUUM</command> performance on indexes by reducing WAL traffic (Tom)</para>
6559     </listitem>
6560
6561     <listitem>
6562      <para>Functional indexes have been generalized into indexes on expressions (Tom)</para>
6563      <para>
6564       In prior releases, functional indexes only supported a simple
6565       function applied to one or more column names.  This release
6566       allows any type of scalar expression.
6567      </para>
6568     </listitem>
6569
6570     <listitem>
6571      <para>
6572       Have <command>SHOW TRANSACTION ISOLATION</command> match input
6573       to <command>SET TRANSACTION ISOLATION</command>
6574       (Tom)
6575      </para>
6576     </listitem>
6577
6578     <listitem>
6579      <para>
6580        Have <command>COMMENT ON DATABASE</command> on nonlocal
6581        database generate a warning, rather than an error (Rod)
6582       </para>
6583
6584      <para>
6585       Database comments are stored in database-local tables so
6586       comments on a database have to be stored in each database.
6587      </para>
6588     </listitem>
6589
6590     <listitem>
6591      <para>
6592       Improve reliability of <command>LISTEN</>/<command>NOTIFY</> (Tom)
6593      </para>
6594     </listitem>
6595
6596     <listitem>
6597      <para>Allow <command>REINDEX</command> to reliably reindex nonshared system catalog indexes (Tom)</para>
6598      <para>
6599       This allows system tables to be reindexed without the
6600       requirement of a standalone session, which was necessary in
6601       previous releases. The only tables that now require a standalone
6602       session for reindexing are the global system tables
6603       <literal>pg_database</>, <literal>pg_shadow</>, and
6604       <literal>pg_group</>.
6605      </para>
6606     </listitem>
6607    </itemizedlist>
6608   </sect3>
6609
6610   <sect3>
6611    <title>Data Type and Function Changes</title>
6612
6613    <itemizedlist>
6614     <listitem>
6615      <para>
6616       New server parameter <varname>extra_float_digits</varname> to
6617       control precision display of floating-point numbers (Pedro
6618       Ferreira, Tom)
6619      </para>
6620      <para>
6621       This controls output precision which was causing regression
6622       testing problems.
6623      </para>
6624     </listitem>
6625
6626     <listitem><para>Allow <literal>+1300</literal> as a numeric time-zone specifier, for FJST (Tom)</para></listitem>
6627
6628     <listitem>
6629      <para>
6630       Remove rarely used functions <function>oidrand</>,
6631       <function>oidsrand</>, and <function>userfntest</> functions
6632       (Neil)
6633      </para>
6634     </listitem>
6635
6636     <listitem>
6637      <para>Add <function>md5()</> function to main server, already in <filename>contrib/pgcrypto</filename> (Joe)</para>
6638      <para>
6639       An MD5 function was frequently requested. For more complex
6640       encryption capabilities, use
6641       <filename>contrib/pgcrypto</filename>.
6642      </para>
6643     </listitem>
6644
6645     <listitem><para>Increase date range of <type>timestamp</type> (John Cochran)</para></listitem>
6646
6647     <listitem>
6648      <para>
6649       Change <literal>EXTRACT(EPOCH FROM timestamp)</literal> so
6650       <type>timestamp without time zone</type> is assumed to be in
6651       local time, not GMT (Tom)
6652      </para>
6653     </listitem>
6654
6655     <listitem><para>Trap division by zero in case the operating system doesn't prevent it (Tom)</para></listitem>
6656     <listitem><para>Change the <type>numeric</type> data type internally to base 10000 (Tom)</para></listitem>
6657     <listitem><para>New <function>hostmask()</function> function (Greg Wickham)</para></listitem>
6658     <listitem><para>Fixes for <function>to_char()</function> and <function>to_timestamp()</function> (Karel)</para></listitem>
6659
6660     <listitem>
6661      <para>
6662       Allow functions that can take any argument data type and return
6663       any data type, using <type>anyelement</type> and
6664       <type>anyarray</type> (Joe)
6665      </para>
6666      <para>
6667       This allows the creation of functions that can work with any
6668       data type.
6669      </para>
6670     </listitem>
6671
6672     <listitem>
6673      <para>
6674       Arrays may now be specified as <literal>ARRAY[1,2,3]</literal>,
6675       <literal>ARRAY[['a','b'],['c','d']]</literal>, or
6676       <literal>ARRAY[ARRAY[ARRAY[2]]]</literal> (Joe)
6677      </para>
6678     </listitem>
6679
6680     <listitem>
6681      <para>
6682       Allow proper comparisons for arrays, including <literal>ORDER
6683       BY</literal> and <literal>DISTINCT</literal> support
6684       (Joe)
6685      </para>
6686     </listitem>
6687
6688     <listitem><para>Allow indexes on array columns (Joe)</para></listitem>
6689     <listitem><para>Allow array concatenation with <literal>||</literal> (Joe)</para></listitem>
6690
6691     <listitem>
6692      <para>
6693       Allow <literal>WHERE</literal> qualification
6694       <literal><replaceable>expr</> <replaceable>op</> ANY/SOME/ALL
6695       (<replaceable>array_expr</>)</literal> (Joe)
6696      </para>
6697      <para>
6698       This allows arrays to behave like a list of values, for purposes
6699       like <literal>SELECT * FROM tab WHERE col IN
6700       (array_val)</literal>.
6701      </para>
6702     </listitem>
6703
6704     <listitem>
6705      <para>
6706       New array functions <function>array_append</>,
6707       <function>array_cat</>, <function>array_lower</>,
6708       <function>array_prepend</>, <function>array_to_string</>,
6709       <function>array_upper</>, <function>string_to_array</> (Joe)
6710      </para>
6711     </listitem>
6712
6713     <listitem><para>Allow user defined aggregates to use polymorphic functions (Joe)</para></listitem>
6714     <listitem><para>Allow assignments to empty arrays (Joe)</para></listitem>
6715
6716     <listitem>
6717      <para>
6718       Allow 60 in seconds fields of <type>time</type>,
6719       <type>timestamp</type>, and <type>interval</type> input values
6720       (Tom)
6721      </para>
6722      <para>
6723       Sixty-second values are needed for leap seconds.
6724      </para>
6725     </listitem>
6726
6727     <listitem><para>Allow <type>cidr</type> data type to be cast to <type>text</type> (Tom)</para></listitem>
6728
6729     <listitem><para>Disallow invalid time zone names in SET TIMEZONE</para></listitem>
6730
6731     <listitem>
6732      <para>
6733       Trim trailing spaces when <type>char</type> is cast to
6734       <type>varchar</> or <type>text</> (Tom)
6735      </para>
6736     </listitem>
6737
6738     <listitem>
6739      <para>
6740       Make <type>float(<replaceable>p</>)</> measure the precision
6741       <replaceable>p</> in binary digits, not decimal digits
6742       (Tom)
6743      </para>
6744     </listitem>
6745
6746     <listitem>
6747      <para>Add IPv6 support to the <type>inet</type> and <type>cidr</type> data types (Michael Graff)</para>
6748     </listitem>
6749
6750     <listitem>
6751      <para>Add <function>family()</function> function to report whether address is IPv4 or IPv6 (Michael Graff)</para>
6752     </listitem>
6753
6754     <listitem>
6755      <para>
6756       Have <literal>SHOW datestyle</literal> generate output similar
6757       to that used by <literal>SET datestyle</literal> (Tom)
6758      </para>
6759     </listitem>
6760
6761     <listitem>
6762      <para>
6763       Make <literal>EXTRACT(TIMEZONE)</literal> and <literal>SET/SHOW
6764       TIME ZONE</literal> follow the SQL convention for the sign of
6765       time zone offsets, i.e., positive is east from UTC (Tom)
6766      </para>
6767     </listitem>
6768
6769     <listitem>
6770      <para>Fix <literal>date_trunc('quarter', ...)</literal> (Böjthe Zoltán)</para>
6771      <para>
6772       Prior releases returned an incorrect value for this function call.
6773      </para>
6774     </listitem>
6775
6776     <listitem>
6777      <para>Make <function>initcap()</function> more compatible with Oracle (Mike Nolan)</para>
6778      <para>
6779       <function>initcap()</function> now uppercases a letter appearing
6780       after any non-alphanumeric character, rather than only after
6781       whitespace.
6782      </para>
6783     </listitem>
6784
6785     <listitem>
6786      <para>Allow only <varname>datestyle</varname> field order for date values not in ISO-8601 format (Greg)</para>
6787     </listitem>
6788
6789     <listitem>
6790      <para>
6791       Add new <varname>datestyle</varname> values <literal>MDY</>,
6792       <literal>DMY</>, and <literal>YMD</> to set input field order;
6793       honor <literal>US</> and <literal>European</> for backward
6794       compatibility (Tom)
6795      </para>
6796     </listitem>
6797
6798     <listitem>
6799      <para>
6800       String literals like <literal>'now'</literal> or
6801       <literal>'today'</literal> will no longer work as a column
6802       default. Use functions such as <function>now()</function>,
6803       <function>current_timestamp</function> instead.  (change
6804       required for prepared statements) (Tom)
6805      </para>
6806     </listitem>
6807
6808     <listitem>
6809      <para>Treat NaN as larger than any other value in <function>min()</>/<function>max()</> (Tom)</para>
6810      <para>
6811       NaN was already sorted after ordinary numeric values for most
6812       purposes, but <function>min()</> and <function>max()</> didn't
6813       get this right.
6814      </para>
6815     </listitem>
6816
6817     <listitem>
6818      <para>Prevent interval from suppressing <literal>:00</literal>
6819      seconds display</para>
6820     </listitem>
6821
6822     <listitem>
6823      <para>
6824       New functions <function>pg_get_triggerdef(prettyprint)</function>
6825       and <function>pg_conversion_is_visible()</function> (Christopher)
6826      </para>
6827     </listitem>
6828
6829     <listitem>
6830      <para>Allow time to be specified as <literal>040506</> or <literal>0405</> (Tom)</para>
6831     </listitem>
6832
6833     <listitem>
6834      <para>
6835       Input date order must now be <literal>YYYY-MM-DD</literal> (with 4-digit year) or
6836       match <varname>datestyle</varname>
6837      </para>
6838     </listitem>
6839
6840     <listitem>
6841      <para>
6842       Make <function>pg_get_constraintdef</function> support
6843       unique, primary-key, and check constraints (Christopher)
6844      </para>
6845     </listitem>
6846    </itemizedlist>
6847   </sect3>
6848
6849   <sect3>
6850    <title>Server-Side Language Changes</title>
6851
6852    <itemizedlist>
6853     <listitem>
6854      <para>
6855       Prevent PL/pgSQL crash when <literal>RETURN NEXT</literal> is
6856       used on a zero-row record variable (Tom)
6857      </para>
6858     </listitem>
6859
6860     <listitem>
6861      <para>
6862       Make PL/Python's <function>spi_execute</function> interface
6863       handle null values properly (Andrew Bosma)
6864      </para>
6865     </listitem>
6866
6867     <listitem>
6868      <para>Allow PL/pgSQL to declare variables of composite types without <literal>%ROWTYPE</literal> (Tom)</para>
6869     </listitem>
6870
6871     <listitem>
6872      <para>Fix PL/Python's <function>_quote()</function> function to handle big integers</para>
6873     </listitem>
6874
6875     <listitem>
6876      <para>Make PL/Python an untrusted language, now called <literal>plpythonu</literal> (Kevin Jacobs, Tom)</para>
6877      <para>
6878       The Python language no longer supports a restricted execution
6879       environment, so the trusted version of PL/Python was removed. If
6880       this situation changes, a version of PL/Python that can be used
6881       by non-superusers will be readded.
6882      </para>
6883     </listitem>
6884
6885     <listitem>
6886      <para>Allow polymorphic PL/pgSQL functions (Joe, Tom)</para>
6887     </listitem>
6888
6889     <listitem>
6890      <para>Allow polymorphic SQL functions (Joe)</para>
6891     </listitem>
6892
6893     <listitem>
6894      <para>
6895       Improved compiled function caching mechanism in PL/pgSQL with
6896       full support for polymorphism (Joe)
6897      </para>
6898     </listitem>
6899
6900     <listitem>
6901      <para>
6902       Add new parameter <literal>$0</> in PL/pgSQL representing the
6903       function's actual return type (Joe)
6904      </para>
6905     </listitem>
6906
6907     <listitem>
6908      <para>
6909       Allow PL/Tcl and PL/Python to use the same trigger on multiple tables (Tom)
6910      </para>
6911     </listitem>
6912
6913     <listitem>
6914      <para>
6915       Fixed PL/Tcl's <function>spi_prepare</function> to accept fully
6916       qualified type names in the parameter type list
6917       (Jan)
6918      </para>
6919     </listitem>
6920    </itemizedlist>
6921   </sect3>
6922
6923   <sect3>
6924    <title>psql Changes</title>
6925
6926    <itemizedlist>
6927     <listitem>
6928      <para>Add <literal>\pset pager always</literal> to always use pager (Greg)</para>
6929      <para>
6930       This forces the pager to be used even if the number of rows is
6931       less than the screen height.  This is valuable for rows that
6932       wrap across several screen rows.
6933      </para>
6934     </listitem>
6935
6936     <listitem><para>Improve tab completion (Rod, Ross Reedstrom, Ian Barwick)</para></listitem>
6937     <listitem><para>Reorder <literal>\?</> help into groupings (Harald Armin Massa, Bruce)</para></listitem>
6938     <listitem><para>Add backslash commands for listing schemas, casts, and conversions (Christopher)</para></listitem>
6939
6940     <listitem>
6941      <para>
6942       <command>\encoding</> now changes based on the server parameter
6943       <varname>client_encoding</varname> (Tom)
6944      </para>
6945      <para>
6946       In previous versions, <command>\encoding</command> was not aware
6947       of encoding changes made using <literal>SET
6948       client_encoding</literal>.
6949      </para>
6950     </listitem>
6951
6952     <listitem>
6953      <para>Save editor buffer into readline history (Ross)</para>
6954      <para>
6955       When <command>\e</> is used to edit a query, the result is saved
6956       in the readline history for retrieval using the up arrow.
6957      </para>
6958     </listitem>
6959
6960     <listitem><para>Improve <command>\d</command> display (Christopher)</para></listitem>
6961     <listitem><para>Enhance HTML mode to be more standards-conforming (Greg)</para></listitem>
6962
6963     <listitem>
6964      <para>New <command>\set AUTOCOMMIT off</command> capability (Tom)</para>
6965      <para>
6966       This takes the place of the removed server parameter <varname>autocommit</varname>.
6967      </para>
6968     </listitem>
6969
6970     <listitem>
6971      <para>New <command>\set VERBOSITY</command> to control error detail (Tom)</para>
6972      <para>
6973       This controls the new error reporting details.
6974      </para>
6975     </listitem>
6976
6977     <listitem><para>New prompt escape sequence <literal>%x</literal> to show transaction status (Tom)</para></listitem>
6978     <listitem><para>Long options for <application>psql</application> are now available on all platforms</para></listitem>
6979    </itemizedlist>
6980   </sect3>
6981
6982   <sect3>
6983    <title>pg_dump Changes</title>
6984
6985    <itemizedlist>
6986     <listitem><para>Multiple pg_dump fixes, including tar format and large objects</para></listitem>
6987     <listitem><para>Allow pg_dump to dump specific schemas (Neil)</para></listitem>
6988
6989     <listitem>
6990      <para>Make pg_dump preserve column storage characteristics (Christopher)</para>
6991      <para>
6992       This preserves <literal>ALTER TABLE ... SET STORAGE</literal> information.
6993      </para>
6994     </listitem>
6995
6996     <listitem><para>Make pg_dump preserve <command>CLUSTER</command> characteristics (Christopher)</para></listitem>
6997
6998     <listitem>
6999      <para>
7000       Have pg_dumpall use <command>GRANT</>/<command>REVOKE</> to dump database-level privleges (Tom)
7001      </para>
7002     </listitem>
7003
7004     <listitem>
7005      <para>
7006       Allow pg_dumpall to support the options <option>-a</>,
7007       <option>-s</>, <option>-x</> of pg_dump (Tom)
7008      </para>
7009     </listitem>
7010
7011     <listitem><para>Prevent pg_dump from lowercasing identifiers specified on the command line (Tom)</para></listitem>
7012
7013     <listitem>
7014      <para>
7015       pg_dump options <option>--use-set-session-authorization</option>
7016       and <option>--no-reconnect</option> now do nothing, all dumps
7017       use <command>SET SESSION AUTHORIZATION</command>
7018      </para>
7019      <para>
7020       pg_dump no longer reconnects to switch users, but instead always
7021       uses <command>SET SESSION AUTHORIZATION</command>. This will
7022       reduce password prompting during restores.
7023      </para>
7024     </listitem>
7025
7026     <listitem>
7027      <para>Long options for <application>pg_dump</application> are now available on all platforms</para>
7028      <para>
7029       <productname>PostgreSQL</productname> now includes its own
7030       long-option processing routines.
7031      </para>
7032     </listitem>
7033    </itemizedlist>
7034   </sect3>
7035
7036   <sect3>
7037    <title>libpq Changes</title>
7038
7039    <itemizedlist>
7040     <listitem>
7041      <para>
7042       Add function <function>PQfreemem</function> for freeing memory on
7043       Windows, suggested for <command>NOTIFY</command> (Bruce)
7044      </para>
7045      <para>
7046       Windows requires that memory allocated in a library be freed by
7047       a function in the same library, hence
7048       <function>free()</function> doesn't work for freeing memory
7049       allocated by libpq. <function>PQfreemem</function> is the proper
7050       way to free libpq memory, especially on Windows, and is
7051       recommended for other platforms as well.
7052      </para>
7053     </listitem>
7054
7055     <listitem>
7056      <para>Document service capability, and add sample file (Bruce)</para>
7057      <para>
7058       This allows clients to look up connection information in a
7059       central file on the client machine.
7060      </para>
7061     </listitem>
7062
7063     <listitem>
7064      <para>
7065       Make <function>PQsetdbLogin</function> have the same defaults as
7066       <function>PQconnectdb</function> (Tom)
7067      </para>
7068     </listitem>
7069
7070     <listitem><para>Allow libpq to cleanly fail when result sets are too large (Tom)</para></listitem>
7071
7072     <listitem>
7073      <para>
7074       Improve performance of function <function>PQunescapeBytea</function> (Ben Lamb)
7075      </para>
7076     </listitem>
7077
7078     <listitem>
7079      <para>
7080       Allow thread-safe libpq with <filename>configure</filename>
7081       option <option>--enable-thread-safety</option> (Lee Kindness,
7082       Philip Yarra)
7083      </para>
7084     </listitem>
7085
7086     <listitem>
7087      <para>
7088       Allow function <function>pqInternalNotice</function> to accept a
7089       format string and arguments instead of just a preformatted
7090       message (Tom, Sean Chittenden)
7091      </para>
7092     </listitem>
7093
7094     <listitem>
7095      <para>
7096       Control SSL negotiation with <literal>sslmode</literal> values
7097       <literal>disable</literal>, <literal>allow</literal>,
7098       <literal>prefer</literal>, and <literal>require</literal> (Jon
7099       Jensen)
7100      </para>
7101     </listitem>
7102
7103     <listitem>
7104      <para>Allow new error codes and levels of text (Tom)</para>
7105     </listitem>
7106
7107     <listitem>
7108      <para>Allow access to the underlying table and column of a query result (Tom)</para>
7109      <para>
7110       This is helpful for query-builder applications that want to know
7111       the underlying table and column names associated with a specific
7112       result set.
7113      </para>
7114     </listitem>
7115
7116     <listitem><para>Allow access to the current transaction status (Tom)</para></listitem>
7117     <listitem><para>Add ability to pass binary data directly to the server (Tom)</para></listitem>
7118
7119     <listitem>
7120      <para>
7121       Add function <function>PQexecPrepared</function> and
7122       <function>PQsendQueryPrepared</function> functions which perform
7123       bind/execute of previously prepared statements (Tom)
7124       </para>
7125      </listitem>
7126    </itemizedlist>
7127   </sect3>
7128
7129   <sect3>
7130    <title>JDBC Changes</title>
7131
7132    <itemizedlist>
7133     <listitem><para>Allow <function>setNull</function> on updateable result sets</para></listitem>
7134     <listitem><para>Allow <function>executeBatch</function> on a prepared statement (Barry)</para></listitem>
7135     <listitem><para>Support SSL connections (Barry)</para></listitem>
7136     <listitem><para>Handle schema names in result sets (Paul Sorenson)</para></listitem>
7137     <listitem><para>Add refcursor support (Nic Ferrier)</para></listitem>
7138    </itemizedlist>
7139   </sect3>
7140
7141   <sect3>
7142    <title>Miscellaneous Interface Changes</title>
7143
7144    <itemizedlist>
7145     <listitem>
7146      <para>Prevent possible memory leak or core dump during libpgtcl shutdown (Tom)</para>
7147     </listitem>
7148     <listitem>
7149      <para>Add Informix compatibility to ECPG (Michael)</para>
7150      <para>
7151       This allows ECPG to process embedded C programs that were
7152       written using certain Informix extensions.
7153      </para>
7154     </listitem>
7155
7156     <listitem>
7157      <para>Add type <type>decimal</type> to ECPG that is fixed length, for Informix (Michael)</para>
7158     </listitem>
7159
7160     <listitem>
7161      <para>
7162       Allow thread-safe embedded SQL programs with
7163       <filename>configure</filename> option
7164       <option>--enable-thread-safety</option> (Lee Kindness, Bruce)
7165      </para>
7166      <para>
7167       This allows multiple threads to access the database at the same
7168       time.
7169      </para>
7170     </listitem>
7171
7172     <listitem>
7173      <para>Moved Python client PyGreSQL to <ulink url="http://www.pygresql.org"></ulink> (Marc)</para>
7174     </listitem>
7175    </itemizedlist>
7176   </sect3>
7177
7178   <sect3>
7179    <title>Source Code Changes</title>
7180
7181    <itemizedlist>
7182     <listitem><para>Prevent need for separate platform geometry regression result files (Tom)</para></listitem>
7183     <listitem><para>Improved PPC locking primitive (Reinhard Max)</para></listitem>
7184     <listitem><para>New function <function>palloc0</function> to allocate and clear memory (Bruce)</para></listitem>
7185     <listitem><para>Fix locking code for s390x CPU (64-bit) (Tom)</para></listitem>
7186     <listitem><para>Allow OpenBSD to use local ident credentials (William Ahern)</para></listitem>
7187     <listitem><para>Make query plan trees read-only to executor (Tom)</para></listitem>
7188     <listitem><para>Add Darwin startup scripts (David Wheeler)</para></listitem>
7189     <listitem><para>Allow libpq to compile with Borland C++ compiler (Lester Godwin, Karl Waclawek)</para></listitem>
7190     <listitem><para>Use our own version of <function>getopt_long()</function> if needed (Peter)</para></listitem>
7191     <listitem><para>Convert administration scripts to C (Peter)</para></listitem>
7192     <listitem><para> Bison &gt;= 1.85 is now required to build the <productname>PostgreSQL</> grammar, if building from CVS</para></listitem>
7193     <listitem><para>Merge documentation into one book (Peter)</para></listitem>
7194     <listitem><para>Add Windows compatibility functions (Bruce)</para></listitem>
7195     <listitem><para>Allow client interfaces to compile under MinGW (Bruce)</para></listitem>
7196     <listitem><para>New <function>ereport()</function> function for error reporting (Tom)</para></listitem>
7197     <listitem><para>Support Intel compiler on Linux (Peter)</para></listitem>
7198     <listitem><para>Improve Linux startup scripts (Slawomir Sudnik, Darko Prenosil)</para></listitem>
7199     <listitem><para>Add support for AMD Opteron and Itanium (Jeffrey W. Baker, Bruce)</para></listitem>
7200     <listitem>
7201      <para>Remove <option>--enable-recode</option> option from <command>configure</command></para>
7202      <para>
7203       This was no longer needed now that we have <command>CREATE CONVERSION</command>.
7204      </para>
7205     </listitem>
7206     <listitem>
7207      <para>Generate a compile error if spinlock code is not found (Bruce)</para>
7208      <para>
7209       Platforms without spinlock code will now fail to compile, rather
7210       than silently using semaphores. This failure can be disabled
7211       with a new <command>configure</command> option.
7212      </para>
7213     </listitem>
7214    </itemizedlist>
7215   </sect3>
7216
7217   <sect3>
7218    <title>Contrib Changes</title>
7219
7220    <itemizedlist>
7221     <listitem><para>Change dbmirror license to BSD</para></listitem>
7222     <listitem><para>Improve earthdistance (Bruno Wolff III)</para></listitem>
7223     <listitem><para>Portability improvements to pgcrypto (Marko Kreen)</para></listitem>
7224     <listitem><para>Prevent crash in xml (John Gray, Michael Richards)</para></listitem>
7225     <listitem><para>Update oracle</para></listitem>
7226     <listitem><para>Update mysql</para></listitem>
7227     <listitem><para>Update cube (Bruno Wolff III)</para></listitem>
7228     <listitem><para>Update earthdistance to use cube (Bruno Wolff III)</para></listitem>
7229     <listitem><para>Update btree_gist (Oleg)</para></listitem>
7230     <listitem><para>New tsearch2 full-text search module (Oleg, Teodor)</para></listitem>
7231     <listitem><para>Add hash-based crosstab function to tablefuncs (Joe)</para></listitem>
7232     <listitem><para>Add serial column to order <function>connectby()</> siblings in tablefuncs (Nabil Sayegh,Joe)</para></listitem>
7233     <listitem><para>Add named persistent connections to dblink (Shridhar Daithanka)</para></listitem>
7234     <listitem><para>New pg_autovacuum allows automatic <command>VACUUM</command> (Matthew T. O'Connor)</para></listitem>
7235     <listitem><para>Make pgbench honor environment variables <envar>PGHOST</>, <envar>PGPORT</>, <envar>PGUSER</> (Tatsuo)</para></listitem>
7236     <listitem><para>Improve intarray (Teodor Sigaev)</para></listitem>
7237     <listitem><para>Improve pgstattuple (Rod)</para></listitem>
7238     <listitem><para>Fix bug in <function>metaphone()</function> in fuzzystrmatch</para></listitem>
7239     <listitem><para>Improve adddepend (Rod)</para></listitem>
7240     <listitem><para>Update spi/timetravel (Böjthe Zoltán)</para></listitem>
7241     <listitem><para>Fix dbase <option>-s</> option and improve non-ASCII handling (Thomas Behr, Márcio Smiderle)</para></listitem>
7242     <listitem><para>Remove array module because features now included by default (Joe)</para></listitem>
7243    </itemizedlist>
7244   </sect3>
7245   </sect2>
7246  </sect1>
7247
7248   <sect1 id="release-7-3-10">
7249    <title>Release 7.3.10</title>
7250
7251    <note>
7252    <title>Release date</title>
7253    <simpara>2005-05-09</simpara>
7254    </note>
7255
7256    <para>
7257     This release contains a variety of fixes from 7.3.9, including several
7258     security-related issues.
7259    </para>
7260
7261    <sect2>
7262     <title>Migration to version 7.3.10</title>
7263
7264     <para>
7265      A dump/restore is not required for those running 7.3.X.  However,
7266      it is one possible way of handling a significant security problem
7267      that has been found in the initial contents of 7.3.X system
7268      catalogs.  A dump/initdb/reload sequence using 7.3.10's initdb will
7269      automatically correct this problem.
7270     </para>
7271
7272     <para>
7273      The security problem is that the built-in character set encoding
7274      conversion functions can be invoked from SQL commands by unprivileged
7275      users, but the functions were not designed for such use and are not
7276      secure against malicious choices of arguments.  The fix involves changing
7277      the declared parameter list of these functions so that they can no longer
7278      be invoked from SQL commands.  (This does not affect their normal use
7279      by the encoding conversion machinery.)
7280      It is strongly recommended that all installations repair this error,
7281      either by initdb or by following the manual repair procedure given
7282      below.  The error at least allows unprivileged database users to crash
7283      their server process, and may allow unprivileged users to gain the
7284      privileges of a database superuser.
7285     </para>
7286
7287     <para>
7288      If you wish not to do an initdb, perform the following procedure instead.
7289      As the database superuser, do:
7290
7291 <programlisting>
7292 BEGIN;
7293 UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
7294 WHERE pronamespace = 11 AND pronargs = 5
7295       AND proargtypes[2] = 'cstring'::regtype;
7296 -- The command should report having updated 90 rows;
7297 -- if not, rollback and investigate instead of committing!
7298 COMMIT;
7299 </programlisting>
7300     </para>
7301
7302     <para>
7303      The above procedure must be carried out in <emphasis>each</> database
7304      of an installation, including <literal>template1</>, and ideally
7305      including <literal>template0</> as well.  If you do not fix the
7306      template databases then any subsequently created databases will contain
7307      the same error.  <literal>template1</> can be fixed in the same way
7308      as any other database, but fixing <literal>template0</> requires
7309      additional steps.  First, from any database issue
7310 <programlisting>
7311 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
7312 </programlisting>
7313       Next connect to <literal>template0</> and perform the above repair
7314       procedure.  Finally, do
7315 <programlisting>
7316 -- re-freeze template0:
7317 VACUUM FREEZE;
7318 -- and protect it against future alterations:
7319 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
7320 </programlisting>
7321     </para>
7322    </sect2>
7323
7324    <sect2>
7325     <title>Changes</title>
7326
7327 <itemizedlist>
7328 <listitem><para>Change encoding function signature to prevent
7329 misuse</para></listitem>
7330 <listitem><para>Repair ancient race condition that allowed a transaction to be
7331 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
7332 than for other purposes</para>
7333 <para>This is an extremely serious bug since it could lead to apparent
7334 data inconsistencies being briefly visible to applications.</para></listitem>
7335 <listitem><para>Repair race condition between relation extension and
7336 VACUUM</para>
7337 <para>This could theoretically have caused loss of a page's worth of
7338 freshly-inserted data, although the scenario seems of very low probability.
7339 There are no known cases of it having caused more than an Assert failure.
7340 </para></listitem>
7341 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
7342 <para>
7343 The comparison code was wrong in the case where the
7344 <literal>--enable-integer-datetimes</> configuration switch had been used.
7345 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
7346 it will need to be <command>REINDEX</>ed after installing this update, because
7347 the fix corrects the sort order of column values.
7348 </para></listitem>
7349 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
7350 <type>TIME WITH TIME ZONE</> values</para></listitem>
7351 <listitem><para>Fix mis-display of negative fractional seconds in
7352 <type>INTERVAL</> values</para>
7353 <para>
7354 This error only occurred when the
7355 <literal>--enable-integer-datetimes</> configuration switch had been used.
7356 </para></listitem>
7357 <listitem><para>Additional buffer overrun checks in plpgsql
7358 (Neil)</para></listitem>
7359 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
7360 correctly (Neil)</para></listitem>
7361 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
7362 month-related formats</para></listitem>
7363 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
7364 (Marko Kreen)</para></listitem>
7365 <listitem><para>Still more 64-bit fixes for
7366 <filename>contrib/intagg</></para></listitem>
7367 <listitem><para>Prevent incorrect optimization of functions returning
7368 <type>RECORD</></para></listitem>
7369 </itemizedlist>
7370
7371   </sect2>
7372  </sect1>
7373
7374   <sect1 id="release-7-3-9">
7375    <title>Release 7.3.9</title>
7376
7377    <note>
7378    <title>Release date</title>
7379    <simpara>2005-01-31</simpara>
7380    </note>
7381
7382    <para>
7383     This release contains a variety of fixes from 7.3.8, including several
7384     security-related issues.
7385    </para>
7386
7387    <sect2>
7388     <title>Migration to version 7.3.9</title>
7389
7390     <para>
7391      A dump/restore is not required for those running 7.3.X.
7392     </para>
7393    </sect2>
7394
7395    <sect2>
7396     <title>Changes</title>
7397
7398 <itemizedlist>
7399 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
7400 <para>
7401 On platforms that will automatically execute initialization functions of a
7402 shared library (this includes at least Windows and ELF-based Unixen),
7403 <command>LOAD</> can be used to make the server execute arbitrary code.
7404 Thanks to NGS Software for reporting this.</para></listitem>
7405 <listitem><para>Check that creator of an aggregate function has the right to
7406 execute the specified transition functions</para>
7407 <para>
7408 This oversight made it possible to bypass denial of EXECUTE
7409 permission on a function.</para></listitem>
7410 <listitem><para>Fix security and 64-bit issues in
7411 contrib/intagg</para></listitem>
7412 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
7413 Jurka)</para></listitem>
7414 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
7415 many parameters (Neil)</para></listitem>
7416 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
7417 <para>
7418 The result of the join was mistakenly supposed to be sorted the same as the
7419 left input.  This could not only deliver mis-sorted output to the user, but
7420 in case of nested merge joins could give outright wrong answers.
7421 </para></listitem>
7422 <listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
7423 <listitem><para>Fix display of negative intervals in SQL and GERMAN
7424 datestyles</para></listitem>
7425 </itemizedlist>
7426
7427   </sect2>
7428  </sect1>
7429
7430   <sect1 id="release-7-3-8">
7431    <title>Release 7.3.8</title>
7432
7433    <note>
7434    <title>Release date</title>
7435    <simpara>2004-10-22</simpara>
7436    </note>
7437
7438    <para>
7439     This release contains a variety of fixes from 7.3.7.
7440    </para>
7441
7442
7443    <sect2>
7444     <title>Migration to version 7.3.8</title>
7445
7446     <para>
7447      A dump/restore is not required for those running 7.3.X.
7448     </para>
7449    </sect2>
7450
7451    <sect2>
7452     <title>Changes</title>
7453
7454 <itemizedlist>
7455 <listitem><para>Repair possible failure to update hint bits on disk</para>
7456 <para>
7457 Under rare circumstances this oversight could lead to 
7458 <quote>could not access transaction status</> failures, which qualifies
7459 it as a potential-data-loss bug.
7460 </para></listitem>
7461 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
7462 <para>
7463 Very large left joins using a hash join plan could fail to output unmatched
7464 left-side rows given just the right data distribution.
7465 </para></listitem>
7466 <listitem><para>Disallow running pg_ctl as root</para>
7467 <para>
7468 This is to guard against any possible security issues.
7469 </para></listitem>
7470 <listitem><para>Avoid using temp files in /tmp in make_oidjoins_check</para>
7471 <para>
7472 This has been reported as a security issue, though it's hardly worthy of
7473 concern since there is no reason for non-developers to use this script anyway.
7474 </para></listitem>
7475 </itemizedlist>
7476
7477   </sect2>
7478  </sect1>
7479
7480   <sect1 id="release-7-3-7">
7481    <title>Release 7.3.7</title>
7482
7483    <note>
7484    <title>Release date</title>
7485    <simpara>2004-08-16</simpara>
7486    </note>
7487
7488    <para>
7489     This release contains one critical fix over 7.3.6, and some minor items.
7490    </para>
7491
7492
7493    <sect2>
7494     <title>Migration to version 7.3.7</title>
7495
7496     <para>
7497      A dump/restore is not required for those running 7.3.X.
7498     </para>
7499    </sect2>
7500
7501    <sect2>
7502     <title>Changes</title>
7503
7504 <itemizedlist>
7505 <listitem><para>Prevent possible loss of committed transactions during crash</para>
7506 <para>
7507 Due to insufficient interlocking between transaction commit and checkpointing,
7508 it was possible for transactions committed just before the most recent
7509 checkpoint to be lost, in whole or in part, following a database crash and
7510 restart.  This is a serious bug that has existed
7511 since <productname>PostgreSQL</productname> 7.1.
7512 </para></listitem>
7513 <listitem><para>Remove asymmetrical word processing in tsearch (Teodor)</para></listitem>
7514 <listitem><para>Properly schema-qualify function names when pg_dump'ing a CAST</para></listitem>
7515 </itemizedlist>
7516
7517   </sect2>
7518  </sect1>
7519
7520   <sect1 id="release-7-3-6">
7521    <title>Release 7.3.6</title>
7522
7523    <note>
7524    <title>Release date</title>
7525    <simpara>2004-03-02</simpara>
7526    </note>
7527
7528    <para>
7529     This release contains a variety of fixes from 7.3.5.
7530    </para>
7531
7532
7533    <sect2>
7534     <title>Migration to version 7.3.6</title>
7535
7536     <para>
7537      A dump/restore is <emphasis>not</emphasis> required for those
7538      running 7.3.*.
7539     </para>
7540
7541    </sect2>
7542
7543    <sect2>
7544     <title>Changes</title>
7545
7546 <itemizedlist>
7547 <listitem><para>Revert erroneous changes in rule permissions checking</para>
7548 <para>A patch applied in 7.3.3 to fix a corner case in rule permissions checks
7549 turns out to have disabled rule-related permissions checks in many
7550 not-so-corner cases.  This would for example allow users to insert into views
7551 they weren't supposed to have permission to insert into.  We have therefore
7552 reverted the 7.3.3 patch.  The original bug will be fixed in 8.0.
7553 </para></listitem>
7554 <listitem><para>Repair incorrect order of operations in
7555 GetNewTransactionId()</para>
7556 <para>
7557 This bug could result in failure under out-of-disk-space conditions, including
7558 inability to restart even after disk space is freed.
7559 </para></listitem>
7560 <listitem><para>Ensure configure selects -fno-strict-aliasing even when
7561 an external value for CFLAGS is supplied</para>
7562 <para>
7563 On some platforms, building with -fstrict-aliasing causes bugs.
7564 </para></listitem>
7565 <listitem><para>Make pg_restore handle 64-bit off_t correctly</para>
7566 <para>
7567 This bug prevented proper restoration from archive files exceeding 4Gb.
7568 </para></listitem>
7569 <listitem><para>Make contrib/dblink not assume that local and remote type OIDs
7570 match (Joe)</para></listitem>
7571 <listitem><para>Quote connectby()'s start_with argument properly (Joe)</para></listitem>
7572 <listitem><para>Don't crash when a rowtype argument to a plpgsql function is
7573 NULL</para></listitem>
7574 <listitem><para>Avoid generating invalid character encoding sequences in
7575 corner cases when planning LIKE operations</para></listitem>
7576 <listitem><para>Ensure text_position() cannot scan past end of source string
7577 in multibyte cases (Korea PostgreSQL Users' Group)</para></listitem>
7578 <listitem><para>Fix index optimization and selectivity estimates for LIKE
7579 operations on bytea columns (Joe)</para></listitem>
7580 </itemizedlist>
7581
7582   </sect2>
7583  </sect1>
7584
7585   <sect1 id="release-7-3-5">
7586    <title>Release 7.3.5</title>
7587
7588    <note>
7589    <title>Release date</title>
7590    <simpara>2003-12-03</simpara>
7591    </note>
7592
7593    <para>
7594     This has a variety of fixes from 7.3.4.
7595    </para>
7596
7597
7598    <sect2>
7599     <title>Migration to version 7.3.5</title>
7600
7601     <para>
7602      A dump/restore is <emphasis>not</emphasis> required for those
7603      running 7.3.*.
7604     </para>
7605    </sect2>
7606
7607    <sect2>
7608     <title>Changes</title>
7609
7610 <itemizedlist>
7611 <listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
7612 <listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
7613 <listitem><para>Force stats processes to detach from shared memory, ensuring cleaner shutdown</para></listitem>
7614 <listitem><para>Make PQescapeBytea and byteaout consistent with each other (Joe)</para></listitem>
7615 <listitem><para>Added missing SPI_finish() calls to dblink's get_tuple_of_interest() (Joe)</para></listitem>
7616 <listitem><para>Fix for possible foreign key violation when rule rewrites INSERT (Jan)</para></listitem>
7617 <listitem><para>Support qualified type names in PL/Tcl's spi_prepare command (Jan)</para></listitem>
7618 <listitem><para>Make pg_dump handle a procedural language handler located in pg_catalog</para></listitem>
7619 <listitem><para>Make pg_dump handle cases where a custom opclass is in another schema</para></listitem>
7620 <listitem><para>Make pg_dump dump binary-compatible casts correctly (Jan)</para></listitem>
7621 <listitem><para>Fix insertion of expressions containing subqueries into rule bodies</para></listitem>
7622 <listitem><para>Fix incorrect argument processing in clusterdb script (Anand Ranganathan)</para></listitem>
7623 <listitem><para>Fix problems with dropped columns in plpython triggers</para></listitem>
7624 <listitem><para>Repair problems with to_char() reading past end of its input string (Karel)</para></listitem>
7625 <listitem><para>Fix GB18030 mapping errors (Tatsuo)</para></listitem>
7626 <listitem><para>Fix several problems with SSL error handling and asynchronous SSL I/O</para></listitem>
7627 <listitem><para>Remove ability to bind a list of values to a single parameter in JDBC
7628 (prevents possible SQL-injection attacks)</para></listitem>
7629 <listitem><para>Fix some errors in HAVE_INT64_TIMESTAMP code paths</para></listitem>
7630 <listitem><para>Fix corner case for btree search in parallel with first root page split</para></listitem>
7631 </itemizedlist>
7632
7633   </sect2>
7634  </sect1>
7635
7636   <sect1 id="release-7-3-4">
7637    <title>Release 7.3.4</title>
7638
7639    <note>
7640    <title>Release date</title>
7641    <simpara>2003-07-24</simpara>
7642    </note>
7643
7644    <para>
7645     This has a variety of fixes from 7.3.3.
7646    </para>
7647
7648
7649    <sect2>
7650     <title>Migration to version 7.3.4</title>
7651
7652     <para>
7653      A dump/restore is <emphasis>not</emphasis> required for those
7654      running 7.3.*.
7655     </para>
7656    </sect2>
7657
7658    <sect2>
7659     <title>Changes</title>
7660
7661 <itemizedlist>
7662 <listitem><para>Repair breakage in timestamp-to-date conversion for dates before 2000</para></listitem>
7663 <listitem><para>Prevent rare possibility of server startup failure (Tom)</para></listitem>
7664 <listitem><para>Fix bugs in interval-to-time conversion (Tom)</para></listitem>
7665 <listitem><para>Add constraint names in a few places in pg_dump (Rod)</para></listitem>
7666 <listitem><para>Improve performance of functions with many parameters (Tom)</para></listitem>
7667 <listitem><para>Fix to_ascii() buffer overruns (Tom)</para></listitem>
7668 <listitem><para>Prevent restore of database comments from throwing an error (Tom)</para></listitem>
7669 <listitem><para>Work around buggy strxfrm() present in some Solaris releases (Tom)</para></listitem>
7670 <listitem><para>Properly escape jdbc setObject() strings to improve security (Barry)</para></listitem>
7671 </itemizedlist>
7672    </sect2>
7673   </sect1>
7674
7675
7676  <sect1 id="release-7-3-3">
7677   <title>Release 7.3.3</title>
7678
7679   <note>
7680    <title>Release date</title>
7681    <simpara>2003-05-22</simpara>
7682   </note>
7683
7684   <para>
7685    This release contains a variety of fixes for version 7.3.2.
7686   </para>
7687
7688   <sect2>
7689    <title>Migration to version 7.3.3</title>
7690
7691    <para>
7692     A dump/restore is <emphasis>not</emphasis> required for those
7693     running version 7.3.*.
7694    </para>
7695   </sect2>
7696
7697   <sect2>
7698    <title>Changes</title>
7699
7700 <itemizedlist>
7701 <listitem><para>Repair sometimes-incorrect computation of StartUpID after a crash</para></listitem>
7702 <listitem><para>Avoid slowness with lots of deferred triggers in one transaction (Stephan)</para></listitem>
7703 <listitem><para>Don't lock referenced row when <command>UPDATE</command> doesn't change foreign key's value (Jan)</para></listitem>
7704 <listitem><para>Use <command>-fPIC</command> not <command>-fpic</command> on Sparc (Tom Callaway)</para></listitem>
7705 <listitem><para>Repair lack of schema-awareness in contrib/reindexdb</para></listitem>
7706 <listitem><para>Fix contrib/intarray error for zero-element result array (Teodor)</para></listitem>
7707 <listitem><para>Ensure createuser script will exit on control-C (Oliver)</para></listitem>
7708 <listitem><para>Fix errors when the type of a dropped column has itself been dropped</para></listitem>
7709 <listitem><para><command>CHECKPOINT</command> does not cause database panic on failure in noncritical steps</para></listitem>
7710 <listitem><para>Accept 60 in seconds fields of timestamp, time, interval input values</para></listitem>
7711 <listitem><para>Issue notice, not error, if <type>TIMESTAMP</type>,
7712 <type> TIME</type>, or <type>INTERVAL</type> precision too large</para></listitem>
7713 <listitem><para>Fix <function>abstime-to-time</function> cast function (fix is
7714        not applied unless you <application>initdb</application>)</para></listitem>
7715 <listitem><para>Fix <application>pg_proc</application> entry for
7716       <type>timestampt_izone</type> (fix is not applied unless you
7717         <application>initdb</application>)</para></listitem>
7718 <listitem><para>Make <function>EXTRACT(EPOCH FROM timestamp without time zone)</function> treat input as local time</para></listitem>
7719 <listitem><para><command>'now'::timestamptz</command> gave wrong answer if timezone changed earlier in transaction</para></listitem>
7720 <listitem><para><envar>HAVE_INT64_TIMESTAMP</envar> code for time with timezone overwrote its input</para></listitem>
7721 <listitem><para>Accept <command>GLOBAL TEMP/TEMPORARY</command> as a
7722        synonym for <command>TEMPORARY</command></para></listitem>
7723 <listitem><para>Avoid improper schema-privilege-check failure in foreign-key triggers</para></listitem>
7724 <listitem><para>Fix bugs in foreign-key triggers for <command>SET DEFAULT</command> action</para></listitem>
7725 <listitem><para>Fix incorrect time-qual check in row fetch for
7726        <command>UPDATE</command> and <command>DELETE</command> triggers</para></listitem>
7727 <listitem><para>Foreign-key clauses were parsed but ignored in
7728        <command>ALTER TABLE ADD COLUMN</command></para></listitem>
7729 <listitem><para>Fix createlang script breakage for case where handler function already exists</para></listitem>
7730 <listitem><para>Fix misbehavior on zero-column tables in <application>pg_dump</application>, COPY, ANALYZE, other places</para></listitem>
7731 <listitem><para>Fix misbehavior of <function>func_error()</function> on type names containing '%'</para></listitem>
7732 <listitem><para>Fix misbehavior of <function>replace()</function> on strings containing '%'</para></listitem>
7733 <listitem><para>Regular-expression patterns containing certain multibyte characters failed</para></listitem>
7734 <listitem><para>Account correctly for <command>NULL</command>s in more cases in join size estimation</para></listitem>
7735 <listitem><para>Avoid conflict with system definition of <function>isblank()</function> function or macro</para></listitem>
7736 <listitem><para>Fix failure to convert large code point values in EUC_TW conversions (Tatsuo)</para></listitem>
7737 <listitem><para>Fix error recovery for <function>SSL_read</function>/<function>SSL_write</function> calls</para></listitem>
7738 <listitem><para>Don't do early constant-folding of type coercion expressions</para></listitem>
7739 <listitem><para>Validate page header fields immediately after reading in any page</para></listitem>
7740 <listitem><para>Repair incorrect check for ungrouped variables in unnamed joins</para></listitem>
7741 <listitem><para>Fix buffer overrun in <function>to_ascii</function> (Guido Notari)</para></listitem>
7742 <listitem><para>contrib/ltree fixes (Teodor)</para></listitem>
7743 <listitem><para>Fix core dump in deadlock detection on machines where char is unsigned</para></listitem>
7744 <listitem><para>Avoid running out of buffers in many-way indexscan (bug introduced in 7.3)</para></listitem>
7745 <listitem><para>Fix planner's selectivity estimation functions to handle domains properly</para></listitem>
7746 <listitem><para>Fix <application>dbmirror</application> memory-allocation bug (Steven Singer)</para></listitem>
7747 <listitem><para>Prevent infinite loop in <function>ln(numeric)</function> due to roundoff error</para></listitem>
7748 <listitem><para><command>GROUP BY</command> got confused if there were multiple equal GROUP BY items</para></listitem>
7749 <listitem><para>Fix bad plan when inherited <command>UPDATE</command>/<command>DELETE</command> references another inherited table</para></listitem>
7750 <listitem><para>Prevent clustering on incomplete (partial or non-NULL-storing) indexes</para></listitem>
7751 <listitem><para>Service shutdown request at proper time if it arrives while still starting up</para></listitem>
7752 <listitem><para>Fix left-links in temporary indexes (could make backwards scans miss entries)</para></listitem>
7753 <listitem><para>Fix incorrect handling of client_encoding setting in postgresql.conf (Tatsuo)</para></listitem>
7754 <listitem><para>Fix failure to respond to <command>pg_ctl stop -m fast</command> after Async_NotifyHandler runs</para></listitem>
7755 <listitem><para>Fix SPI for case where rule contains multiple statements of the same type</para></listitem>
7756 <listitem><para>Fix problem with checking for wrong type of access privilege in rule query</para></listitem>
7757 <listitem><para>Fix problem with <command>EXCEPT</command> in <command>CREATE RULE</command></para></listitem>
7758 <listitem><para>Prevent problem with dropping temp tables having serial columns</para></listitem>
7759 <listitem><para>Fix replace_vars_with_subplan_refs failure in complex views</para></listitem>
7760 <listitem><para>Fix regexp slowness in single-byte encodings (Tatsuo)</para></listitem>
7761 <listitem><para>Allow qualified type names in <command>CREATE CAST</command>
7762        and <command> DROP CAST</command></para></listitem>
7763 <listitem><para>Accept <function>SETOF type[]</function>, which formerly had to
7764        be written <function>SETOF _type</function></para></listitem>
7765 <listitem><para>Fix <application>pg_dump</application> core dump in some cases with procedural languages</para></listitem>
7766 <listitem><para>Force ISO datestyle in <application>pg_dump</application> output, for portability (Oliver)</para></listitem>
7767 <listitem><para><application>pg_dump</application> failed to handle error return
7768        from <function>lo_read</function> (Oleg Drokin)</para></listitem>
7769 <listitem><para><application>pg_dumpall</application> failed with groups having no members (Nick Eskelinen)</para></listitem>
7770 <listitem><para><application>pg_dumpall</application> failed to recognize --globals-only switch</para></listitem>
7771 <listitem><para>pg_restore failed to restore blobs if -X disable-triggers is specified</para></listitem>
7772 <listitem><para>Repair intrafunction memory leak in plpgsql</para></listitem>
7773 <listitem><para>pltcl's <command>elog</command> command dumped core if given wrong parameters (Ian Harding)</para></listitem>
7774 <listitem><para>plpython used wrong value of <envar>atttypmod</envar> (Brad McLean)</para></listitem>
7775 <listitem><para>Fix improper quoting of boolean values in Python interface (D'Arcy)</para></listitem>
7776 <listitem><para>Added <function>addDataType()</function> method to PGConnection interface for JDBC</para></listitem>
7777 <listitem><para>Fixed various problems with updateable ResultSets for JDBC (Shawn Green)</para></listitem>
7778 <listitem><para>Fixed various problems with DatabaseMetaData for JDBC (Kris Jurka, Peter Royal)</para></listitem>
7779 <listitem><para>Fixed problem with parsing table ACLs in JDBC</para></listitem>
7780 <listitem><para>Better error message for character set conversion problems in JDBC</para></listitem>
7781 </itemizedlist>
7782   </sect2>
7783  </sect1>
7784
7785
7786  <sect1 id="release-7-3-2">
7787   <title>Release 7.3.2</title>
7788
7789   <note>
7790    <title>Release date</title>
7791    <simpara>2003-02-04</simpara>
7792   </note>
7793
7794   <para>
7795    This release contains a variety of fixes for version 7.3.1.
7796   </para>
7797
7798
7799   <sect2>
7800    <title>Migration to version 7.3.2</title>
7801
7802    <para>
7803     A dump/restore is <emphasis>not</emphasis> required for those
7804     running version 7.3.*.
7805    </para>
7806   </sect2>
7807
7808   <sect2>
7809    <title>Changes</title>
7810
7811 <itemizedlist>
7812 <listitem><para>Restore creation of OID column in CREATE TABLE AS / SELECT INTO</para></listitem>
7813 <listitem><para>Fix <application>pg_dump</> core dump when dumping views having comments</para></listitem>
7814 <listitem><para>Dump DEFERRABLE/INITIALLY DEFERRED constraints properly</para></listitem>
7815 <listitem><para>Fix UPDATE when child table's column numbering differs from parent</para></listitem>
7816 <listitem><para>Increase default value of max_fsm_relations</para></listitem>
7817 <listitem><para>Fix problem when fetching backwards in a cursor for a single-row query</para></listitem>
7818 <listitem><para>Make backward fetch work properly with cursor on SELECT DISTINCT query</para></listitem>
7819 <listitem><para>Fix problems with loading <application>pg_dump</> files containing contrib/lo usage</para></listitem>
7820 <listitem><para>Fix problem with all-numeric user names</para></listitem>
7821 <listitem><para>Fix possible memory leak and core dump during disconnect in libpgtcl</para></listitem>
7822 <listitem><para>Make plpython's spi_execute command handle nulls properly (Andrew Bosma)</para></listitem>
7823 <listitem><para>Adjust plpython error reporting so that its regression test passes again</para></listitem>
7824 <listitem><para>Work with bison 1.875</para></listitem>
7825 <listitem><para>Handle mixed-case names properly in plpgsql's %type (Neil)</para></listitem>
7826 <listitem><para>Fix core dump in pltcl when executing a query rewritten by a rule</para></listitem>
7827 <listitem><para>Repair array subscript overruns (per report from Yichen Xie)</para></listitem>
7828 <listitem><para>Reduce MAX_TIME_PRECISION from 13 to 10 in floating-point case</para></listitem>
7829 <listitem><para>Correctly case-fold variable names in per-database and per-user settings</para></listitem>
7830 <listitem><para>Fix coredump in plpgsql's RETURN NEXT when SELECT into record returns no rows</para></listitem>
7831 <listitem><para>Fix outdated use of pg_type.typprtlen in python client interface</para></listitem>
7832 <listitem><para>Correctly handle fractional seconds in timestamps in JDBC driver</para></listitem>
7833 <listitem><para>Improve performance of getImportedKeys() in JDBC</para></listitem>
7834 <listitem><para>Make shared-library symlinks work standardly on HPUX (Giles)</para></listitem>
7835 <listitem><para>Repair inconsistent rounding behavior for timestamp, time, interval</para></listitem>
7836 <listitem><para>SSL negotiation fixes (Nathan Mueller)</para></listitem>
7837 <listitem><para>Make libpq's ~/.pgpass feature work when connecting with PQconnectDB</para></listitem>
7838 <listitem><para>Update my2pg, ora2pg</para></listitem>
7839 <listitem><para>Translation updates</para></listitem>
7840 <listitem><para>Add casts between types lo and oid in contrib/lo</para></listitem>
7841 <listitem><para>fastpath code now checks for privilege to call function</para></listitem>
7842 </itemizedlist>
7843   </sect2>
7844  </sect1>
7845
7846
7847  <sect1 id="release-7-3-1">
7848   <title>Release 7.3.1</title>
7849
7850   <note>
7851    <title>Release date</title>
7852    <simpara>2002-12-18</simpara>
7853   </note>
7854
7855   <para>
7856    This release contains a variety of fixes for version 7.3.
7857   </para>
7858
7859
7860   <sect2>
7861    <title>Migration to version 7.3.1</title>
7862
7863    <para>
7864     A dump/restore is <emphasis>not</emphasis> required for those
7865     running version 7.3. However, it should be noted that the main
7866     <productname>PostgreSQL</productname> interface library, libpq,
7867     has a new major version number for this release, which may require
7868     recompilation of client code in certain cases.
7869    </para>
7870   </sect2>
7871
7872   <sect2>
7873    <title>Changes</title>
7874
7875 <itemizedlist>
7876 <listitem><para>Fix a core dump of COPY TO when client/server encodings don't match (Tom)</para></listitem>
7877 <listitem><para>Allow <application>pg_dump</> to work with pre-7.2 servers (Philip)</para></listitem>
7878 <listitem><para>contrib/adddepend fixes (Tom)</para></listitem>
7879 <listitem><para>Fix problem with deletion of per-user/per-database config settings (Tom)</para></listitem>
7880 <listitem><para>contrib/vacuumlo fix (Tom)</para></listitem>
7881 <listitem><para>Allow 'password' encryption even when pg_shadow contains MD5 passwords (Bruce)</para></listitem>
7882 <listitem><para>contrib/dbmirror fix (Steven Singer)</para></listitem>
7883 <listitem><para>Optimizer fixes (Tom)</para></listitem>
7884 <listitem><para>contrib/tsearch fixes (Teodor Sigaev, Magnus)</para></listitem>
7885 <listitem><para>Allow locale names to be mixed case (Nicolai Tufar)</para></listitem>
7886 <listitem><para>Increment libpq library's major version number (Bruce)</para></listitem>
7887 <listitem><para>pg_hba.conf error reporting fixes (Bruce, Neil)</para></listitem>
7888 <listitem><para>Add SCO Openserver 5.0.4 as a supported platform (Bruce)</para></listitem>
7889 <listitem><para>Prevent EXPLAIN from crashing server (Tom)</para></listitem>
7890 <listitem><para>SSL fixes (Nathan Mueller)</para></listitem>
7891 <listitem><para>Prevent composite column creation via ALTER TABLE (Tom)</para></listitem>
7892 </itemizedlist>
7893   </sect2>
7894  </sect1>
7895   
7896   
7897  <sect1 id="release-7-3">
7898   <title>Release 7.3</title>
7899
7900   <note>
7901    <title>Release date</title>
7902    <simpara>2002-11-27</simpara>
7903   </note>
7904
7905   <sect2>
7906    <title>Overview</title>
7907
7908    <para>
7909     Major changes in this release:
7910    </para>
7911
7912    <variablelist>
7913     <varlistentry>
7914      <term>Schemas</term>
7915      <listitem>
7916       <para>
7917        Schemas allow users to create objects in separate namespaces,
7918        so two people or applications can have tables with the same
7919        name. There is also a public schema for shared tables.
7920        Table/index creation can be restricted by removing privileges
7921        on the public schema.
7922       </para>
7923      </listitem>
7924     </varlistentry>
7925
7926     <varlistentry>
7927      <term>Drop Column</term>
7928      <listitem>
7929       <para>
7930        <productname>PostgreSQL</productname> now supports the
7931        <literal>ALTER TABLE ... DROP COLUMN</literal> functionality.
7932       </para>
7933      </listitem>
7934     </varlistentry>
7935
7936     <varlistentry>
7937      <term>Table Functions</term>
7938      <listitem>
7939       <para>
7940        Functions returning multiple rows and/or multiple columns are
7941        now much easier to use than before.  You can call such a
7942        <quote>table function</quote> in the <literal>SELECT</literal>
7943        <literal>FROM</literal> clause, treating its output like a
7944        table. Also, <application>PL/pgSQL</application> functions can
7945        now return sets.
7946       </para>
7947      </listitem>
7948     </varlistentry>
7949
7950     <varlistentry>
7951      <term>Prepared Queries</term>
7952      <listitem>
7953       <para>
7954        <productname>PostgreSQL</productname> now supports prepared
7955        queries, for improved performance.
7956       </para>
7957      </listitem>
7958     </varlistentry>
7959
7960     <varlistentry>
7961      <term>Dependency Tracking</term>
7962      <listitem>
7963       <para>
7964        <productname>PostgreSQL</productname> now records object
7965        dependencies, which allows improvements in many areas.
7966        <command>DROP</command> statements now take either
7967        <literal>CASCADE</> or <literal>RESTRICT</> to control whether
7968        dependent objects are also dropped.
7969       </para>
7970      </listitem>
7971     </varlistentry>
7972
7973     <varlistentry>
7974      <term>Privileges</term>
7975      <listitem>
7976       <para>
7977        Functions and procedural languages now have privileges, and
7978        functions can be defined to run with the privileges of their
7979        creator.
7980       </para>
7981      </listitem>
7982     </varlistentry>
7983
7984     <varlistentry>
7985      <term>Internationalization</term>
7986      <listitem>
7987       <para>
7988        Both multibyte and locale support are now always enabled.
7989       </para>
7990      </listitem>
7991     </varlistentry>
7992
7993     <varlistentry>
7994      <term>Logging</term>
7995      <listitem>
7996       <para>
7997        A variety of logging options have been enhanced.
7998       </para>
7999      </listitem>
8000     </varlistentry>
8001
8002     <varlistentry>
8003      <term>Interfaces</term>
8004      <listitem>
8005       <para>
8006        A large number of interfaces have been moved to <ulink
8007        url="http://gborg.postgresql.org">http://gborg.postgresql.org</>
8008        where they can be developed and released independently.
8009       </para>
8010      </listitem>
8011     </varlistentry>
8012
8013     <varlistentry>
8014      <term>Functions/Identifiers</term>
8015      <listitem>
8016       <para>
8017        By default, functions can now take up to 32 parameters, and
8018        identifiers can be up to 63 bytes long.  Also, <literal>OPAQUE</>
8019        is now deprecated: there are specific <quote>pseudo-datatypes</>
8020        to represent each of the former meanings of <literal>OPAQUE</>
8021        in function argument and result types.
8022       </para>
8023      </listitem>
8024     </varlistentry>
8025
8026    </variablelist>
8027   </sect2>
8028
8029   <sect2>
8030    <title>Migration to version 7.3</title>
8031
8032    <para>
8033     A dump/restore using <application>pg_dump</> is required for those
8034     wishing to migrate data from any previous release. If your
8035     application examines the system catalogs, additional changes will
8036     be required due to the introduction of schemas in 7.3; for more
8037     information, see: <ulink
8038     url="http://developer.postgresql.org/~momjian/upgrade_tips_7.3"></>.
8039    </para>
8040
8041    <para>
8042     Observe the following incompatibilities:
8043    </para>
8044
8045    <itemizedlist>
8046     <listitem>
8047      <para>
8048       Pre-6.3 clients are no longer supported.
8049      </para>
8050     </listitem>
8051
8052     <listitem>
8053      <para>
8054       <filename>pg_hba.conf</filename> now has a column for the user
8055       name and additional features.  Existing files need to be
8056       adjusted.
8057      </para>
8058     </listitem>
8059
8060     <listitem>
8061      <para>
8062       Several <filename>postgresql.conf</filename> logging parameters
8063       have been renamed.
8064      </para>
8065     </listitem>
8066
8067     <listitem>
8068      <para>
8069       <literal>LIMIT #,#</literal> has been disabled; use
8070       <literal>LIMIT # OFFSET #</literal>.
8071      </para>
8072     </listitem>
8073
8074     <listitem>
8075      <para>
8076       <command>INSERT</command> statements with column lists must
8077       specify a value for each specified column. For example,
8078       <literal>INSERT INTO tab (col1, col2) VALUES ('val1')</literal>
8079       is now invalid.  It's still allowed to supply fewer columns than
8080       expected if the <command>INSERT</command> does not have a column list.
8081      </para>
8082     </listitem>
8083
8084     <listitem>
8085      <para>
8086       <type>serial</type> columns are no longer automatically
8087       <literal>UNIQUE</>; thus, an index will not automatically be
8088       created.
8089      </para>
8090     </listitem>
8091
8092     <listitem>
8093      <para>
8094       A <command>SET</command> command inside an aborted transaction
8095       is now rolled back.
8096      </para>
8097     </listitem>
8098
8099     <listitem>
8100      <para>
8101       <command>COPY</command> no longer considers missing trailing
8102       columns to be null.  All columns need to be specified.
8103       (However, one may achieve a similar effect by specifying a
8104       column list in the <command>COPY</command> command.)
8105      </para>
8106     </listitem>
8107
8108     <listitem>
8109      <para>
8110       The data type <type>timestamp</type> is now equivalent to
8111       <type>timestamp without time zone</type>, instead of
8112       <type>timestamp with time zone</type>.
8113      </para>
8114     </listitem>
8115
8116     <listitem>
8117      <para>
8118       Pre-7.3 databases loaded into 7.3 will not have the new object
8119       dependencies for <type>serial</type> columns, unique
8120       constraints, and foreign keys. See the directory
8121       <filename>contrib/adddepend/</filename> for a detailed
8122       description and a script that will add such dependencies.
8123      </para>
8124     </listitem>
8125
8126     <listitem>
8127      <para>
8128       An empty string (<literal>''</literal>) is no longer allowed as
8129       the input into an integer field.  Formerly, it was silently
8130       interpreted as 0.
8131      </para>
8132     </listitem>
8133
8134    </itemizedlist>
8135   </sect2>
8136
8137   <sect2>
8138    <title>Changes</title>
8139
8140    <sect3>
8141     <title>Server Operation</title>
8142 <itemizedlist>
8143 <listitem><para>Add pg_locks view to show locks (Neil)</para></listitem>
8144 <listitem><para>Security fixes for password negotiation memory allocation (Neil)</para></listitem>
8145 <listitem><para>Remove support for version 0 FE/BE protocol (<productname>PostgreSQL</productname> 6.2 and earlier) (Tom)</para></listitem>
8146 <listitem><para>Reserve the last few backend slots for superusers, add parameter superuser_reserved_connections to control this (Nigel J. Andrews)</para></listitem>
8147 </itemizedlist>
8148    </sect3>
8149
8150    <sect3>
8151     <title>Performance</title>
8152 <itemizedlist>
8153 <listitem><para>Improve startup by calling localtime() only once (Tom)</para></listitem>
8154 <listitem><para>Cache system catalog information in flat files for faster startup (Tom)</para></listitem>
8155 <listitem><para>Improve caching of index information (Tom)</para></listitem>
8156 <listitem><para>Optimizer improvements (Tom, Fernando Nasser)</para></listitem>
8157 <listitem><para>Catalog caches now store failed lookups (Tom)</para></listitem>
8158 <listitem><para>Hash function improvements (Neil)</para></listitem>
8159 <listitem><para>Improve performance of query tokenization and network handling (Peter)</para></listitem>
8160 <listitem><para>Speed improvement for large object restore (Mario Weilguni)</para></listitem>
8161 <listitem><para>Mark expired index entries on first lookup, saving later heap fetches (Tom)</para></listitem>
8162 <listitem><para>Avoid excessive NULL bitmap padding (Manfred Koizar)</para></listitem>
8163 <listitem><para>Add BSD-licensed qsort() for Solaris, for performance (Bruce)</para></listitem>
8164 <listitem><para>Reduce per-row overhead by four bytes (Manfred Koizar)</para></listitem>
8165 <listitem><para>Fix GEQO optimizer bug (Neil Conway)</para></listitem>
8166 <listitem><para>Make WITHOUT OID actually save four bytes per row (Manfred Koizar)</para></listitem>
8167 <listitem><para>Add default_statistics_target variable to specify ANALYZE buckets (Neil)</para></listitem>
8168 <listitem><para>Use local buffer cache for temporary tables so no WAL overhead (Tom)</para></listitem>
8169 <listitem><para>Improve free space map performance on large tables (Stephen Marshall, Tom)</para></listitem>
8170 <listitem><para>Improved WAL write concurrency (Tom)</para></listitem>
8171 </itemizedlist>
8172    </sect3>
8173
8174    <sect3>
8175     <title>Privileges</title>
8176 <itemizedlist>
8177 <listitem><para>Add privileges on functions and procedural languages (Peter)</para></listitem>
8178 <listitem><para>Add OWNER to CREATE DATABASE so superusers can create databases on behalf of unprivileged users (Gavin Sherry, Tom)</para></listitem>
8179 <listitem><para>Add new object privilege bits EXECUTE and USAGE (Tom)</para></listitem>
8180 <listitem><para>Add SET SESSION AUTHORIZATION DEFAULT and RESET SESSION AUTHORIZATION (Tom)</para></listitem>
8181 <listitem><para>Allow functions to be executed with the privilege of the function owner (Peter)</para></listitem>
8182 </itemizedlist>
8183    </sect3>
8184
8185    <sect3>
8186     <title>Server Configuration</title>
8187 <itemizedlist>
8188 <listitem><para>Server log messages now tagged with LOG, not DEBUG (Bruce)</para></listitem>
8189 <listitem><para>Add user column to pg_hba.conf (Bruce)</para></listitem>
8190 <listitem><para>Have log_connections output two lines in log file (Tom)</para></listitem>
8191 <listitem><para>Remove debug_level from postgresql.conf, now server_min_messages (Bruce)</para></listitem>
8192 <listitem><para>New ALTER DATABASE/USER ... SET command for per-user/database initialization (Peter)</para></listitem>
8193 <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>
8194 <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>
8195 <listitem><para>Remove secondary password file capability and pg_password utility (Bruce)</para></listitem>
8196 <listitem><para>Add variable db_user_namespace for database-local user names (Bruce)</para></listitem>
8197 <listitem><para>SSL improvements (Bear Giles)</para></listitem>
8198 <listitem><para>Make encryption of stored passwords the default (Bruce)</para></listitem>
8199 <listitem><para>Allow pg_statistics to be reset by calling pg_stat_reset() (Christopher)</para></listitem>
8200 <listitem><para>Add log_duration parameter (Bruce)</para></listitem>
8201 <listitem><para>Rename debug_print_query to log_statement (Bruce)</para></listitem>
8202 <listitem><para>Rename show_query_stats to show_statement_stats (Bruce)</para></listitem>
8203 <listitem><para>Add param log_min_error_statement to print commands to logs on error (Gavin)</para></listitem>
8204 </itemizedlist>
8205    </sect3>
8206
8207    <sect3>
8208     <title>Queries</title>
8209 <itemizedlist>
8210 <listitem><para>Make cursors insensitive, meaning their contents do not change (Tom)</para></listitem>
8211 <listitem><para>Disable LIMIT #,# syntax; now only LIMIT # OFFSET # supported (Bruce)</para></listitem>
8212 <listitem><para>Increase identifier length to 63 (Neil, Bruce)</para></listitem>
8213 <listitem><para>UNION fixes for merging &gt;= 3 columns of different lengths (Tom)</para></listitem>
8214 <listitem><para>Add DEFAULT key word to INSERT, e.g., INSERT ... (..., DEFAULT, ...) (Rod)</para></listitem>
8215 <listitem><para>Allow views to have default values using ALTER COLUMN ... SET DEFAULT (Neil)</para></listitem>
8216 <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>
8217 <listitem><para>Fix for join aliases (Tom)</para></listitem>
8218 <listitem><para>Fix for FULL OUTER JOINs (Tom)</para></listitem>
8219 <listitem><para>Improve reporting of invalid identifier and location (Tom, Gavin)</para></listitem>
8220 <listitem><para>Fix OPEN cursor(args) (Tom)</para></listitem>
8221 <listitem><para>Allow 'ctid' to be used in a view and currtid(viewname) (Hiroshi)</para></listitem>
8222 <listitem><para>Fix for CREATE TABLE AS with UNION (Tom)</para></listitem>
8223 <listitem><para>SQL99 syntax improvements (Thomas)</para></listitem>
8224 <listitem><para>Add statement_timeout variable to cancel queries (Bruce)</para></listitem>
8225 <listitem><para>Allow prepared queries with PREPARE/EXECUTE (Neil)</para></listitem>
8226 <listitem><para>Allow FOR UPDATE to appear after LIMIT/OFFSET (Bruce)</para></listitem>
8227 <listitem><para>Add variable autocommit (Tom, David Van Wie)</para></listitem>
8228 </itemizedlist>
8229    </sect3>
8230
8231    <sect3>
8232     <title>Object Manipulation</title>
8233 <itemizedlist>
8234 <listitem><para>Make equals signs optional in CREATE DATABASE (Gavin Sherry)</para></listitem>
8235 <listitem><para>Make ALTER TABLE OWNER change index ownership too (Neil)</para></listitem>
8236 <listitem><para>New ALTER TABLE tabname ALTER COLUMN colname SET STORAGE controls TOAST storage, compression (John Gray)</para></listitem>
8237 <listitem><para>Add schema support, CREATE/DROP SCHEMA (Tom)</para></listitem>
8238 <listitem><para>Create schema for temporary tables (Tom)</para></listitem>
8239 <listitem><para>Add variable search_path for schema search (Tom)</para></listitem>
8240 <listitem><para>Add ALTER TABLE SET/DROP NOT NULL (Christopher)</para></listitem>
8241 <listitem><para>New CREATE FUNCTION volatility levels (Tom)</para></listitem>
8242 <listitem><para>Make rule names unique only per table (Tom)</para></listitem>
8243 <listitem><para>Add 'ON tablename' clause to DROP RULE and COMMENT ON RULE (Tom)</para></listitem>
8244 <listitem><para>Add ALTER TRIGGER RENAME (Joe)</para></listitem>
8245 <listitem><para>New current_schema() and current_schemas() inquiry functions (Tom)</para></listitem>
8246 <listitem><para>Allow functions to return multiple rows (table functions) (Joe)</para></listitem>
8247 <listitem><para>Make WITH optional in CREATE DATABASE, for consistency (Bruce)</para></listitem>
8248 <listitem><para>Add object dependency tracking (Rod, Tom)</para></listitem>
8249 <listitem><para>Add RESTRICT/CASCADE to DROP commands (Rod)</para></listitem>
8250 <listitem><para>Add ALTER TABLE DROP for non-CHECK CONSTRAINT (Rod)</para></listitem>
8251 <listitem><para>Autodestroy sequence on DROP of table with SERIAL (Rod)</para></listitem>
8252 <listitem><para>Prevent column dropping if column is used by foreign key (Rod)</para></listitem>
8253 <listitem><para>Automatically drop constraints/functions when object is dropped (Rod)</para></listitem>
8254 <listitem><para>Add CREATE/DROP OPERATOR CLASS (Bill Studenmund, Tom)</para></listitem>
8255 <listitem><para>Add ALTER TABLE DROP COLUMN (Christopher, Tom, Hiroshi)</para></listitem>
8256 <listitem><para>Prevent inherited columns from being removed or renamed (Alvaro Herrera)</para></listitem>
8257 <listitem><para>Fix foreign key constraints to not error on intermediate database states (Stephan)</para></listitem>
8258 <listitem><para>Propagate column or table renaming to foreign key constraints</para></listitem>
8259 <listitem><para>Add CREATE OR REPLACE VIEW (Gavin, Neil, Tom)</para></listitem>
8260 <listitem><para>Add CREATE OR REPLACE RULE (Gavin, Neil, Tom)</para></listitem>
8261 <listitem><para>Have rules execute alphabetically, returning more predictable values (Tom)</para></listitem>
8262 <listitem><para>Triggers are now fired in alphabetical order (Tom)</para></listitem>
8263 <listitem><para>Add /contrib/adddepend to handle pre-7.3 object dependencies (Rod)</para></listitem>
8264 <listitem><para>Allow better casting when inserting/updating values (Tom)</para></listitem>
8265 </itemizedlist>
8266    </sect3>
8267
8268    <sect3>
8269     <title>Utility Commands</title>
8270 <itemizedlist>
8271 <listitem><para>Have COPY TO output embedded carriage returns and newlines as \r and \n (Tom)</para></listitem>
8272 <listitem><para>Allow DELIMITER in COPY FROM to be 8-bit clean (Tatsuo)</para></listitem>
8273 <listitem><para>Make <application>pg_dump</> use ALTER TABLE ADD PRIMARY KEY, for performance (Neil)</para></listitem>
8274 <listitem><para>Disable brackets in multistatement rules (Bruce)</para></listitem>
8275 <listitem><para>Disable VACUUM from being called inside a function (Bruce)</para></listitem>
8276 <listitem><para>Allow dropdb and other scripts to use identifiers with spaces (Bruce)</para></listitem>
8277 <listitem><para>Restrict database comment changes to the current database</para></listitem>
8278 <listitem><para>Allow comments on operators, independent of the underlying function (Rod)</para></listitem>
8279 <listitem><para>Rollback SET commands in aborted transactions (Tom)</para></listitem>
8280 <listitem><para>EXPLAIN now outputs as a query (Tom)</para></listitem>
8281 <listitem><para>Display condition expressions and sort keys in EXPLAIN (Tom)</para></listitem>
8282 <listitem><para>Add 'SET LOCAL var = value' to set configuration variables for a single transaction (Tom)</para></listitem>
8283 <listitem><para>Allow ANALYZE to run in a transaction (Bruce)</para></listitem>
8284 <listitem><para>Improve COPY syntax using new WITH clauses, keep backward compatibility (Bruce)</para></listitem>
8285 <listitem><para>Fix <application>pg_dump</> to consistently output tags in non-ASCII dumps (Bruce)</para></listitem>
8286 <listitem><para>Make foreign key constraints clearer in dump file (Rod)</para></listitem>
8287 <listitem><para>Add COMMENT ON CONSTRAINT (Rod)</para></listitem>
8288 <listitem><para>Allow COPY TO/FROM to specify column names (Brent Verner)</para></listitem>
8289 <listitem><para>Dump UNIQUE and PRIMARY KEY constraints as ALTER TABLE (Rod)</para></listitem>
8290 <listitem><para>Have SHOW output a query result (Joe)</para></listitem>
8291 <listitem><para>Generate failure on short COPY lines rather than pad NULLs (Neil)</para></listitem>
8292 <listitem><para>Fix CLUSTER to preserve all table attributes (Alvaro Herrera)</para></listitem>
8293 <listitem><para>New pg_settings table to view/modify GUC settings (Joe)</para></listitem>
8294 <listitem><para>Add smart quoting, portability improvements to <application>pg_dump</> output (Peter)</para></listitem>
8295 <listitem><para>Dump serial columns out as SERIAL (Tom)</para></listitem>
8296 <listitem><para>Enable large file support, &gt;2G for <application>pg_dump</> (Peter, Philip Warner, Bruce)</para></listitem>
8297 <listitem><para>Disallow TRUNCATE on tables that are involved in referential constraints (Rod)</para></listitem>
8298 <listitem><para>Have TRUNCATE also auto-truncate the toast table of the relation (Tom)</para></listitem>
8299 <listitem><para>Add clusterdb utility that will auto-cluster an entire database based on previous CLUSTER operations (Alvaro Herrera)</para></listitem>
8300 <listitem><para>Overhaul pg_dumpall (Peter)</para></listitem>
8301 <listitem><para>Allow REINDEX of TOAST tables (Tom)</para></listitem>
8302 <listitem><para>Implemented START TRANSACTION, per SQL99 (Neil)</para></listitem>
8303 <listitem><para>Fix rare index corruption when a page split affects bulk delete (Tom)</para></listitem>
8304 <listitem><para>Fix ALTER TABLE ... ADD COLUMN for inheritance (Alvaro Herrera)</para></listitem>
8305 </itemizedlist>
8306    </sect3>
8307
8308    <sect3>
8309     <title>Data Types and Functions</title>
8310 <itemizedlist>
8311 <listitem><para>Fix factorial(0) to return 1 (Bruce)</para></listitem>
8312 <listitem><para>Date/time/timezone improvements (Thomas)</para></listitem>
8313 <listitem><para>Fix for array slice extraction (Tom)</para></listitem>
8314 <listitem><para>Fix extract/date_part to report proper microseconds for timestamp (Tatsuo)</para></listitem>
8315 <listitem><para>Allow text_substr() and bytea_substr() to read TOAST values more efficiently (John Gray)</para></listitem>
8316 <listitem><para>Add domain support (Rod)</para></listitem>
8317 <listitem><para>Make WITHOUT TIME ZONE the default for TIMESTAMP and TIME data types (Thomas)</para></listitem>
8318 <listitem><para>Allow alternate storage scheme of 64-bit integers for date/time types using --enable-integer-datetimes in configure (Thomas)</para></listitem>
8319 <listitem><para>Make timezone(timestamptz) return timestamp rather than a string (Thomas)</para></listitem>
8320 <listitem><para>Allow fractional seconds in date/time types for dates prior to 1BC (Thomas)</para></listitem>
8321 <listitem><para>Limit timestamp data types to 6 decimal places of precision (Thomas)</para></listitem>
8322 <listitem><para>Change timezone conversion functions from timetz() to timezone() (Thomas)</para></listitem>
8323 <listitem><para>Add configuration variables datestyle and timezone (Tom)</para></listitem>
8324 <listitem><para>Add OVERLAY(), which allows substitution of a substring in a string (Thomas)</para></listitem>
8325 <listitem><para>Add SIMILAR TO (Thomas, Tom)</para></listitem>
8326 <listitem><para>Add regular expression SUBSTRING(string FROM pat FOR escape) (Thomas)</para></listitem>
8327 <listitem><para>Add LOCALTIME and LOCALTIMESTAMP functions (Thomas)</para></listitem>
8328 <listitem><para>Add named composite types using CREATE TYPE typename AS (column) (Joe)</para></listitem>
8329 <listitem><para>Allow composite type definition in the table alias clause (Joe)</para></listitem>
8330 <listitem><para>Add new API to simplify creation of C language table functions (Joe)</para></listitem>
8331 <listitem><para>Remove ODBC-compatible empty parentheses from calls to SQL99 functions for which these parentheses do not match the standard (Thomas)</para></listitem>
8332 <listitem><para>Allow macaddr data type to accept 12 hex digits with no separators (Mike Wyer)</para></listitem>
8333 <listitem><para>Add CREATE/DROP CAST (Peter)</para></listitem>
8334 <listitem><para>Add IS DISTINCT FROM operator (Thomas)</para></listitem>
8335 <listitem><para>Add SQL99 TREAT() function, synonym for CAST() (Thomas)</para></listitem>
8336 <listitem><para>Add pg_backend_pid() to output backend pid (Bruce)</para></listitem>
8337 <listitem><para>Add IS OF / IS NOT OF type predicate (Thomas)</para></listitem>
8338 <listitem><para>Allow bit string constants without fully-specified length (Thomas)</para></listitem>
8339 <listitem><para>Allow conversion between 8-byte integers and bit strings (Thomas)</para></listitem>
8340 <listitem><para>Implement hex literal conversion to bit string literal (Thomas)</para></listitem>
8341 <listitem><para>Allow table functions to appear in the FROM clause (Joe)</para></listitem>
8342 <listitem><para>Increase maximum number of function parameters to 32 (Bruce)</para></listitem>
8343 <listitem><para>No longer automatically create index for SERIAL column (Tom)</para></listitem>
8344 <listitem><para>Add current_database() (Rod)</para></listitem>
8345 <listitem><para>Fix cash_words() to not overflow buffer (Tom)</para></listitem>
8346 <listitem><para>Add functions replace(), split_part(), to_hex() (Joe)</para></listitem>
8347 <listitem><para>Fix LIKE for bytea as a right-hand argument (Joe)</para></listitem>
8348 <listitem><para>Prevent crashes caused by SELECT cash_out(2) (Tom)</para></listitem>
8349 <listitem><para>Fix to_char(1,'FM999.99') to return a period (Karel)</para></listitem>
8350 <listitem><para>Fix trigger/type/language functions returning OPAQUE to return proper type (Tom)</para></listitem>
8351 </itemizedlist>
8352    </sect3>
8353
8354    <sect3>
8355     <title>Internationalization</title>
8356 <itemizedlist>
8357 <listitem><para>Add additional encodings: Korean (JOHAB), Thai (WIN874), Vietnamese (TCVN), Arabic (WIN1256), Simplified Chinese (GBK), Korean (UHC) (Eiji Tokuya)</para></listitem>
8358 <listitem><para>Enable locale support by default (Peter)</para></listitem>
8359 <listitem><para>Add locale variables (Peter)</para></listitem>
8360 <listitem><para>Escape byes &gt;= 0x7f for multibyte in PQescapeBytea/PQunescapeBytea (Tatsuo)</para></listitem>
8361 <listitem><para>Add locale awareness to regular expression character classes</para></listitem>
8362 <listitem><para>Enable multibyte support by default (Tatsuo)</para></listitem>
8363 <listitem><para>Add GB18030 multibyte support (Bill Huang)</para></listitem>
8364 <listitem><para>Add CREATE/DROP CONVERSION, allowing loadable encodings (Tatsuo, Kaori)</para></listitem>
8365 <listitem><para>Add pg_conversion table (Tatsuo)</para></listitem>
8366 <listitem><para>Add SQL99 CONVERT() function (Tatsuo)</para></listitem>
8367 <listitem><para>pg_dumpall, pg_controldata, and pg_resetxlog now national-language aware (Peter)</para></listitem>
8368 <listitem><para>New and updated translations</para></listitem>
8369 </itemizedlist>
8370    </sect3>
8371
8372    <sect3>
8373     <title>Server-side Languages</title>
8374 <itemizedlist>
8375 <listitem><para>Allow recursive SQL function (Peter)</para></listitem>
8376 <listitem><para>Change PL/Tcl build to use configured compiler and Makefile.shlib (Peter)</para></listitem>
8377 <listitem><para>Overhaul the PL/pgSQL FOUND variable to be more Oracle-compatible (Neil, Tom)</para></listitem>
8378 <listitem><para>Allow PL/pgSQL to handle quoted identifiers (Tom)</para></listitem>
8379 <listitem><para>Allow set-returning PL/pgSQL functions (Neil)</para></listitem>
8380 <listitem><para>Make PL/pgSQL schema-aware (Joe)</para></listitem>
8381 <listitem><para>Remove some memory leaks (Nigel J. Andrews, Tom)</para></listitem>
8382 </itemizedlist>
8383    </sect3>
8384
8385    <sect3>
8386     <title>psql</title>
8387 <itemizedlist>
8388 <listitem><para>Don't lowercase psql \connect database name for 7.2.0 compatibility (Tom)</para></listitem>
8389 <listitem><para>Add psql \timing to time user queries (Greg Sabino Mullane)</para></listitem>
8390 <listitem><para>Have psql \d show index information (Greg Sabino Mullane)</para></listitem>
8391 <listitem><para>New psql \dD shows domains (Jonathan Eisler)</para></listitem>
8392 <listitem><para>Allow psql to show rules on views (Paul ?)</para></listitem>
8393 <listitem><para>Fix for psql variable substitution (Tom)</para></listitem>
8394 <listitem><para>Allow psql \d to show temporary table structure (Tom)</para></listitem>
8395 <listitem><para>Allow psql \d to show foreign keys (Rod)</para></listitem>
8396 <listitem><para>Fix \? to honor \pset pager (Bruce)</para></listitem>
8397 <listitem><para>Have psql reports its version number on startup (Tom)</para></listitem>
8398 <listitem><para>Allow \copy to specify column names (Tom)</para></listitem>
8399 </itemizedlist>
8400    </sect3>
8401
8402    <sect3>
8403     <title>libpq</title>
8404 <itemizedlist>
8405 <listitem><para>Add ~/.pgpass to store host/user password combinations (Alvaro Herrera)</para></listitem>
8406 <listitem><para>Add PQunescapeBytea() function to libpq (Patrick Welche)</para></listitem>
8407 <listitem><para>Fix for sending large queries over non-blocking connections (Bernhard Herzog)</para></listitem>
8408 <listitem><para>Fix for libpq using timers on Win9X (David Ford)</para></listitem>
8409 <listitem><para>Allow libpq notify to handle servers with different-length identifiers (Tom)</para></listitem>
8410 <listitem><para>Add libpq PQescapeString() and PQescapeBytea() to Windows (Bruce)</para></listitem>
8411 <listitem><para>Fix for SSL with non-blocking connections (Jack Bates)</para></listitem>
8412 <listitem><para>Add libpq connection timeout parameter (Denis A Ustimenko)</para></listitem>
8413 </itemizedlist>
8414    </sect3>
8415
8416    <sect3>
8417     <title>JDBC</title>
8418 <itemizedlist>
8419 <listitem><para>Allow JDBC to compile with JDK 1.4 (Dave)</para></listitem>
8420 <listitem><para>Add JDBC 3 support (Barry)</para></listitem>
8421 <listitem><para>Allows JDBC to set loglevel by adding ?loglevel=X to the connection URL (Barry)</para></listitem>
8422 <listitem><para>Add Driver.info() message that prints out the version number (Barry)</para></listitem>
8423 <listitem><para>Add updateable result sets (Raghu Nidagal, Dave)</para></listitem>
8424 <listitem><para>Add support for callable statements (Paul Bethe)</para></listitem>
8425 <listitem><para>Add query cancel capability</para></listitem>
8426 <listitem><para>Add refresh row (Dave)</para></listitem>
8427 <listitem><para>Fix MD5 encryption handling for multibyte servers (Jun Kawai)</para></listitem>
8428 <listitem><para>Add support for prepared statements (Barry)</para></listitem>
8429 </itemizedlist>
8430    </sect3>
8431
8432    <sect3>
8433     <title>Miscellaneous Interfaces</title>
8434 <itemizedlist>
8435 <listitem><para>Fixed ECPG bug concerning octal numbers in single quotes (Michael)</para></listitem>
8436 <listitem><para>Move src/interfaces/libpgeasy to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
8437 <listitem><para>Improve Python interface (Elliot Lee, Andrew Johnson, Greg Copeland)</para></listitem>
8438 <listitem><para>Add libpgtcl connection close event (Gerhard Hintermayer)</para></listitem>
8439 <listitem><para>Move src/interfaces/libpq++ to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
8440 <listitem><para>Move src/interfaces/odbc to http://gborg.postgresql.org (Marc)</para></listitem>
8441 <listitem><para>Move src/interfaces/libpgeasy to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
8442 <listitem><para>Move src/interfaces/perl5 to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
8443 <listitem><para>Remove src/bin/pgaccess from main tree, now at http://www.pgaccess.org (Bruce)</para></listitem>
8444 <listitem><para>Add pg_on_connection_loss command to libpgtcl (Gerhard Hintermayer, Tom)</para></listitem>
8445 </itemizedlist>
8446    </sect3>
8447
8448    <sect3>
8449     <title>Source Code</title>
8450 <itemizedlist>
8451 <listitem><para>Fix for parallel make (Peter)</para></listitem>
8452 <listitem><para>AIX fixes for linking Tcl (Andreas Zeugswetter)</para></listitem>
8453 <listitem><para>Allow PL/Perl to build under Cygwin (Jason Tishler)</para></listitem>
8454 <listitem><para>Improve MIPS compiles (Peter, Oliver Elphick)</para></listitem>
8455 <listitem><para>Require Autoconf version 2.53 (Peter)</para></listitem>
8456 <listitem><para>Require readline and zlib by default in configure (Peter)</para></listitem>
8457 <listitem><para>Allow Solaris to use Intimate Shared Memory (ISM), for performance (Scott Brunza, P.J. Josh Rovero)</para></listitem>
8458 <listitem><para>Always enable syslog in compile, remove --enable-syslog option (Tatsuo)</para></listitem>
8459 <listitem><para>Always enable multibyte in compile, remove --enable-multibyte option (Tatsuo)</para></listitem>
8460 <listitem><para>Always enable locale in compile, remove --enable-locale option (Peter)</para></listitem>
8461 <listitem><para>Fix for Win9x DLL creation (Magnus Naeslund)</para></listitem>
8462 <listitem><para>Fix for link() usage by WAL code on Windows, BeOS (Jason Tishler)</para></listitem>
8463 <listitem><para>Add sys/types.h to c.h, remove from main files (Peter, Bruce)</para></listitem>
8464 <listitem><para>Fix AIX hang on SMP machines (Tomoyuki Niijima)</para></listitem>
8465 <listitem><para>AIX SMP hang fix (Tomoyuki Niijima)</para></listitem>
8466 <listitem><para>Fix pre-1970 date handling on newer glibc libraries (Tom)</para></listitem>
8467 <listitem><para>Fix PowerPC SMP locking (Tom)</para></listitem>
8468 <listitem><para>Prevent gcc -ffast-math from being used (Peter, Tom)</para></listitem>
8469 <listitem><para>Bison &gt;= 1.50 now required for developer builds</para></listitem>
8470 <listitem><para>Kerberos 5 support now builds with Heimdal (Peter)</para></listitem>
8471 <listitem><para>Add appendix in the User's Guide which lists SQL features (Thomas)</para></listitem>
8472 <listitem><para>Improve loadable module linking to use RTLD_NOW (Tom)</para></listitem>
8473 <listitem><para>New error levels WARNING, INFO, LOG, DEBUG[1-5] (Bruce)</para></listitem>
8474 <listitem><para>New src/port directory holds replaced libc functions (Peter, Bruce)</para></listitem>
8475 <listitem><para>New pg_namespace system catalog for schemas (Tom)</para></listitem>
8476 <listitem><para>Add pg_class.relnamespace for schemas (Tom)</para></listitem>
8477 <listitem><para>Add pg_type.typnamespace for schemas (Tom)</para></listitem>
8478 <listitem><para>Add pg_proc.pronamespace for schemas (Tom)</para></listitem>
8479 <listitem><para>Restructure aggregates to have pg_proc entries (Tom)</para></listitem>
8480 <listitem><para>System relations now have their own namespace, pg_* test not required (Fernando Nasser)</para></listitem>
8481 <listitem><para>Rename TOAST index names to be *_index rather than *_idx (Neil)</para></listitem>
8482 <listitem><para>Add namespaces for operators, opclasses (Tom)</para></listitem>
8483 <listitem><para>Add additional checks to server control file (Thomas)</para></listitem>
8484 <listitem><para>New Polish FAQ (Marcin Mazurek)</para></listitem>
8485 <listitem><para>Add Posix semaphore support (Tom)</para></listitem>
8486 <listitem><para>Document need for reindex (Bruce)</para></listitem>
8487 <listitem><para>Rename some internal identifiers to simplify Windows compile (Jan, Katherine Ward)</para></listitem>
8488 <listitem><para>Add documentation on computing disk space (Bruce)</para></listitem>
8489 <listitem><para>Remove KSQO from GUC (Bruce)</para></listitem>
8490 <listitem><para>Fix memory leak in rtree (Kenneth Been)</para></listitem>
8491 <listitem><para>Modify a few error messages for consistency (Bruce)</para></listitem>
8492 <listitem><para>Remove unused system table columns (Peter)</para></listitem>
8493 <listitem><para>Make system columns NOT NULL where appropriate (Tom)</para></listitem>
8494 <listitem><para>Clean up use of sprintf in favor of snprintf() (Neil, Jukka Holappa)</para></listitem>
8495 <listitem><para>Remove OPAQUE and create specific subtypes (Tom)</para></listitem>
8496 <listitem><para>Cleanups in array internal handling (Joe, Tom)</para></listitem>
8497 <listitem><para>Disallow pg_atoi('') (Bruce)</para></listitem>
8498 <listitem><para>Remove parameter wal_files because WAL files are now recycled (Bruce)</para></listitem>
8499 <listitem><para>Add version numbers to heap pages (Tom)</para></listitem>
8500 </itemizedlist>
8501    </sect3>
8502
8503    <sect3>
8504     <title>Contrib</title>
8505 <itemizedlist>
8506 <listitem><para>Allow inet arrays in /contrib/array (Neil)</para></listitem>
8507 <listitem><para>GiST fixes (Teodor Sigaev, Neil)</para></listitem>
8508 <listitem><para>Upgrade /contrib/mysql</para></listitem>
8509 <listitem><para>Add /contrib/dbsize which shows table sizes without vacuum (Peter)</para></listitem>
8510 <listitem><para>Add /contrib/intagg, integer aggregator routines (mlw)</para></listitem>
8511 <listitem><para>Improve /contrib/oid2name (Neil, Bruce)</para></listitem>
8512 <listitem><para>Improve /contrib/tsearch (Oleg, Teodor Sigaev)</para></listitem>
8513 <listitem><para>Cleanups of /contrib/rserver (Alexey V. Borzov)</para></listitem>
8514 <listitem><para>Update /contrib/oracle conversion utility (Gilles Darold)</para></listitem>
8515 <listitem><para>Update /contrib/dblink (Joe)</para></listitem>
8516 <listitem><para>Improve options supported by /contrib/vacuumlo (Mario Weilguni)</para></listitem>
8517 <listitem><para>Improvements to /contrib/intarray (Oleg, Teodor Sigaev, Andrey Oktyabrski)</para></listitem>
8518 <listitem><para>Add /contrib/reindexdb utility (Shaun Thomas)</para></listitem>
8519 <listitem><para>Add indexing to /contrib/isbn_issn (Dan Weston)</para></listitem>
8520 <listitem><para>Add /contrib/dbmirror (Steven Singer)</para></listitem>
8521 <listitem><para>Improve /contrib/pgbench (Neil)</para></listitem>
8522 <listitem><para>Add /contrib/tablefunc table function examples (Joe)</para></listitem>
8523 <listitem><para>Add /contrib/ltree data type for tree structures (Teodor Sigaev, Oleg Bartunov)</para></listitem>
8524 <listitem><para>Move /contrib/pg_controldata, pg_resetxlog into main tree (Bruce)</para></listitem>
8525 <listitem><para>Fixes to /contrib/cube (Bruno Wolff)</para></listitem>
8526 <listitem><para>Improve /contrib/fulltextindex (Christopher)</para></listitem>
8527 </itemizedlist>
8528    </sect3>
8529
8530   </sect2>
8531  </sect1>
8532
8533   <sect1 id="release-7-2-8">
8534    <title>Release 7.2.8</title>
8535
8536    <note>
8537    <title>Release date</title>
8538    <simpara>2005-05-09</simpara>
8539    </note>
8540
8541    <para>
8542     This release contains a variety of fixes from 7.2.7, including one
8543     security-related issue.
8544    </para>
8545
8546    <sect2>
8547     <title>Migration to version 7.2.8</title>
8548
8549     <para>
8550      A dump/restore is not required for those running 7.2.X.
8551     </para>
8552    </sect2>
8553
8554    <sect2>
8555     <title>Changes</title>
8556
8557 <itemizedlist>
8558 <listitem><para>Repair ancient race condition that allowed a transaction to be
8559 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
8560 than for other purposes</para>
8561 <para>This is an extremely serious bug since it could lead to apparent
8562 data inconsistencies being briefly visible to applications.</para></listitem>
8563 <listitem><para>Repair race condition between relation extension and
8564 VACUUM</para>
8565 <para>This could theoretically have caused loss of a page's worth of
8566 freshly-inserted data, although the scenario seems of very low probability.
8567 There are no known cases of it having caused more than an Assert failure.
8568 </para></listitem>
8569 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
8570 <type>TIME WITH TIME ZONE</> values</para></listitem>
8571 <listitem><para>Additional buffer overrun checks in plpgsql
8572 (Neil)</para></listitem>
8573 <listitem><para>Fix pg_dump to dump index names and trigger names containing
8574 <literal>%</> correctly (Neil)</para></listitem>
8575 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
8576 month-related formats</para></listitem>
8577 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
8578 (Marko Kreen)</para></listitem>
8579 </itemizedlist>
8580
8581   </sect2>
8582  </sect1>
8583
8584   <sect1 id="release-7-2-7">
8585    <title>Release 7.2.7</title>
8586
8587    <note>
8588    <title>Release date</title>
8589    <simpara>2005-01-31</simpara>
8590    </note>
8591
8592    <para>
8593     This release contains a variety of fixes from 7.2.6, including several
8594     security-related issues.
8595    </para>
8596
8597    <sect2>
8598     <title>Migration to version 7.2.7</title>
8599
8600     <para>
8601      A dump/restore is not required for those running 7.2.X.
8602     </para>
8603    </sect2>
8604
8605    <sect2>
8606     <title>Changes</title>
8607
8608 <itemizedlist>
8609 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
8610 <para>
8611 On platforms that will automatically execute initialization functions of a
8612 shared library (this includes at least Windows and ELF-based Unixen),
8613 <command>LOAD</> can be used to make the server execute arbitrary code.
8614 Thanks to NGS Software for reporting this.</para></listitem>
8615 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
8616 Jurka)</para></listitem>
8617 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
8618 many parameters (Neil)</para></listitem>
8619 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
8620 <para>
8621 The result of the join was mistakenly supposed to be sorted the same as the
8622 left input.  This could not only deliver mis-sorted output to the user, but
8623 in case of nested merge joins could give outright wrong answers.
8624 </para></listitem>
8625 <listitem><para>Fix display of negative intervals in SQL and GERMAN
8626 datestyles</para></listitem>
8627 </itemizedlist>
8628
8629   </sect2>
8630  </sect1>
8631
8632   <sect1 id="release-7-2-6">
8633    <title>Release 7.2.6</title>
8634
8635    <note>
8636    <title>Release date</title>
8637    <simpara>2004-10-22</simpara>
8638    </note>
8639
8640    <para>
8641     This release contains a variety of fixes from 7.2.5.
8642    </para>
8643
8644
8645    <sect2>
8646     <title>Migration to version 7.2.6</title>
8647
8648     <para>
8649      A dump/restore is not required for those running 7.2.X.
8650     </para>
8651    </sect2>
8652
8653    <sect2>
8654     <title>Changes</title>
8655
8656 <itemizedlist>
8657 <listitem><para>Repair possible failure to update hint bits on disk</para>
8658 <para>
8659 Under rare circumstances this oversight could lead to 
8660 <quote>could not access transaction status</> failures, which qualifies
8661 it as a potential-data-loss bug.
8662 </para></listitem>
8663 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
8664 <para>
8665 Very large left joins using a hash join plan could fail to output unmatched
8666 left-side rows given just the right data distribution.
8667 </para></listitem>
8668 <listitem><para>Disallow running pg_ctl as root</para>
8669 <para>
8670 This is to guard against any possible security issues.
8671 </para></listitem>
8672 <listitem><para>Avoid using temp files in /tmp in make_oidjoins_check</para>
8673 <para>
8674 This has been reported as a security issue, though it's hardly worthy of
8675 concern since there is no reason for non-developers to use this script anyway.
8676 </para></listitem>
8677 <listitem><para>Update to newer versions of Bison</para></listitem>
8678 </itemizedlist>
8679
8680   </sect2>
8681  </sect1>
8682
8683   <sect1 id="release-7-2-5">
8684    <title>Release 7.2.5</title>
8685
8686    <note>
8687    <title>Release date</title>
8688    <simpara>2004-08-16</simpara>
8689    </note>
8690
8691    <para>
8692     This release contains a variety of fixes from 7.2.4.
8693    </para>
8694
8695
8696    <sect2>
8697     <title>Migration to version 7.2.5</title>
8698
8699     <para>
8700      A dump/restore is not required for those running 7.2.X.
8701     </para>
8702    </sect2>
8703
8704    <sect2>
8705     <title>Changes</title>
8706
8707 <itemizedlist>
8708 <listitem><para>Prevent possible loss of committed transactions during crash</para>
8709 <para>
8710 Due to insufficient interlocking between transaction commit and checkpointing,
8711 it was possible for transactions committed just before the most recent
8712 checkpoint to be lost, in whole or in part, following a database crash and
8713 restart.  This is a serious bug that has existed
8714 since <productname>PostgreSQL</productname> 7.1.
8715 </para></listitem>
8716 <listitem><para>Fix corner case for btree search in parallel with first root page split</para></listitem>
8717 <listitem><para>Fix buffer overrun in <function>to_ascii</function> (Guido Notari)</para></listitem>
8718 <listitem><para>Fix core dump in deadlock detection on machines where char is unsigned</para></listitem>
8719 <listitem><para>Fix failure to respond to <command>pg_ctl stop -m fast</command> after Async_NotifyHandler runs</para></listitem>
8720 <listitem><para>Repair memory leaks in pg_dump</para></listitem>
8721 <listitem><para>Avoid conflict with system definition of <function>isblank()</function> function or macro</para></listitem>
8722 </itemizedlist>
8723   </sect2>
8724  </sect1>
8725
8726  <sect1 id="release-7-2-4">
8727   <title>Release 7.2.4</title>
8728
8729   <note>
8730    <title>Release date</title>
8731    <simpara>2003-01-30</simpara>
8732   </note>
8733
8734   <para>
8735    This release contains a variety of fixes for version 7.2.3,
8736    including fixes to prevent possible data loss.
8737   </para>
8738
8739   <sect2>
8740    <title>Migration to version 7.2.4</title>
8741
8742    <para>
8743     A dump/restore is <emphasis>not</emphasis> required for those
8744     running version 7.2.*.
8745    </para>
8746   </sect2>
8747
8748   <sect2>
8749    <title>Changes</title>
8750
8751 <itemizedlist>
8752 <listitem><para>Fix some additional cases of VACUUM "No one parent tuple was found" error</para></listitem>
8753 <listitem><para>Prevent VACUUM from being called inside a function  (Bruce)</para></listitem>
8754 <listitem><para>Ensure pg_clog updates are sync'd to disk before marking checkpoint complete</para></listitem>
8755 <listitem><para>Avoid integer overflow during large hash joins</para></listitem>
8756 <listitem><para>Make GROUP commands work when pg_group.grolist is large enough to be toasted</para></listitem>
8757 <listitem><para>Fix errors in datetime tables; some timezone names weren't being recognized</para></listitem>
8758 <listitem><para>Fix integer overflows in circle_poly(), path_encode(), path_add()  (Neil)</para></listitem>
8759 <listitem><para>Repair long-standing logic errors in lseg_eq(), lseg_ne(), lseg_center()</para></listitem>
8760 </itemizedlist>
8761   </sect2>
8762  </sect1>
8763
8764
8765  <sect1 id="release-7-2-3">
8766   <title>Release 7.2.3</title>
8767
8768   <note>
8769    <title>Release date</title>
8770    <simpara>2002-10-01</simpara>
8771   </note>
8772
8773   <para>
8774    This release contains a variety of fixes for version 7.2.2,
8775    including fixes to prevent possible data loss.
8776   </para>
8777
8778   <sect2>
8779    <title>Migration to version 7.2.3</title>
8780
8781    <para>
8782     A dump/restore is <emphasis>not</emphasis> required for those
8783     running version 7.2.*.
8784    </para>
8785   </sect2>
8786
8787   <sect2>
8788    <title>Changes</title>
8789
8790 <itemizedlist>
8791 <listitem><para>Prevent possible compressed transaction log loss (Tom)</para></listitem>
8792 <listitem><para>Prevent non-superuser from increasing most recent vacuum info (Tom)</para></listitem>
8793 <listitem><para>Handle pre-1970 date values in newer versions of glibc (Tom)</para></listitem>
8794 <listitem><para>Fix possible hang during server shutdown</para></listitem>
8795 <listitem><para>Prevent spinlock hangs on SMP PPC machines (Tomoyuki Niijima)</para></listitem>
8796 <listitem><para>Fix <application>pg_dump</> to properly dump FULL JOIN USING (Tom)</para></listitem>
8797 </itemizedlist>
8798   </sect2>
8799  </sect1>
8800   
8801   
8802  <sect1 id="release-7-2-2">
8803   <title>Release 7.2.2</title>
8804
8805   <note>
8806    <title>Release date</title>
8807    <simpara>2002-08-23</simpara>
8808   </note>
8809
8810   <para>
8811    This release contains a variety of fixes for version 7.2.1.
8812   </para>
8813
8814   <sect2>
8815    <title>Migration to version 7.2.2</title>
8816
8817    <para>
8818     A dump/restore is <emphasis>not</emphasis> required for those
8819     running version 7.2.*.
8820    </para>
8821   </sect2>
8822
8823   <sect2>
8824    <title>Changes</title>
8825
8826 <itemizedlist>
8827 <listitem><para>Allow EXECUTE of "CREATE TABLE AS ... SELECT" in PL/pgSQL (Tom)</para></listitem>
8828 <listitem><para>Fix for compressed transaction log id wraparound (Tom)</para></listitem>
8829 <listitem><para>Fix PQescapeBytea/PQunescapeBytea so that they handle bytes &gt; 0x7f (Tatsuo)</para></listitem>
8830 <listitem><para>Fix for psql and <application>pg_dump</> crashing when invoked with non-existent long options (Tatsuo)</para></listitem>
8831 <listitem><para>Fix crash when invoking geometric operators (Tom)</para></listitem>
8832 <listitem><para>Allow OPEN cursor(args) (Tom)</para></listitem>
8833 <listitem><para>Fix for rtree_gist index build (Teodor)</para></listitem>
8834 <listitem><para>Fix for dumping user-defined aggregates (Tom)</para></listitem>
8835 <listitem><para>contrib/intarray fixes (Oleg)</para></listitem>
8836 <listitem><para>Fix for complex UNION/EXCEPT/INTERSECT queries using parens (Tom)</para></listitem>
8837 <listitem><para>Fix to pg_convert (Tatsuo)</para></listitem>
8838 <listitem><para>Fix for crash with long DATA strings (Thomas, Neil)</para></listitem>
8839 <listitem><para>Fix for repeat(), lpad(), rpad() and long strings (Neil)</para></listitem>
8840 </itemizedlist>
8841   </sect2>
8842  </sect1>
8843   
8844   
8845  <sect1 id="release-7-2-1">
8846   <title>Release 7.2.1</title>
8847
8848   <note>
8849    <title>Release date</title>
8850    <simpara>2002-03-21</simpara>
8851   </note>
8852
8853   <para>
8854    This release contains a variety of fixes for version 7.2.
8855   </para>
8856
8857   <sect2>
8858    <title>Migration to version 7.2.1</title>
8859
8860    <para>
8861     A dump/restore is <emphasis>not</emphasis> required for those
8862     running version 7.2.
8863    </para>
8864   </sect2>
8865
8866   <sect2>
8867    <title>Changes</title>
8868
8869 <itemizedlist>
8870 <listitem><para>Ensure that sequence counters do not go backwards after a crash (Tom)</para></listitem>
8871 <listitem><para>Fix pgaccess kanji-conversion key binding (Tatsuo)</para></listitem>
8872 <listitem><para>Optimizer improvements (Tom)</para></listitem>
8873 <listitem><para>Cash I/O improvements (Tom)</para></listitem>
8874 <listitem><para>New Russian FAQ</para></listitem>
8875 <listitem><para>Compile fix for missing AuthBlockSig (Heiko)</para></listitem>
8876 <listitem><para>Additional time zones and time zone fixes (Thomas)</para></listitem>
8877 <listitem><para>Allow psql \connect to handle mixed case database and user names (Tom)</para></listitem>
8878 <listitem><para>Return proper OID on command completion even with ON INSERT rules (Tom)</para></listitem>
8879 <listitem><para>Allow COPY FROM to use 8-bit DELIMITERS (Tatsuo)</para></listitem>
8880 <listitem><para>Fix bug in extract/date_part for milliseconds/microseconds (Tatsuo)</para></listitem>
8881 <listitem><para>Improve handling of multiple UNIONs with different lengths (Tom)</para></listitem>
8882 <listitem><para>contrib/btree_gist improvements (Teodor Sigaev)</para></listitem>
8883 <listitem><para>contrib/tsearch dictionary improvements, see README.tsearch for an additional installation step (Thomas T. Thai, Teodor Sigaev)</para></listitem>
8884 <listitem><para>Fix for array subscripts handling (Tom)</para></listitem>
8885 <listitem><para>Allow EXECUTE of "CREATE TABLE AS ... SELECT" in PL/pgSQL (Tom)</para></listitem>
8886 </itemizedlist>
8887   </sect2>
8888  </sect1>
8889
8890
8891  <sect1 id="release-7-2">
8892   <title>Release 7.2</title>
8893
8894   <note>
8895    <title>Release date</title>
8896    <simpara>2002-02-04</simpara>
8897   </note>
8898
8899   <sect2>
8900    <title>Overview</title>
8901
8902    <para>
8903     This release improves <productname>PostgreSQL</> for use in
8904     high-volume applications.
8905    </para>
8906
8907    <para>
8908     Major changes in this release:
8909    </para>
8910
8911    <variablelist>
8912     <varlistentry>
8913      <term>VACUUM</term>
8914      <listitem>
8915       <para>
8916        Vacuuming no longer locks tables, thus allowing normal user
8917        access during the vacuum.  A new <command>VACUUM FULL</>
8918        command does old-style vacuum by locking the table and
8919        shrinking the on-disk copy of the table.
8920       </para>
8921      </listitem>
8922     </varlistentry>
8923
8924     <varlistentry>
8925      <term>Transactions</term>
8926      <listitem>
8927       <para>
8928        There is no longer a problem with installations that exceed
8929        four billion transactions.
8930       </para>
8931      </listitem>
8932     </varlistentry>
8933
8934     <varlistentry>
8935      <term>OIDs</term>
8936      <listitem>
8937       <para>
8938        OIDs are now optional.  Users can now create tables without
8939        OIDs for cases where OID usage is excessive.
8940       </para>
8941      </listitem>
8942     </varlistentry>
8943
8944     <varlistentry>
8945      <term>Optimizer</term>
8946      <listitem>
8947       <para>
8948        The system now computes histogram column statistics during
8949        <command>ANALYZE</>, allowing much better optimizer choices.
8950       </para>
8951      </listitem>
8952     </varlistentry>
8953
8954     <varlistentry>
8955      <term>Security</term>
8956      <listitem>
8957       <para>
8958        A new MD5 encryption option allows more secure storage and
8959        transfer of passwords.  A new Unix-domain socket
8960        authentication option is available on Linux and BSD systems.
8961       </para>
8962      </listitem>
8963     </varlistentry>
8964
8965     <varlistentry>
8966      <term>Statistics</term>
8967      <listitem>
8968       <para>
8969        Administrators can use the new table access statistics module
8970        to get fine-grained information about table and index usage.
8971       </para>
8972      </listitem>
8973     </varlistentry>
8974
8975     <varlistentry>
8976      <term>Internationalization</term>
8977      <listitem>
8978       <para>
8979        Program and library messages can now be displayed in several
8980        languages.
8981       </para>
8982      </listitem>
8983     </varlistentry>
8984
8985    </variablelist>
8986   </sect2>
8987
8988   <sect2>
8989    <title>Migration to version 7.2</title>
8990
8991    <para>
8992     A dump/restore using <command>pg_dump</command> is required for
8993     those wishing to migrate data from any previous release.
8994    </para>
8995
8996    <para>
8997     Observe the following incompatibilities:
8998    </para>
8999
9000    <itemizedlist>
9001     <listitem>
9002      <para>
9003       The semantics of the <command>VACUUM</command> command have
9004       changed in this release.  You may wish to update your
9005       maintenance procedures accordingly.
9006      </para>
9007     </listitem>
9008
9009     <listitem>
9010      <para>
9011       In this release, comparisons using <literal>= NULL</literal>
9012       will always return false (or NULL, more precisely).  Previous
9013       releases automatically transformed this syntax to <literal>IS
9014       NULL</literal>.  The old behavior can be re-enabled using a
9015       <filename>postgresql.conf</filename> parameter.
9016      </para>
9017     </listitem>
9018
9019     <listitem>
9020      <para>
9021       The <filename>pg_hba.conf</> and <filename>pg_ident.conf</>
9022       configuration is now only reloaded after receiving a
9023       <systemitem>SIGHUP</> signal, not with each connection.
9024      </para>
9025     </listitem>
9026
9027     <listitem>
9028      <para>
9029       The function <filename>octet_length()</> now returns the uncompressed data length.
9030      </para>
9031     </listitem>
9032
9033     <listitem>
9034      <para>
9035       The date/time value <literal>'current'</literal> is no longer
9036       available.  You will need to rewrite your applications.
9037      </para>
9038     </listitem>
9039
9040     <listitem>
9041      <para>
9042       The <literal>timestamp()</literal>, <literal>time()</literal>,
9043       and <literal>interval()</literal> functions are no longer
9044       available.  Instead of <literal>timestamp()</literal>, use 
9045       <literal>timestamp 'string'</literal> or <literal>CAST</literal>.
9046      </para>
9047     </listitem>
9048
9049    </itemizedlist>
9050
9051    <para>
9052     The <literal>SELECT ... LIMIT #,#</literal> syntax will be removed
9053     in the next release. You should change your queries to use
9054     separate LIMIT and OFFSET clauses, e.g. <literal>LIMIT 10 OFFSET
9055     20</literal>.
9056    </para>
9057   </sect2>
9058
9059   <sect2>
9060    <title>Changes</title>
9061
9062    <sect3>
9063     <title>Server Operation</title>
9064 <itemizedlist>
9065 <listitem><para>Create temporary files in a separate directory (Bruce)</para></listitem>
9066 <listitem><para>Delete orphaned temporary files on postmaster startup (Bruce)</para></listitem>
9067 <listitem><para>Added unique indexes to some system tables (Tom)</para></listitem>
9068 <listitem><para>System table operator reorganization (Oleg Bartunov, Teodor Sigaev, Tom)</para></listitem>
9069 <listitem><para>Renamed pg_log to pg_clog (Tom)</para></listitem>
9070 <listitem><para>Enable SIGTERM, SIGQUIT to kill backends (Jan)</para></listitem>
9071 <listitem><para>Removed compile-time limit on number of backends (Tom)</para></listitem>
9072 <listitem><para>Better cleanup for semaphore resource failure (Tatsuo, Tom)</para></listitem>
9073 <listitem><para>Allow safe transaction ID wraparound (Tom)</para></listitem>
9074 <listitem><para>Removed OIDs from some system tables (Tom)</para></listitem>
9075 <listitem><para>Removed "triggered data change violation" error check (Tom)</para></listitem>
9076 <listitem><para>SPI portal creation of prepared/saved plans (Jan)</para></listitem>
9077 <listitem><para>Allow SPI column functions to work for system columns (Tom)</para></listitem>
9078 <listitem><para>Long value compression improvement (Tom)</para></listitem>
9079 <listitem><para>Statistics collector for table, index access (Jan)</para></listitem>
9080 <listitem><para>Truncate extra-long sequence names to a reasonable value (Tom)</para></listitem>
9081 <listitem><para>Measure transaction times in milliseconds (Thomas)</para></listitem>
9082 <listitem><para>Fix TID sequential scans (Hiroshi)</para></listitem>
9083 <listitem><para>Superuser ID now fixed at 1 (Peter E)</para></listitem>
9084 <listitem><para>New pg_ctl "reload" option (Tom)</para></listitem>
9085 </itemizedlist>
9086    </sect3>
9087
9088    <sect3>
9089     <title>Performance</title>
9090 <itemizedlist>
9091 <listitem><para>Optimizer improvements (Tom)</para></listitem>
9092 <listitem><para>New histogram column statistics for optimizer (Tom)</para></listitem>
9093 <listitem><para>Reuse write-ahead log files rather than discarding them (Tom)</para></listitem>
9094 <listitem><para>Cache improvements (Tom)</para></listitem>
9095 <listitem><para>IS NULL, IS NOT NULL optimizer improvement (Tom)</para></listitem>
9096 <listitem><para>Improve lock manager to reduce lock contention (Tom)</para></listitem>
9097 <listitem><para>Keep relcache entries for index access support functions (Tom)</para></listitem>
9098 <listitem><para>Allow better selectivity with NaN and infinities in NUMERIC (Tom)</para></listitem>
9099 <listitem><para>R-tree performance improvements (Kenneth Been)</para></listitem>
9100 <listitem><para>B-tree splits more efficient (Tom)</para></listitem>
9101 </itemizedlist>
9102    </sect3>
9103
9104    <sect3>
9105     <title>Privileges</title>
9106 <itemizedlist>
9107 <listitem><para>Change UPDATE, DELETE privileges to be distinct (Peter E)</para></listitem>
9108 <listitem><para>New REFERENCES, TRIGGER privileges (Peter E)</para></listitem>
9109 <listitem><para>Allow GRANT/REVOKE to/from more than one user at a time (Peter E)</para></listitem>
9110 <listitem><para>New has_table_privilege() function (Joe Conway)</para></listitem>
9111 <listitem><para>Allow non-superuser to vacuum database (Tom)</para></listitem>
9112 <listitem><para>New SET SESSION AUTHORIZATION command (Peter E)</para></listitem>
9113 <listitem><para>Fix bug in privilege modifications on newly created tables (Tom)</para></listitem>
9114 <listitem><para>Disallow access to pg_statistic for non-superuser, add user-accessible views (Tom)</para></listitem>
9115 </itemizedlist>
9116    </sect3>
9117
9118    <sect3>
9119     <title>Client Authentication</title>
9120 <itemizedlist>
9121 <listitem><para>Fork postmaster before doing authentication to prevent hangs (Peter E)</para></listitem>
9122 <listitem><para>Add ident authentication over Unix domain sockets on Linux, *BSD (Helge Bahmann, Oliver Elphick, Teodor Sigaev, Bruce)</para></listitem>
9123 <listitem><para>Add a password authentication method that uses MD5 encryption (Bruce)</para></listitem>
9124 <listitem><para>Allow encryption of stored passwords using MD5 (Bruce)</para></listitem>
9125 <listitem><para>PAM authentication (Dominic J. Eidson)</para></listitem>
9126 <listitem><para>Load pg_hba.conf and pg_ident.conf only on startup and SIGHUP (Bruce)</para></listitem>
9127 </itemizedlist>
9128    </sect3>
9129
9130    <sect3>
9131     <title>Server Configuration</title>
9132 <itemizedlist>
9133 <listitem><para>Interpretation of some time zone abbreviations as Australian rather than North American now settable at run time (Bruce)</para></listitem>
9134 <listitem><para>New parameter to set default transaction isolation level (Peter E)</para></listitem>
9135 <listitem><para>New parameter to enable conversion of "expr = NULL" into "expr IS NULL", off by default (Peter E)</para></listitem>
9136 <listitem><para>New parameter to control memory usage by VACUUM (Tom)</para></listitem>
9137 <listitem><para>New parameter to set client authentication timeout (Tom)</para></listitem>
9138 <listitem><para>New parameter to set maximum number of open files (Tom)</para></listitem>
9139 </itemizedlist>
9140    </sect3>
9141
9142    <sect3>
9143     <title>Queries</title>
9144 <itemizedlist>
9145 <listitem><para>Statements added by INSERT rules now execute after the INSERT (Jan)</para></listitem>
9146 <listitem><para>Prevent unadorned relation names in target list (Bruce)</para></listitem>
9147 <listitem><para>NULLs now sort after all normal values in ORDER BY (Tom)</para></listitem>
9148 <listitem><para>New IS UNKNOWN, IS NOT UNKNOWN Boolean tests (Tom)</para></listitem>
9149 <listitem><para>New SHARE UPDATE EXCLUSIVE lock mode (Tom)</para></listitem>
9150 <listitem><para>New EXPLAIN ANALYZE command that shows run times and row counts (Martijn van Oosterhout)</para></listitem>
9151 <listitem><para>Fix problem with LIMIT and subqueries (Tom)</para></listitem>
9152 <listitem><para>Fix for LIMIT, DISTINCT ON pushed into subqueries (Tom)</para></listitem>
9153 <listitem><para>Fix nested EXCEPT/INTERSECT (Tom)</para></listitem>
9154 </itemizedlist>
9155    </sect3>
9156
9157    <sect3>
9158     <title>Schema Manipulation</title>
9159 <itemizedlist>
9160 <listitem><para>Fix SERIAL in temporary tables (Bruce)</para></listitem>
9161 <listitem><para>Allow temporary sequences (Bruce)</para></listitem>
9162 <listitem><para>Sequences now use int8 internally (Tom)</para></listitem>
9163 <listitem><para>New SERIAL8 creates int8 columns with sequences, default still SERIAL4 (Tom)</para></listitem>
9164 <listitem><para>Make OIDs optional using WITHOUT OIDS (Tom)</para></listitem>
9165 <listitem><para>Add %TYPE syntax to CREATE TYPE (Ian Lance Taylor)</para></listitem>
9166 <listitem><para>Add ALTER TABLE / DROP CONSTRAINT for CHECK constraints (Christopher Kings-Lynne)</para></listitem>
9167 <listitem><para>New CREATE OR REPLACE FUNCTION to alter existing function (preserving the function OID) (Gavin Sherry)</para></listitem>
9168 <listitem><para>Add ALTER TABLE / ADD [ UNIQUE | PRIMARY ] (Christopher Kings-Lynne)</para></listitem>
9169 <listitem><para>Allow column renaming in views</para></listitem>
9170 <listitem><para>Make ALTER TABLE / RENAME COLUMN update column names of indexes (Brent Verner)</para></listitem>
9171 <listitem><para>Fix for ALTER TABLE / ADD CONSTRAINT ... CHECK with inherited tables (Stephan Szabo)</para></listitem>
9172 <listitem><para>ALTER TABLE RENAME update foreign-key trigger arguments correctly (Brent Verner)</para></listitem>
9173 <listitem><para>DROP AGGREGATE and COMMENT ON AGGREGATE now accept an aggtype (Tom)</para></listitem>
9174 <listitem><para>Add automatic return type data casting for SQL functions (Tom)</para></listitem>
9175 <listitem><para>Allow GiST indexes to handle NULLs and multikey indexes (Oleg Bartunov, Teodor Sigaev, Tom)</para></listitem>
9176 <listitem><para>Enable partial indexes (Martijn van Oosterhout)</para></listitem>
9177 </itemizedlist>
9178    </sect3>
9179
9180    <sect3>
9181     <title>Utility Commands</title>
9182 <itemizedlist>
9183 <listitem><para>Add RESET ALL, SHOW ALL (Marko Kreen)</para></listitem>
9184 <listitem><para>CREATE/ALTER USER/GROUP now allow options in any order (Vince)</para></listitem>
9185 <listitem><para>Add LOCK A, B, C functionality (Neil Padgett)</para></listitem>
9186 <listitem><para>New ENCRYPTED/UNENCRYPTED option to CREATE/ALTER USER (Bruce)</para></listitem>
9187 <listitem><para>New light-weight VACUUM does not lock table; old semantics are available as VACUUM FULL (Tom)</para></listitem>
9188 <listitem><para>Disable COPY TO/FROM on views (Bruce)</para></listitem>
9189 <listitem><para>COPY DELIMITERS string must be exactly one character (Tom)</para></listitem>
9190 <listitem><para>VACUUM warning about index tuples fewer than heap now only appears when appropriate (Martijn van Oosterhout)</para></listitem>
9191 <listitem><para>Fix privilege checks for CREATE INDEX (Tom)</para></listitem>
9192 <listitem><para>Disallow inappropriate use of CREATE/DROP INDEX/TRIGGER/VIEW (Tom)</para></listitem>
9193 </itemizedlist>
9194    </sect3>
9195
9196    <sect3>
9197     <title>Data Types and Functions</title>
9198 <itemizedlist>
9199 <listitem><para>SUM(), AVG(), COUNT() now uses int8 internally for speed (Tom)</para></listitem>
9200 <listitem><para>Add convert(), convert2() (Tatsuo)</para></listitem>
9201 <listitem><para>New function bit_length() (Peter E)</para></listitem>
9202 <listitem><para>Make the "n" in CHAR(n)/VARCHAR(n) represents letters, not bytes (Tatsuo)</para></listitem>
9203 <listitem><para>CHAR(), VARCHAR() now reject strings that are too long (Peter E)</para></listitem>
9204 <listitem><para>BIT VARYING now rejects bit strings that are too long (Peter E)</para></listitem>
9205 <listitem><para>BIT now rejects bit strings that do not match declared size (Peter E)</para></listitem>
9206 <listitem><para>INET, CIDR text conversion functions (Alex Pilosov)</para></listitem>
9207 <listitem><para>INET, CIDR operators &lt;&lt; and &lt;&lt;= indexable (Alex Pilosov)</para></listitem>
9208 <listitem><para>Bytea \### now requires valid three digit octal number</para></listitem>
9209 <listitem><para>Bytea comparison improvements, now supports =, &lt;&gt;, &gt;, &gt;=, &lt;, and &lt;=</para></listitem>
9210 <listitem><para>Bytea now supports B-tree indexes</para></listitem>
9211 <listitem><para>Bytea now supports LIKE, LIKE...ESCAPE, NOT LIKE, NOT LIKE...ESCAPE</para></listitem>
9212 <listitem><para>Bytea now supports concatenation</para></listitem>
9213 <listitem><para>New bytea functions: position, substring, trim, btrim, and length</para></listitem>
9214 <listitem><para>New encode() function mode, "escaped", converts minimally escaped bytea to/from text</para></listitem>
9215 <listitem><para>Add pg_database_encoding_max_length() (Tatsuo)</para></listitem>
9216 <listitem><para>Add pg_client_encoding() function (Tatsuo)</para></listitem>
9217 <listitem><para>now() returns time with millisecond precision (Thomas)</para></listitem>
9218 <listitem><para>New TIMESTAMP WITHOUT TIMEZONE data type (Thomas)</para></listitem>
9219 <listitem><para>Add ISO date/time specification with "T", yyyy-mm-ddThh:mm:ss (Thomas)</para></listitem>
9220 <listitem><para>New xid/int comparison functions (Hiroshi)</para></listitem>
9221 <listitem><para>Add precision to TIME, TIMESTAMP, and INTERVAL data types (Thomas)</para></listitem>
9222 <listitem><para>Modify type coercion logic to attempt binary-compatible functions first (Tom)</para></listitem>
9223 <listitem><para>New encode() function installed by default (Marko Kreen)</para></listitem>
9224 <listitem><para>Improved to_*() conversion functions (Karel Zak)</para></listitem>
9225 <listitem><para>Optimize LIKE/ILIKE when using single-byte encodings (Tatsuo)</para></listitem>
9226 <listitem><para>New functions in contrib/pgcrypto: crypt(), hmac(), encrypt(), gen_salt() (Marko Kreen)</para></listitem>
9227 <listitem><para>Correct description of translate() function (Bruce)</para></listitem>
9228 <listitem><para>Add INTERVAL argument for SET TIME ZONE (Thomas)</para></listitem>
9229 <listitem><para>Add INTERVAL YEAR TO MONTH (etc.) syntax (Thomas)</para></listitem>
9230 <listitem><para>Optimize length functions when using single-byte encodings (Tatsuo)</para></listitem>
9231 <listitem><para>Fix path_inter, path_distance, path_length, dist_ppath to handle closed paths (Curtis Barrett, Tom)</para></listitem>
9232 <listitem><para>octet_length(text) now returns non-compressed length (Tatsuo, Bruce)</para></listitem>
9233 <listitem><para>Handle "July" full name in date/time literals (Greg Sabino Mullane)</para></listitem>
9234 <listitem><para>Some datatype() function calls now evaluated differently</para></listitem>
9235 <listitem><para>Add support for Julian and ISO time specifications (Thomas)</para></listitem>
9236 </itemizedlist>
9237    </sect3>
9238
9239    <sect3>
9240     <title>Internationalization</title>
9241 <itemizedlist>
9242 <listitem><para>National language support in psql, <application>pg_dump</>, libpq, and server (Peter E)</para></listitem>
9243 <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>
9244 <listitem><para>Make trim, ltrim, rtrim, btrim, lpad, rpad, translate multibyte aware (Tatsuo)</para></listitem>
9245 <listitem><para>Add LATIN5,6,7,8,9,10 support (Tatsuo)</para></listitem>
9246 <listitem><para>Add ISO 8859-5,6,7,8 support (Tatsuo)</para></listitem>
9247 <listitem><para>Correct LATIN5 to mean ISO-8859-9, not ISO-8859-5 (Tatsuo)</para></listitem>
9248 <listitem><para>Make mic2ascii() non-ASCII aware (Tatsuo)</para></listitem>
9249 <listitem><para>Reject invalid multibyte character sequences (Tatsuo)</para></listitem>
9250 </itemizedlist>
9251    </sect3>
9252
9253    <sect3>
9254     <title><application>PL/pgSQL</></title>
9255 <itemizedlist>
9256 <listitem><para>Now uses portals for SELECT loops, allowing huge result sets (Jan)</para></listitem>
9257 <listitem><para>CURSOR and REFCURSOR support (Jan)</para></listitem>
9258 <listitem><para>Can now return open cursors (Jan)</para></listitem>
9259 <listitem><para>Add ELSEIF (Klaus Reger)</para></listitem>
9260 <listitem><para>Improve PL/pgSQL error reporting, including location of error (Tom)</para></listitem>
9261 <listitem><para>Allow IS or FOR key words in cursor declaration, for compatibility (Bruce)</para></listitem>
9262 <listitem><para>Fix for SELECT ... FOR UPDATE (Tom)</para></listitem>
9263 <listitem><para>Fix for PERFORM returning multiple rows (Tom)</para></listitem>
9264 <listitem><para>Make PL/pgSQL use the server's type coercion code (Tom)</para></listitem>
9265 <listitem><para>Memory leak fix (Jan, Tom)</para></listitem>
9266 <listitem><para>Make trailing semicolon optional (Tom)</para></listitem>
9267 </itemizedlist>
9268    </sect3>
9269
9270    <sect3>
9271     <title>PL/Perl</title>
9272 <itemizedlist>
9273 <listitem><para>New untrusted PL/Perl (Alex Pilosov)</para></listitem>
9274 <listitem><para>PL/Perl is now built on some platforms even if libperl is not shared (Peter E)</para></listitem>
9275 </itemizedlist>
9276     </sect3>
9277
9278    <sect3>
9279     <title>PL/Tcl</title>
9280 <itemizedlist>
9281 <listitem><para>Now reports errorInfo (Vsevolod Lobko)</para></listitem>
9282 <listitem><para>Add spi_lastoid function (bob@redivi.com)</para></listitem>
9283 </itemizedlist>
9284    </sect3>
9285
9286    <sect3>
9287     <title>PL/Python</title>
9288 <itemizedlist>
9289 <listitem><para>...is new (Andrew Bosma)</para></listitem>
9290 </itemizedlist>
9291    </sect3>
9292
9293    <sect3>
9294     <title><application>psql</></title>
9295 <itemizedlist>
9296 <listitem><para>\d displays indexes in unique, primary groupings (Christopher Kings-Lynne)</para></listitem>
9297 <listitem><para>Allow trailing semicolons in backslash commands (Greg Sabino Mullane)</para></listitem>
9298 <listitem><para>Read password from /dev/tty if possible</para></listitem>
9299 <listitem><para>Force new password prompt when changing user and database (Tatsuo, Tom)</para></listitem>
9300 <listitem><para>Format the correct number of columns for Unicode (Patrice)</para></listitem>
9301 </itemizedlist>
9302    </sect3>
9303
9304    <sect3>
9305     <title><application>libpq</></title>
9306 <itemizedlist>
9307 <listitem><para>New function PQescapeString() to escape quotes in command strings (Florian Weimer)</para></listitem>
9308 <listitem><para>New function PQescapeBytea() escapes binary strings for use as SQL string literals</para></listitem>
9309 </itemizedlist>
9310    </sect3>
9311
9312    <sect3>
9313     <title>JDBC</title>
9314 <itemizedlist>
9315 <listitem><para>Return OID of INSERT (Ken K)</para></listitem>
9316 <listitem><para>Handle more data types (Ken K)</para></listitem>
9317 <listitem><para>Handle single quotes and newlines in strings (Ken K)</para></listitem>
9318 <listitem><para>Handle NULL variables (Ken K)</para></listitem>
9319 <listitem><para>Fix for time zone handling (Barry Lind)</para></listitem>
9320 <listitem><para>Improved Druid support</para></listitem>
9321 <listitem><para>Allow eight-bit characters with non-multibyte server (Barry Lind)</para></listitem>
9322 <listitem><para>Support BIT, BINARY types (Ned Wolpert)</para></listitem>
9323 <listitem><para>Reduce memory usage (Michael Stephens, Dave Cramer)</para></listitem>
9324 <listitem><para>Update DatabaseMetaData (Peter E)</para></listitem>
9325 <listitem><para>Add DatabaseMetaData.getCatalogs() (Peter E)</para></listitem>
9326 <listitem><para>Encoding fixes (Anders Bengtsson)</para></listitem>
9327 <listitem><para>Get/setCatalog methods (Jason Davies)</para></listitem>
9328 <listitem><para>DatabaseMetaData.getColumns() now returns column defaults (Jason Davies)</para></listitem>
9329 <listitem><para>DatabaseMetaData.getColumns() performance improvement (Jeroen van Vianen)</para></listitem>
9330 <listitem><para>Some JDBC1 and JDBC2 merging (Anders Bengtsson)</para></listitem>
9331 <listitem><para>Transaction performance improvements (Barry Lind)</para></listitem>
9332 <listitem><para>Array fixes (Greg Zoller)</para></listitem>
9333 <listitem><para>Serialize addition </para></listitem>
9334 <listitem><para>Fix batch processing (Rene Pijlman)</para></listitem>
9335 <listitem><para>ExecSQL method reorganization (Anders Bengtsson)</para></listitem>
9336 <listitem><para>GetColumn() fixes (Jeroen van Vianen)</para></listitem>
9337 <listitem><para>Fix isWriteable() function (Rene Pijlman)</para></listitem>
9338 <listitem><para>Improved passage of JDBC2 conformance tests (Rene Pijlman)</para></listitem>
9339 <listitem><para>Add bytea type capability (Barry Lind)</para></listitem>
9340 <listitem><para>Add isNullable() (Rene Pijlman)</para></listitem>
9341 <listitem><para>JDBC date/time test suite fixes (Liam Stewart)</para></listitem>
9342 <listitem><para>Fix for SELECT 'id' AS xxx FROM table (Dave Cramer)</para></listitem>
9343 <listitem><para>Fix DatabaseMetaData to show precision properly (Mark Lillywhite)</para></listitem>
9344 <listitem><para>New getImported/getExported keys (Jason Davies)</para></listitem>
9345 <listitem><para>MD5 password encryption support (Jeremy Wohl)</para></listitem>
9346 <listitem><para>Fix to actually use type cache (Ned Wolpert)</para></listitem>
9347 </itemizedlist>
9348    </sect3>
9349
9350    <sect3>
9351     <title>ODBC</title>
9352 <itemizedlist>
9353 <listitem><para>Remove query size limit (Hiroshi)</para></listitem>
9354 <listitem><para>Remove text field size limit (Hiroshi)</para></listitem>
9355 <listitem><para>Fix for SQLPrimaryKeys in multibyte mode (Hiroshi)</para></listitem>
9356 <listitem><para>Allow ODBC procedure calls (Hiroshi)</para></listitem>
9357 <listitem><para>Improve boolean handing (Aidan Mountford)</para></listitem>
9358 <listitem><para>Most configuration options now settable via DSN (Hiroshi)</para></listitem>
9359 <listitem><para>Multibyte, performance fixes (Hiroshi)</para></listitem>
9360 <listitem><para>Allow driver to be used with iODBC or unixODBC (Peter E)</para></listitem>
9361 <listitem><para>MD5 password encryption support (Bruce)</para></listitem>
9362 <listitem><para>Add more compatibility functions to odbc.sql (Peter E)</para></listitem>
9363 </itemizedlist>
9364    </sect3>
9365
9366    <sect3>
9367     <title><application>ECPG</></title>
9368 <itemizedlist>
9369 <listitem><para>EXECUTE ... INTO implemented (Christof Petig)</para></listitem>
9370 <listitem><para>Multiple row descriptor support (e.g. CARDINALITY) (Christof Petig)</para></listitem>
9371 <listitem><para>Fix for GRANT parameters (Lee Kindness)</para></listitem>
9372 <listitem><para>Fix INITIALLY DEFERRED bug</para></listitem>
9373 <listitem><para>Various bug fixes (Michael, Christof Petig)</para></listitem>
9374 <listitem><para>Auto allocation for indicator variable arrays (int *ind_p=NULL)</para></listitem>
9375 <listitem><para>Auto allocation for string arrays (char **foo_pp=NULL)</para></listitem>
9376 <listitem><para>ECPGfree_auto_mem fixed</para></listitem>
9377 <listitem><para>All function names with external linkage are now prefixed by ECPG</para></listitem>
9378 <listitem><para>Fixes for arrays of structures (Michael)</para></listitem>
9379 </itemizedlist>
9380    </sect3>
9381
9382    <sect3>
9383     <title>Misc. Interfaces</title>
9384 <itemizedlist>
9385 <listitem><para>Python fix fetchone() (Gerhard Haring)</para></listitem>
9386 <listitem><para>Use UTF, Unicode in Tcl where appropriate (Vsevolod Lobko, Reinhard Max)</para></listitem>
9387 <listitem><para>Add Tcl COPY TO/FROM (ljb)</para></listitem>
9388 <listitem><para>Prevent output of default index op class in <application>pg_dump</> (Tom)</para></listitem>
9389 <listitem><para>Fix libpgeasy memory leak (Bruce)</para></listitem>
9390 </itemizedlist>
9391    </sect3>
9392
9393    <sect3>
9394     <title>Build and Install</title>
9395 <itemizedlist>
9396 <listitem><para>Configure, dynamic loader, and shared library fixes (Peter E)</para></listitem>
9397 <listitem><para>Fixes in QNX 4 port (Bernd Tegge)</para></listitem>
9398 <listitem><para>Fixes in Cygwin and Windows ports (Jason Tishler, Gerhard Haring, Dmitry Yurtaev, Darko Prenosil, Mikhail Terekhov)</para></listitem>
9399 <listitem><para>Fix for Windows socket communication failures (Magnus, Mikhail Terekhov)</para></listitem>
9400 <listitem><para>Hurd compile fix (Oliver Elphick)</para></listitem>
9401 <listitem><para>BeOS fixes (Cyril Velter)</para></listitem>
9402 <listitem><para>Remove configure --enable-unicode-conversion, now enabled by multibyte (Tatsuo)</para></listitem>
9403 <listitem><para>AIX fixes (Tatsuo, Andreas)</para></listitem>
9404 <listitem><para>Fix parallel make (Peter E)</para></listitem>
9405 <listitem><para>Install SQL language manual pages into OS-specific directories (Peter E)</para></listitem>
9406 <listitem><para>Rename config.h to pg_config.h (Peter E)</para></listitem>
9407 <listitem><para>Reorganize installation layout of header files (Peter E)</para></listitem>
9408 </itemizedlist>
9409    </sect3>
9410
9411    <sect3>
9412     <title>Source Code</title>
9413 <itemizedlist>
9414 <listitem><para>Remove SEP_CHAR (Bruce)</para></listitem>
9415 <listitem><para>New GUC hooks (Tom)</para></listitem>
9416 <listitem><para>Merge GUC and command line handling (Marko Kreen)</para></listitem>
9417 <listitem><para>Remove EXTEND INDEX (Martijn van Oosterhout, Tom)</para></listitem>
9418 <listitem><para>New pgjindent utility to indent java code (Bruce)</para></listitem>
9419 <listitem><para>Remove define of true/false when compiling under C++ (Leandro Fanzone, Tom)</para></listitem>
9420 <listitem><para>pgindent fixes (Bruce, Tom)</para></listitem>
9421 <listitem><para>Replace strcasecmp() with strcmp() where appropriate (Peter E)</para></listitem>
9422 <listitem><para>Dynahash portability improvements (Tom)</para></listitem>
9423 <listitem><para>Add 'volatile' usage in spinlock structures</para></listitem>
9424 <listitem><para>Improve signal handling logic (Tom)</para></listitem>
9425 </itemizedlist>
9426    </sect3>
9427
9428    <sect3>
9429     <title>Contrib</title>
9430 <itemizedlist>
9431 <listitem><para>New contrib/rtree_gist (Oleg Bartunov, Teodor Sigaev)</para></listitem>
9432 <listitem><para>New contrib/tsearch full-text indexing (Oleg, Teodor Sigaev)</para></listitem>
9433 <listitem><para>Add contrib/dblink for remote database access (Joe Conway)</para></listitem>
9434 <listitem><para>contrib/ora2pg Oracle conversion utility (Gilles Darold)</para></listitem>
9435 <listitem><para>contrib/xml XML conversion utility (John Gray)</para></listitem>
9436 <listitem><para>contrib/fulltextindex fixes (Christopher Kings-Lynne)</para></listitem>
9437 <listitem><para>New contrib/fuzzystrmatch with levenshtein and metaphone, soundex merged (Joe Conway)</para></listitem>
9438 <listitem><para>Add contrib/intarray boolean queries, binary search, fixes (Oleg Bartunov)</para></listitem>
9439 <listitem><para>New pg_upgrade utility (Bruce)</para></listitem>
9440 <listitem><para>Add new pg_resetxlog options (Bruce, Tom)</para></listitem>
9441 </itemizedlist>
9442    </sect3>
9443   </sect2>
9444  </sect1>
9445
9446
9447   <sect1 id="release-7-1-3">
9448    <title>Release 7.1.3</title>
9449
9450    <note>
9451    <title>Release date</title>
9452    <simpara>2001-08-15</simpara>
9453    </note>
9454
9455    <sect2>
9456     <title>Migration to version 7.1.3</title>
9457
9458     <para>
9459      A dump/restore is <emphasis>not</emphasis> required for those running
9460      7.1.X.
9461     </para>
9462    </sect2>
9463
9464    <sect2>
9465     <title>Changes</title>
9466
9467     <para>
9468      <programlisting>
9469 Remove unused WAL segements of large transactions (Tom)
9470 Multiaction rule fix (Tom)
9471 PL/pgSQL memory allocation fix (Jan)
9472 VACUUM buffer fix (Tom)
9473 Regression test fixes (Tom)
9474 pg_dump fixes for GRANT/REVOKE/comments on views, user-defined types (Tom)
9475 Fix subselects with DISTINCT ON or LIMIT (Tom)
9476 BeOS fix
9477 Disable COPY TO/FROM a view (Tom)
9478 Cygwin build (Jason Tishler)
9479      </programlisting>
9480     </para>
9481    </sect2>
9482   </sect1>
9483
9484
9485   <sect1 id="release-7-1-2">
9486    <title>Release 7.1.2</title>
9487
9488    <note>
9489    <title>Release date</title>
9490    <simpara>2001-05-11</simpara>
9491    </note>
9492
9493    <para>
9494     This has one fix from 7.1.1.
9495    </para>
9496
9497
9498    <sect2>
9499     <title>Migration to version 7.1.2</title>
9500
9501     <para>
9502      A dump/restore is <emphasis>not</emphasis> required for those running
9503      7.1.X.
9504     </para>
9505    </sect2>
9506
9507    <sect2>
9508     <title>Changes</title>
9509
9510     <para>
9511      <programlisting>
9512 Fix PL/pgSQL SELECTs when returning no rows
9513 Fix for psql backslash core dump
9514 Referential integrity privilege fix
9515 Optimizer fixes
9516 pg_dump cleanups 
9517      </programlisting>
9518     </para>
9519    </sect2>
9520   </sect1>
9521
9522
9523   <sect1 id="release-7-1-1">
9524    <title>Release 7.1.1</title>
9525
9526    <note>
9527    <title>Release date</title>
9528    <simpara>2001-05-05</simpara>
9529    </note>
9530
9531    <para>
9532     This has a variety of fixes from 7.1.
9533    </para>
9534
9535
9536    <sect2>
9537     <title>Migration to version 7.1.1</title>
9538
9539     <para>
9540      A dump/restore is <emphasis>not</emphasis> required for those running
9541      7.1.
9542     </para>
9543    </sect2>
9544
9545    <sect2>
9546     <title>Changes</title>
9547
9548     <para>
9549      <programlisting>
9550 Fix for numeric MODULO operator (Tom)
9551 pg_dump fixes (Philip)
9552 pg_dump can dump 7.0 databases (Philip)
9553 readline 4.2 fixes (Peter E)
9554 JOIN fixes (Tom)
9555 AIX, MSWIN, VAX, N32K fixes (Tom)
9556 Multibytes fixes (Tom)
9557 Unicode fixes (Tatsuo)
9558 Optimizer improvements (Tom)
9559 Fix for whole rows in functions (Tom)
9560 Fix for pg_ctl and option strings with spaces (Peter E)
9561 ODBC fixes (Hiroshi)
9562 EXTRACT can now take string argument (Thomas)
9563 Python fixes (Darcy)
9564      </programlisting>
9565     </para>
9566    </sect2>
9567   </sect1>
9568
9569
9570   <sect1 id="release-7-1">
9571    <title>Release 7.1</title>
9572
9573    <note>
9574    <title>Release date</title>
9575    <simpara>2001-04-13</simpara>
9576    </note>
9577
9578    <para>
9579         This release focuses on removing limitations that have existed in the
9580         <productname>PostgreSQL</productname> code for many years.
9581    </para>
9582
9583    <para>
9584     Major changes in this release:
9585    </para>
9586
9587    <variablelist>
9588     <varlistentry>
9589      <term>
9590        Write-ahead Log (WAL)
9591      </term>
9592      <listitem>
9593       <para>
9594 To maintain database consistency in case of an operating system crash,
9595 previous releases of <productname>PostgreSQL</productname> have forced
9596 all data modifications to disk before each transaction commit.  With
9597 WAL, only one log file must be flushed to disk, greatly improving
9598 performance.  If you have been using -F in previous releases to
9599 disable disk flushes, you may want to consider discontinuing its use.
9600       </para>
9601      </listitem>
9602     </varlistentry>
9603
9604     <varlistentry>
9605      <term>
9606        TOAST
9607      </term>
9608      <listitem>
9609       <para>
9610        TOAST - Previous releases had a compiled-in row length limit,
9611 typically 8k - 32k. This limit made storage of long text fields
9612 difficult.  With TOAST, long rows of any length can be stored with good
9613 performance.
9614       </para>
9615      </listitem>
9616     </varlistentry>
9617
9618     <varlistentry>
9619      <term>
9620        Outer Joins
9621      </term>
9622      <listitem>
9623       <para>
9624 We now support outer joins.  The UNION/NOT IN
9625 workaround for outer joins is no longer required.  We use the SQL92
9626 outer join syntax.
9627       </para>
9628      </listitem>
9629     </varlistentry>
9630
9631     <varlistentry>
9632      <term>
9633        Function Manager
9634      </term>
9635      <listitem>
9636       <para>
9637 The previous C function manager did not
9638 handle null values properly, nor did it support 64-bit <acronym>CPU</acronym>'s (Alpha).  The new
9639 function manager does.  You can continue using your old custom
9640 functions, but you may want to rewrite them in the future to use the new
9641 function manager call interface.
9642       </para>
9643      </listitem>
9644     </varlistentry>
9645
9646     <varlistentry>
9647      <term>
9648        Complex Queries
9649      </term>
9650      <listitem>
9651       <para>
9652 A large number of complex queries that were
9653 unsupported in previous releases now work.  Many combinations of views,
9654 aggregates, UNION, LIMIT, cursors, subqueries, and inherited tables
9655 now work properly. Inherited tables are now accessed by default. 
9656 Subqueries in FROM are now supported.
9657       </para>
9658      </listitem>
9659     </varlistentry>
9660
9661    </variablelist>
9662
9663    <sect2>
9664     <title>Migration to version 7.1</title>
9665
9666     <para>
9667         A dump/restore using pg_dump is required for those wishing to migrate
9668         data from any previous release.
9669     </para>
9670    </sect2>
9671
9672    <sect2>
9673     <title>Changes</title>
9674
9675     <para>
9676      <programlisting>
9677 Bug Fixes
9678 ---------
9679 Many multibyte/Unicode/locale fixes (Tatsuo and others)
9680 More reliable ALTER TABLE RENAME (Tom)
9681 Kerberos V fixes (David Wragg)
9682 Fix for INSERT INTO...SELECT where targetlist has subqueries (Tom)
9683 Prompt username/password on standard error (Bruce)
9684 Large objects inv_read/inv_write fixes (Tom)
9685 Fixes for to_char(), to_date(), to_ascii(), and to_timestamp() (Karel, 
9686     Daniel Baldoni)
9687 Prevent query expressions from leaking memory (Tom)
9688 Allow UPDATE of arrays elements (Tom)
9689 Wake up lock waiters during cancel (Hiroshi)
9690 Fix rare cursor crash when using hash join (Tom)
9691 Fix for DROP TABLE/INDEX in rolled-back transaction (Hiroshi)
9692 Fix psql crash from \l+ if MULTIBYTE enabled (Peter E)
9693 Fix truncation of rule names during CREATE VIEW (Ross Reedstrom)
9694 Fix PL/perl (Alex Kapranoff)
9695 Disallow LOCK on views (Mark Hollomon)
9696 Disallow INSERT/UPDATE/DELETE on views (Mark Hollomon)
9697 Disallow DROP RULE, CREATE INDEX, TRUNCATE on views (Mark Hollomon)
9698 Allow PL/pgSQL accept non-ASCII identifiers (Tatsuo)
9699 Allow views to proper handle GROUP BY, aggregates, DISTINCT (Tom)
9700 Fix rare failure with TRUNCATE command (Tom)
9701 Allow UNION/INTERSECT/EXCEPT to be used with ALL, subqueries, views, 
9702     DISTINCT, ORDER BY, SELECT...INTO (Tom)
9703 Fix parser failures during aborted transactions (Tom)
9704 Allow temporary relations to properly clean up indexes (Bruce)
9705 Fix VACUUM problem with moving rows in same page (Tom)
9706 Modify pg_dump to better handle user-defined items in template1 (Philip)
9707 Allow LIMIT in VIEW (Tom)
9708 Require cursor FETCH to honor LIMIT (Tom)
9709 Allow PRIMARY/FOREIGN Key definitions on inherited columns (Stephan)
9710 Allow ORDER BY, LIMIT in subqueries (Tom)
9711 Allow UNION in CREATE RULE (Tom)
9712 Make ALTER/DROP TABLE rollback-able (Vadim, Tom)
9713 Store initdb collation in pg_control so collation cannot be changed (Tom)
9714 Fix INSERT...SELECT with rules (Tom)
9715 Fix FOR UPDATE inside views and subselects (Tom)
9716 Fix OVERLAPS operators conform to SQL92 spec regarding NULLs (Tom)
9717 Fix lpad() and rpad() to handle length less than input string (Tom)
9718 Fix use of NOTIFY in some rules (Tom)
9719 Overhaul btree code (Tom)
9720 Fix NOT NULL use in Pl/pgSQL variables (Tom)
9721 Overhaul GIST code (Oleg)
9722 Fix CLUSTER to preserve constraints and column default (Tom)
9723 Improved deadlock detection handling (Tom)
9724 Allow multiple SERIAL columns in a table (Tom)
9725 Prevent occasional index corruption (Vadim)
9726
9727 Enhancements
9728 ------------
9729 Add OUTER JOINs (Tom)
9730 Function manager overhaul (Tom)
9731 Allow ALTER TABLE RENAME on indexes (Tom)
9732 Improve CLUSTER (Tom)
9733 Improve ps status display for more platforms (Peter E, Marc)
9734 Improve CREATE FUNCTION failure message (Ross)
9735 JDBC improvements (Peter, Travis Bauer, Christopher Cain, William Webber,
9736     Gunnar)
9737 Grand Unified Configuration scheme/GUC.  Many options can now be set in 
9738     data/postgresql.conf, postmaster/postgres flags, or SET commands (Peter E)
9739 Improved handling of file descriptor cache (Tom)
9740 New warning code about auto-created table alias entries (Bruce)
9741 Overhaul initdb process (Tom, Peter E)
9742 Overhaul of inherited tables; inherited tables now accessed by default;
9743    new ONLY key word prevents it (Chris Bitmead, Tom)
9744 ODBC cleanups/improvements (Nick Gorham, Stephan Szabo, Zoltan Kovacs, 
9745     Michael Fork)
9746 Allow renaming of temp tables (Tom)
9747 Overhaul memory manager contexts (Tom)
9748 pg_dumpall uses CREATE USER or CREATE GROUP rather using COPY (Peter E)
9749 Overhaul pg_dump (Philip Warner)
9750 Allow pg_hba.conf secondary password file to specify only username (Peter E)
9751 Allow TEMPORARY or TEMP key word when creating temporary tables (Bruce)
9752 New memory leak checker (Karel)
9753 New SET SESSION CHARACTERISTICS (Thomas)
9754 Allow nested block comments (Thomas)
9755 Add WITHOUT TIME ZONE type qualifier (Thomas)
9756 New ALTER TABLE ADD CONSTRAINT (Stephan)
9757 Use NUMERIC accumulators for INTEGER aggregates (Tom)
9758 Overhaul aggregate code (Tom)
9759 New VARIANCE and STDDEV() aggregates
9760 Improve dependency ordering of pg_dump (Philip)
9761 New pg_restore command (Philip)
9762 New pg_dump tar output option (Philip)
9763 New pg_dump of large objects  (Philip)
9764 New ESCAPE option to LIKE (Thomas)
9765 New case-insensitive LIKE - ILIKE (Thomas)
9766 Allow functional indexes to use binary-compatible type (Tom)
9767 Allow SQL functions to be used in more contexts (Tom)
9768 New pg_config utility (Peter E)
9769 New PL/pgSQL EXECUTE command which allows dynamic SQL and utility statements
9770     (Jan)
9771 New PL/pgSQL GET DIAGNOSTICS statement for SPI value access (Jan)
9772 New quote_identifiers() and quote_literal() functions (Jan)
9773 New ALTER TABLE table OWNER TO user command (Mark Hollomon)
9774 Allow subselects in FROM, i.e. FROM (SELECT ...) [AS] alias (Tom)
9775 Update PyGreSQL to version 3.1 (D'Arcy)
9776 Store tables as files named by OID (Vadim)
9777 New SQL function setval(seq,val,bool) for use in pg_dump (Philip)
9778 Require DROP VIEW to remove views, no DROP TABLE (Mark)
9779 Allow DROP VIEW view1, view2 (Mark)
9780 Allow multiple objects in DROP INDEX, DROP RULE, and DROP TYPE (Tom)
9781 Allow automatic conversion to/from Unicode (Tatsuo, Eiji)
9782 New /contrib/pgcrypto hashing functions (Marko Kreen)
9783 New pg_dumpall --globals-only option (Peter E)
9784 New CHECKPOINT command for WAL which creates new WAL log file (Vadim)
9785 New AT TIME ZONE syntax (Thomas)
9786 Allow location of Unix domain socket to be configurable (David J. MacKenzie)
9787 Allow postmaster to listen on a specific IP address (David J. MacKenzie)
9788 Allow socket path name to be specified in hostname by using leading slash
9789     (David J. MacKenzie)
9790 Allow CREATE DATABASE to specify template database (Tom)
9791 New utility to convert MySQL schema dumps to SQL92 and PostgreSQL (Thomas)
9792 New /contrib/rserv replication toolkit (Vadim)
9793 New file format for COPY BINARY (Tom)
9794 New /contrib/oid2name to map numeric files to table names (B Palmer)
9795 New "idle in transaction" ps status message (Marc)
9796 Update to pgaccess 0.98.7 (Constantin Teodorescu)
9797 pg_ctl now defaults to -w (wait) on shutdown, new -l (log) option
9798 Add rudimentary dependency checking to pg_dump (Philip)
9799
9800 Types
9801 -----
9802 Fix INET/CIDR type ordering and add new functions (Tom)
9803 Make OID behave as an unsigned type (Tom)
9804 Allow BIGINT as synonym for INT8 (Peter E)
9805 New int2 and int8 comparison operators (Tom)
9806 New BIT and BIT VARYING types (Adriaan Joubert, Tom, Peter E)
9807 CHAR() no longer faster than VARCHAR() because of TOAST (Tom)
9808 New GIST seg/cube examples (Gene Selkov)
9809 Improved round(numeric) handling (Tom)
9810 Fix CIDR output formatting (Tom)
9811 New CIDR abbrev() function (Tom)
9812
9813 Performance
9814 -----------
9815 Write-Ahead Log (WAL) to provide crash recovery with less performance 
9816     overhead (Vadim)
9817 ANALYZE stage of VACUUM no longer exclusively locks table (Bruce)
9818 Reduced file seeks (Denis Perchine)
9819 Improve BTREE code for duplicate keys (Tom)
9820 Store all large objects in a single table (Denis Perchine, Tom)
9821 Improve memory allocation performance (Karel, Tom)
9822
9823 Source Code
9824 -----------
9825 New function manager call conventions (Tom)
9826 SGI portability fixes (David Kaelbling)
9827 New configure --enable-syslog option (Peter E)
9828 New BSDI README (Bruce)
9829 configure script moved to top level, not /src (Peter E)
9830 Makefile/configuration/compilation overhaul (Peter E)
9831 New configure --with-python option (Peter E)
9832 Solaris cleanups (Peter E)
9833 Overhaul /contrib Makefiles (Karel)
9834 New OpenSSL configuration option (Magnus, Peter E)
9835 AIX fixes (Andreas)
9836 QNX fixes (Maurizio)
9837 New heap_open(), heap_openr() API (Tom)
9838 Remove colon and semi-colon operators (Thomas)
9839 New pg_class.relkind value for views (Mark Hollomon)
9840 Rename ichar() to chr() (Karel)
9841 New documentation for btrim(), ascii(), chr(), repeat() (Karel)
9842 Fixes for NT/Cygwin (Pete Forman)
9843 AIX port fixes (Andreas)
9844 New BeOS port (David Reid, Cyril Velter)
9845 Add proofreader's changes to docs (Addison-Wesley, Bruce)
9846 New Alpha spinlock code (Adriaan Joubert, Compaq)
9847 UnixWare port overhaul (Peter E)
9848 New Darwin/MacOS X port (Peter Bierman, Bruce Hartzler)
9849 New FreeBSD Alpha port (Alfred)
9850 Overhaul shared memory segments (Tom)
9851 Add IBM S/390 support (Neale Ferguson)
9852 Moved macmanuf to /contrib (Larry Rosenman)
9853 Syslog improvements (Larry Rosenman)
9854 New template0 database that contains no user additions (Tom)
9855 New /contrib/cube and /contrib/seg GIST sample code (Gene Selkov)
9856 Allow NetBSD's libedit instead of readline (Peter)
9857 Improved assembly language source code format (Bruce)
9858 New contrib/pg_logger
9859 New --template option to createdb
9860 New contrib/pg_control utility (Oliver)
9861 New FreeBSD tools ipc_check, start-scripts/freebsd
9862      </programlisting>
9863     </para>
9864    </sect2>
9865   </sect1>
9866
9867
9868   <sect1 id="release-7-0-3">
9869    <title>Release 7.0.3</title>
9870
9871    <note>
9872    <title>Release date</title>
9873    <simpara>2000-11-11</simpara>
9874    </note>
9875
9876    <para>
9877     This has a variety of fixes from 7.0.2.
9878    </para>
9879
9880
9881    <sect2>
9882     <title>Migration to version 7.0.3</title>
9883
9884     <para>
9885      A dump/restore is <emphasis>not</emphasis> required for those running
9886      7.0.*.
9887     </para>
9888    </sect2>
9889
9890    <sect2>
9891     <title>Changes</title>
9892
9893     <para>
9894      <programlisting>
9895 Jdbc fixes (Peter)
9896 Large object fix (Tom)
9897 Fix lean in COPY WITH OIDS leak (Tom)
9898 Fix backwards-index-scan (Tom)
9899 Fix SELECT ... FOR UPDATE so it checks for duplicate keys (Hiroshi)
9900 Add --enable-syslog to configure (Marc)
9901 Fix abort transaction at backend exit in rare cases (Tom)
9902 Fix for psql \l+ when multibyte enabled (Tatsuo)
9903 Allow PL/pgSQL to accept non ascii identifiers (Tatsuo)
9904 Make vacuum always flush buffers (Tom)
9905 Fix to allow cancel while waiting for a lock (Hiroshi)
9906 Fix for memory aloocation problem in user authentication code (Tom)
9907 Remove bogus use of int4out() (Tom)
9908 Fixes for multiple subqueries in COALESCE or BETWEEN (Tom)
9909 Fix for failure of triggers on heap open in certain cases (Jeroen van
9910     Vianen)
9911 Fix for erroneous selectivity of not-equals (Tom)
9912 Fix for erroneous use of strcmp() (Tom)
9913 Fix for bug where storage manager accesses items beyond end of file
9914     (Tom)
9915 Fix to include kernel errno message in all smgr elog messages (Tom)
9916 Fix for '.' not in PATH at build time (SL Baur)
9917 Fix for out-of-file-descriptors error (Tom)
9918 Fix to make pg_dump dump 'iscachable' flag for functions (Tom)
9919 Fix for subselect in targetlist of Append node (Tom)
9920 Fix for mergejoin plans (Tom)
9921 Fix TRUNCATE failure on relations with indexes (Tom)
9922 Avoid database-wide restart on write error (Hiroshi)
9923 Fix nodeMaterial to honor chgParam by recomputing its output (Tom)
9924 Fix VACUUM problem with moving chain of update row versions when source
9925     and destination of a row version lie on the same page (Tom)
9926 Fix user.c CommandCounterIncrement (Tom)
9927 Fix for AM/PM boundary problem in to_char() (Karel Zak)
9928 Fix TIME aggregate handling (Tom)
9929 Fix to_char() to avoid coredump on NULL input (Tom)
9930 Buffer fix (Tom)
9931 Fix for inserting/copying longer multibyte strings into char() data
9932     types (Tatsuo)
9933 Fix for crash of backend, on abort (Tom)
9934      </programlisting>
9935     </para>
9936    </sect2>
9937   </sect1>
9938
9939
9940   <sect1 id="release-7-0-2">
9941    <title>Release 7.0.2</title>
9942
9943    <note>
9944    <title>Release date</title>
9945    <simpara>2000-06-05</simpara>
9946    </note>
9947
9948    <para>
9949     This is a repackaging of 7.0.1 with added documentation.
9950    </para>
9951
9952
9953    <sect2>
9954     <title>Migration to version 7.0.2</title>
9955
9956     <para>
9957      A dump/restore is <emphasis>not</emphasis> required for those running
9958      7.*.
9959     </para>
9960    </sect2>
9961
9962    <sect2>
9963     <title>Changes</title>
9964
9965     <para>
9966      <programlisting>
9967 Added documentation to tarball.
9968      </programlisting>
9969     </para>
9970    </sect2>
9971   </sect1>
9972
9973
9974   <sect1 id="release-7-0-1">
9975    <title>Release 7.0.1</title>
9976
9977    <note>
9978    <title>Release date</title>
9979    <simpara>2000-06-01</simpara>
9980    </note>
9981
9982    <para>
9983     This is a cleanup release for 7.0.
9984    </para>
9985
9986    <sect2>
9987     <title>Migration to version 7.0.1</title>
9988
9989     <para>
9990      A dump/restore is <emphasis>not</emphasis> required for those running
9991      7.0.
9992     </para>
9993    </sect2>
9994
9995    <sect2>
9996     <title>Changes</title>
9997
9998     <para>
9999      <programlisting>
10000 Fix many CLUSTER failures (Tom)
10001 Allow ALTER TABLE RENAME works on indexes (Tom)
10002 Fix plpgsql to handle datetime-&gt;timestamp and timespan-&gt;interval (Bruce)
10003 New configure --with-setproctitle switch to use setproctitle() (Marc, Bruce)
10004 Fix the off by one errors in ResultSet from 6.5.3, and more.
10005 jdbc ResultSet fixes (Joseph Shraibman)
10006 optimizer tunings (Tom)
10007 Fix create user for pgaccess
10008 Fix for UNLISTEN failure
10009 IRIX fixes (David Kaelbling)
10010 QNX fixes (Andreas Kardos)
10011 Reduce COPY IN lock level (Tom)
10012 Change libpqeasy to use PQconnectdb() style parameters (Bruce)
10013 Fix pg_dump to handle OID indexes (Tom)
10014 Fix small memory leak (Tom)
10015 Solaris fix for createdb/dropdb (Tatsuo)
10016 Fix for non-blocking connections (Alfred Perlstein)
10017 Fix improper recovery after RENAME TABLE failures (Tom)
10018 Copy pg_ident.conf.sample into /lib directory in install (Bruce)
10019 Add SJIS UDC (NEC selection IBM kanji) support (Eiji Tokuya)
10020 Fix too long syslog message (Tatsuo)
10021 Fix problem with quoted indexes that are too long (Tom)
10022 JDBC ResultSet.getTimestamp() fix (Gregory Krasnow & Floyd Marinescu)
10023 ecpg changes (Michael)
10024      </programlisting>
10025     </para>
10026    </sect2>
10027   </sect1>
10028
10029   <sect1 id="release-7-0">
10030    <title>Release 7.0</title>
10031
10032    <note>
10033    <title>Release date</title>
10034    <simpara>2000-05-08</simpara>
10035    </note>
10036
10037    <para> 
10038     This release contains improvements in many areas, demonstrating
10039     the continued growth of <productname>PostgreSQL</productname>.
10040     There are more improvements and fixes in 7.0 than in any previous
10041     release. The developers have confidence that this is the best
10042     release yet; we do our best to put out only solid releases, and
10043     this one is no exception.
10044    </para>
10045
10046    <para>
10047     Major changes in this release:
10048    </para>
10049
10050    <variablelist>
10051     <varlistentry>
10052      <term>
10053       Foreign Keys
10054      </term>
10055      <listitem>
10056       <para>
10057        Foreign keys are now implemented, with the exception of PARTIAL MATCH
10058        foreign keys. Many users have been asking for this feature, and we are
10059        pleased to offer it.
10060       </para>
10061      </listitem>
10062     </varlistentry>
10063
10064     <varlistentry>
10065      <term>
10066       Optimizer Overhaul
10067      </term>
10068      <listitem>
10069       <para>
10070        Continuing on work started a year ago, the optimizer has been
10071        improved, allowing better query plan selection and faster performance
10072        with less memory usage.
10073       </para>
10074      </listitem>
10075     </varlistentry>
10076
10077     <varlistentry>
10078      <term>
10079       Updated <application>psql</application>
10080      </term>
10081      <listitem>
10082       <para>
10083        <application>psql</application>, our interactive terminal monitor, has been
10084        updated with a variety of new features. See the <application>psql</application> manual page for details.
10085       </para>
10086      </listitem>
10087     </varlistentry>
10088
10089     <varlistentry>
10090      <term>
10091       Join Syntax
10092      </term>
10093      <listitem>
10094       <para>
10095        SQL92 join syntax is now supported, though only as
10096        <literal>INNER JOIN</> for this release. <literal>JOIN</>,
10097        <literal>NATURAL JOIN</>, <literal>JOIN</>/<literal>USING</>,
10098        and <literal>JOIN</>/<literal>ON</> are available, as are
10099        column correlation names.
10100       </para>
10101      </listitem>
10102
10103     </varlistentry>
10104    </variablelist>
10105
10106    <sect2>
10107     <title>Migration to version 7.0</title>
10108
10109     <para>
10110      A dump/restore using <application>pg_dump</application>
10111      is required for those wishing to migrate data from any
10112      previous release of <productname>PostgreSQL</productname>.
10113      For those upgrading from 6.5.*, you may instead use 
10114      <application>pg_upgrade</application> to upgrade to this
10115      release; however, a full dump/reload installation is always the
10116      most robust method for upgrades.
10117     </para>
10118
10119     <para>
10120      Interface and compatibility issues to consider for the new
10121      release include:
10122     </para>
10123
10124     <itemizedlist>
10125      <listitem>
10126       <para>
10127        The date/time types <type>datetime</type> and
10128        <type>timespan</type> have been superseded by the
10129        SQL92-defined types <type>timestamp</type> and
10130        <type>interval</type>. Although there has been some effort to
10131        ease the transition by allowing
10132        <productname>PostgreSQL</productname> to recognize
10133        the deprecated type names and translate them to the new type
10134        names, this mechanism may not be completely transparent to
10135        your existing application.
10136       </para>
10137      </listitem>
10138
10139      <listitem>
10140       <para>
10141        The optimizer has been substantially improved in the area of
10142        query cost estimation. In some cases, this will result in
10143        decreased query times as the optimizer makes a better choice
10144        for the preferred plan. However, in a small number of cases,
10145        usually involving pathological distributions of data, your
10146        query times may go up. If you are dealing with large amounts
10147        of data, you may want to check your queries to verify
10148        performance.
10149       </para>
10150      </listitem>
10151
10152      <listitem>
10153       <para>
10154        The <acronym>JDBC</acronym> and <acronym>ODBC</acronym>
10155        interfaces have been upgraded and extended.
10156       </para>
10157      </listitem>
10158
10159      <listitem>
10160       <para>
10161        The string function <function>CHAR_LENGTH</function> is now a
10162        native function. Previous versions translated this into a call
10163        to <function>LENGTH</function>, which could result in
10164        ambiguity with other types implementing
10165        <function>LENGTH</function> such as the geometric types.
10166       </para>
10167      </listitem>
10168     </itemizedlist>
10169    </sect2>
10170
10171    <sect2>
10172     <title>Changes</title>
10173
10174     <para>
10175      <programlisting>
10176 Bug Fixes
10177 ---------
10178 Prevent function calls exceeding maximum number of arguments (Tom)
10179 Improve CASE construct (Tom)
10180 Fix SELECT coalesce(f1,0) FROM int4_tbl GROUP BY f1 (Tom)
10181 Fix SELECT sentence.words[0] FROM sentence GROUP BY sentence.words[0] (Tom)
10182 Fix GROUP BY scan bug (Tom)
10183 Improvements in SQL grammar processing (Tom)
10184 Fix for views involved in INSERT ... SELECT ... (Tom)
10185 Fix for SELECT a/2, a/2 FROM test_missing_target GROUP BY a/2 (Tom)
10186 Fix for subselects in INSERT ... SELECT (Tom)
10187 Prevent INSERT ... SELECT ... ORDER BY (Tom)
10188 Fixes for relations greater than 2GB, including vacuum
10189 Improve propagating system table changes to other backends (Tom)
10190 Improve propagating user table changes to other backends (Tom)
10191 Fix handling of temp tables in complex situations (Bruce, Tom)
10192 Allow table locking at table open, improving concurrent reliability (Tom)
10193 Properly quote sequence names in pg_dump (Ross J. Reedstrom)
10194 Prevent DROP DATABASE while others accessing
10195 Prevent any rows from being returned by GROUP BY if no rows processed (Tom)
10196 Fix SELECT COUNT(1) FROM table WHERE ...' if no rows matching WHERE (Tom)
10197 Fix pg_upgrade so it works for MVCC (Tom)
10198 Fix for SELECT ... WHERE x IN (SELECT ... HAVING SUM(x) &gt; 1) (Tom)
10199 Fix for "f1 datetime DEFAULT 'now'"  (Tom)
10200 Fix problems with CURRENT_DATE used in DEFAULT (Tom)
10201 Allow comment-only lines, and ;;; lines too. (Tom)
10202 Improve recovery after failed disk writes, disk full (Hiroshi)
10203 Fix cases where table is mentioned in FROM but not joined (Tom)
10204 Allow HAVING clause without aggregate functions (Tom)
10205 Fix for "--" comment and no trailing newline, as seen in perl interface
10206 Improve pg_dump failure error reports (Bruce)
10207 Allow sorts and hashes to exceed 2GB file sizes (Tom)
10208 Fix for pg_dump dumping of inherited rules (Tom)
10209 Fix for NULL handling comparisons (Tom)
10210 Fix inconsistent state caused by failed CREATE/DROP commands (Hiroshi)
10211 Fix for dbname with dash
10212 Prevent DROP INDEX from interfering with other backends (Tom)
10213 Fix file descriptor leak in verify_password()
10214 Fix for "Unable to identify an operator =$" problem
10215 Fix ODBC so no segfault if CommLog and Debug enabled (Dirk Niggemann)
10216 Fix for recursive exit call (Massimo)
10217 Fix for extra-long timezones (Jeroen van Vianen)
10218 Make pg_dump preserve primary key information (Peter E)
10219 Prevent databases with single quotes (Peter E)
10220 Prevent DROP DATABASE inside  transaction (Peter E)
10221 ecpg memory leak fixes (Stephen Birch)
10222 Fix for SELECT null::text, SELECT int4fac(null) and SELECT 2 + (null) (Tom)
10223 Y2K timestamp fix (Massimo)
10224 Fix for VACUUM 'HEAP_MOVED_IN was not expected' errors (Tom)
10225 Fix for views with tables/columns containing spaces  (Tom)
10226 Prevent privileges on indexes (Peter E)
10227 Fix for spinlock stuck problem when error is generated (Hiroshi)
10228 Fix ipcclean on Linux
10229 Fix handling of NULL constraint conditions (Tom)
10230 Fix memory leak in odbc driver (Nick Gorham)
10231 Fix for privilege check on UNION tables (Tom)
10232 Fix to allow SELECT 'a' LIKE 'a' (Tom)
10233 Fix for SELECT 1 + NULL (Tom)
10234 Fixes to CHAR
10235 Fix log() on numeric type (Tom)
10236 Deprecate ':' and ';' operators
10237 Allow vacuum of temporary tables
10238 Disallow inherited columns with the same name as new columns
10239 Recover or force failure when disk space is exhausted (Hiroshi)
10240 Fix INSERT INTO ... SELECT with AS columns matching result columns
10241 Fix INSERT ... SELECT ... GROUP BY groups by target columns not source columns (Tom)
10242 Fix CREATE TABLE test (a char(5) DEFAULT text '', b int4) with INSERT (Tom)
10243 Fix UNION with LIMIT
10244 Fix CREATE TABLE x AS SELECT 1 UNION SELECT 2
10245 Fix CREATE TABLE test(col char(2) DEFAULT user)
10246 Fix mismatched types in CREATE TABLE ... DEFAULT
10247 Fix SELECT * FROM pg_class where oid in (0,-1)
10248 Fix SELECT COUNT('asdf') FROM pg_class WHERE oid=12
10249 Prevent user who can create databases can modifying pg_database table (Peter E)
10250 Fix btree to give a useful elog when key &gt; 1/2 (page - overhead) (Tom)
10251 Fix INSERT of 0.0 into DECIMAL(4,4) field (Tom)
10252
10253 Enhancements
10254 ------------
10255 New CLI interface include file sqlcli.h, based on SQL3/SQL98
10256 Remove all limits on query length, row length limit still exists (Tom)
10257 Update jdbc protocol to 2.0 (Jens Glaser <email>jens@jens.de</email>)
10258 Add TRUNCATE command to quickly truncate relation (Mike Mascari)
10259 Fix to give super user and createdb user proper update catalog rights (Peter E)
10260 Allow ecpg bool variables to have NULL values (Christof)
10261 Issue ecpg error if NULL value for variable with no NULL indicator (Christof)
10262 Allow ^C to cancel COPY command (Massimo)
10263 Add SET FSYNC and SHOW PG_OPTIONS commands(Massimo)
10264 Function name overloading for dynamically-loaded C functions (Frankpitt)
10265 Add CmdTuples() to libpq++(Vince)
10266 New CREATE CONSTRAINT TRIGGER and SET CONSTRAINTS commands(Jan)
10267 Allow CREATE FUNCTION/WITH clause to be used for all language types
10268 configure --enable-debug adds -g (Peter E)
10269 configure --disable-debug removes -g (Peter E)
10270 Allow more complex default expressions (Tom)
10271 First real FOREIGN KEY constraint trigger functionality (Jan)
10272 Add FOREIGN KEY ... MATCH FULL ... ON DELETE CASCADE (Jan)
10273 Add FOREIGN KEY ... MATCH &lt;unspecified&gt; referential actions (Don Baccus)
10274 Allow WHERE restriction on ctid (physical heap location) (Hiroshi)
10275 Move pginterface from contrib to interface directory, rename to pgeasy (Bruce)
10276 Change pgeasy connectdb() parameter ordering (Bruce)
10277 Require SELECT DISTINCT target list to have all ORDER BY columns (Tom)
10278 Add Oracle's COMMENT ON command (Mike Mascari <email>mascarim@yahoo.com</email>)
10279 libpq's PQsetNoticeProcessor function now returns previous hook(Peter E)
10280 Prevent PQsetNoticeProcessor from being set to NULL (Peter E)
10281 Make USING in COPY optional (Bruce)
10282 Allow subselects in the target list (Tom)
10283 Allow subselects on the left side of comparison operators (Tom)
10284 New parallel regression test (Jan)
10285 Change backend-side COPY to write files with permissions 644 not 666 (Tom)
10286 Force permissions on PGDATA directory to be secure, even if it exists (Tom)
10287 Added psql LASTOID variable to return last inserted oid (Peter E)
10288 Allow concurrent vacuum and remove pg_vlock vacuum lock file (Tom)
10289 Add privilege check for vacuum (Peter E)
10290 New libpq functions to allow asynchronous connections: PQconnectStart(), 
10291    PQconnectPoll(), PQresetStart(), PQresetPoll(), PQsetenvStart(), 
10292    PQsetenvPoll(), PQsetenvAbort (Ewan Mellor)
10293 New libpq PQsetenv() function (Ewan Mellor)
10294 create/alter user extension (Peter E)
10295 New postmaster.pid and postmaster.opts under $PGDATA (Tatsuo)
10296 New scripts for create/drop user/db (Peter E)
10297 Major psql overhaul (Peter E)
10298 Add const to libpq interface (Peter E)
10299 New libpq function PQoidValue (Peter E)
10300 Show specific non-aggregate causing problem with GROUP BY (Tom)
10301 Make changes to pg_shadow recreate pg_pwd file (Peter E)
10302 Add aggregate(DISTINCT ...) (Tom)
10303 Allow flag to control COPY input/output of NULLs (Peter E)
10304 Make postgres user have a password by default (Peter E)
10305 Add CREATE/ALTER/DROP GROUP (Peter E)
10306 All administration scripts now support --long options (Peter E, Karel)
10307 Vacuumdb script now supports --all option (Peter E)
10308 ecpg new portable FETCH syntax
10309 Add ecpg EXEC SQL IFDEF, EXEC SQL IFNDEF, EXEC SQL ELSE, EXEC SQL ELIF 
10310         and EXEC SQL ENDIF directives
10311 Add pg_ctl script to control backend start-up (Tatsuo)
10312 Add postmaster.opts.default file to store start-up flags (Tatsuo)
10313 Allow --with-mb=SQL_ASCII
10314 Increase maximum number of index keys to 16 (Bruce)
10315 Increase maximum number of function arguments to 16 (Bruce)
10316 Allow configuration of maximum number of index keys and arguments (Bruce)
10317 Allow unprivileged users to change their passwords (Peter E)
10318 Password authentication enabled; required for new users (Peter E)
10319 Disallow dropping a user who owns a database (Peter E)
10320 Change initdb option --with-mb to --enable-multibyte
10321 Add option for initdb to prompts for superuser password (Peter E)
10322 Allow complex type casts like col::numeric(9,2) and col::int2::float8 (Tom)
10323 Updated user interfaces on initdb, initlocation, pg_dump, ipcclean (Peter E)
10324 New pg_char_to_encoding() and pg_encoding_to_char() functions (Tatsuo)
10325 libpq non-blocking mode (Alfred Perlstein)
10326 Improve conversion of types in casts that don't specify a length
10327 New plperl internal programming language (Mark Hollomon)
10328 Allow COPY IN to read file that do not end with a newline (Tom)
10329 Indicate when long identifiers are truncated (Tom)
10330 Allow aggregates to use type equivalency (Peter E)
10331 Add Oracle's to_char(), to_date(), to_datetime(), to_timestamp(), to_number()
10332         conversion functions (Karel Zak &lt;zakkr@zf.jcu.cz&gt;)
10333 Add SELECT DISTINCT ON (expr [, expr ...]) targetlist ... (Tom)
10334 Check to be sure ORDER BY is compatible with the DISTINCT operation (Tom)
10335 Add NUMERIC and int8 types to ODBC
10336 Improve EXPLAIN results for Append, Group, Agg, Unique (Tom)
10337 Add ALTER TABLE ... ADD FOREIGN KEY (Stephan Szabo)
10338 Allow SELECT .. FOR UPDATE in PL/pgSQL (Hiroshi)
10339 Enable backward sequential scan even after reaching EOF (Hiroshi)
10340 Add btree indexing of boolean values, &gt;= and &lt;= (Don Baccus)
10341 Print current line number when COPY FROM fails (Massimo)
10342 Recognize POSIX time zone e.g. "PST+8" and "GMT-8" (Thomas)
10343 Add DEC as synonym for DECIMAL (Thomas)
10344 Add SESSION_USER as SQL92 key word, same as CURRENT_USER (Thomas)
10345 Implement SQL92 column aliases (aka correlation names) (Thomas)
10346 Implement SQL92 join syntax (Thomas)
10347 Make INTERVAL reserved word allowed as a column identifier (Thomas)
10348 Implement REINDEX command (Hiroshi)
10349 Accept ALL in aggregate function SUM(ALL col) (Tom)
10350 Prevent GROUP BY from using column aliases (Tom)
10351 New psql \encoding option (Tatsuo)
10352 Allow PQrequestCancel() to terminate when in waiting-for-lock state (Hiroshi)
10353 Allow negation of a negative number in all cases
10354 Add ecpg descriptors (Christof, Michael)
10355 Allow CREATE VIEW v AS SELECT f1::char(8) FROM tbl
10356 Allow casts with length, like foo::char(8)
10357 New libpq functions PQsetClientEncoding(), PQclientEncoding() (Tatsuo)
10358 Add support for SJIS user defined characters (Tatsuo)
10359 Larger views/rules supported
10360 Make libpq's PQconndefaults() thread-safe (Tom)
10361 Disable // as comment to be ANSI conforming, should use -- (Tom)
10362 Allow column aliases on views CREATE VIEW name (collist)
10363 Fixes for views with subqueries (Tom)
10364 Allow UPDATE table SET fld = (SELECT ...) (Tom)
10365 SET command options no longer require quotes
10366 Update pgaccess to 0.98.6
10367 New SET SEED command
10368 New pg_options.sample file
10369 New SET FSYNC command (Massimo)
10370 Allow pg_descriptions when creating tables
10371 Allow pg_descriptions when creating types, columns, and functions
10372 Allow psql \copy to allow delimiters (Peter E)
10373 Allow psql to print nulls as distinct from "" [null] (Peter E)
10374
10375 Types
10376 -----
10377 Many array fixes (Tom)
10378 Allow bare column names to be subscripted as arrays (Tom)
10379 Improve type casting of int and float constants (Tom)
10380 Cleanups for int8 inputs, range checking, and type conversion (Tom)
10381 Fix for SELECT timespan('21:11:26'::time) (Tom)
10382 netmask('x.x.x.x/0') is 255.255.255.255 instead of 0.0.0.0 (Oleg Sharoiko)
10383 Add btree index on NUMERIC (Jan)
10384 Perl fix for large objects containing NUL characters (Douglas Thomson) 
10385 ODBC fix for for large objects (free)
10386 Fix indexing of cidr data type
10387 Fix for Ethernet MAC addresses (macaddr type) comparisons
10388 Fix for date/time types when overflows happened in computations (Tom)
10389 Allow array on int8 (Peter E)
10390 Fix for rounding/overflow of NUMERIC type, like NUMERIC(4,4) (Tom)
10391 Allow NUMERIC arrays
10392 Fix bugs in NUMERIC ceil() and floor() functions (Tom)
10393 Make char_length()/octet_length including trailing blanks (Tom)
10394 Made abstime/reltime use int4 instead of time_t (Peter E)
10395 New lztext data type for compressed text fields
10396 Revise code to handle coercion of int and float constants (Tom)
10397 Start at new code to implement a BIT and BIT VARYING type (Adriaan Joubert)
10398 NUMERIC now accepts scientific notation (Tom)
10399 NUMERIC to int4 rounds (Tom)
10400 Convert float4/8 to NUMERIC properly (Tom)
10401 Allow type conversion with NUMERIC (Thomas)
10402 Make ISO date style (2000-02-16 09:33) the default (Thomas)
10403 Add NATIONAL CHAR [ VARYING ] (Thomas)
10404 Allow NUMERIC round and trunc to accept negative scales (Tom)
10405 New TIME WITH TIME ZONE type (Thomas)
10406 Add MAX()/MIN() on time type (Thomas)
10407 Add abs(), mod(), fac() for int8 (Thomas)
10408 Rename functions to round(), sqrt(), cbrt(), pow() for float8 (Thomas)
10409 Add transcendental math functions (e.g. sin(), acos()) for float8 (Thomas)
10410 Add exp() and ln() for NUMERIC type
10411 Rename NUMERIC power() to pow() (Thomas)
10412 Improved TRANSLATE() function (Edwin Ramirez, Tom)
10413 Allow X=-Y operators  (Tom)
10414 Allow SELECT float8(COUNT(*))/(SELECT COUNT(*) FROM t) FROM t GROUP BY f1; (Tom)
10415 Allow LOCALE to use indexes in regular expression searches (Tom)
10416 Allow creation of functional indexes to use default types
10417
10418 Performance
10419 -----------
10420 Prevent exponential space consumption with many AND's and OR's (Tom)
10421 Collect attribute selectivity values for system columns (Tom)
10422 Reduce memory usage of aggregates (Tom)
10423 Fix for LIKE optimization to use indexes with multibyte encodings (Tom)
10424 Fix r-tree index optimizer selectivity (Thomas)
10425 Improve optimizer selectivity computations and functions (Tom)
10426 Optimize btree searching for cases where many equal keys exist (Tom)
10427 Enable fast LIKE index processing only if index present (Tom)
10428 Re-use free space on index pages with duplicates (Tom)
10429 Improve hash join processing (Tom)
10430 Prevent descending sort if result is already sorted(Hiroshi)
10431 Allow commuting of index scan query qualifications (Tom)
10432 Prefer index scans in cases where ORDER BY/GROUP BY is required (Tom)
10433 Allocate large memory requests in fix-sized chunks for performance (Tom)
10434 Fix vacuum's performance by reducing memory allocation requests (Tom)
10435 Implement constant-expression simplification (Bernard Frankpitt, Tom)
10436 Use secondary columns to be used to determine start of index scan (Hiroshi)
10437 Prevent quadruple use of disk space when doing internal sorting (Tom)
10438 Faster sorting by calling fewer functions (Tom)
10439 Create system indexes to match all system caches (Bruce, Hiroshi)
10440 Make system caches use system indexes (Bruce)
10441 Make all system indexes unique (Bruce)
10442 Improve pg_statistics management for VACUUM speed improvement (Tom)
10443 Flush backend cache less frequently (Tom, Hiroshi)
10444 COPY now reuses previous memory allocation, improving performance (Tom)
10445 Improve optimization cost estimation (Tom)
10446 Improve optimizer estimate of range queries x &gt; lowbound AND x &lt; highbound (Tom)
10447 Use DNF instead of CNF where appropriate (Tom, Taral)
10448 Further cleanup for OR-of-AND WHERE-clauses (Tom)
10449 Make use of index in OR clauses (x = 1 AND y = 2) OR (x = 2 AND y = 4) (Tom)
10450 Smarter optimizer computations for random index page access (Tom)
10451 New SET variable to control optimizer costs (Tom)
10452 Optimizer queries based on LIMIT, OFFSET, and EXISTS qualifications (Tom)
10453 Reduce optimizer internal housekeeping of join paths for speedup (Tom)
10454 Major subquery speedup (Tom)
10455 Fewer fsync writes when fsync is not disabled (Tom)
10456 Improved LIKE optimizer estimates (Tom)
10457 Prevent fsync in SELECT-only queries (Vadim)
10458 Make index creation use psort code, because it is now faster (Tom)
10459 Allow creation of sort temp tables &gt; 1 Gig
10460
10461 Source Tree Changes
10462 -------------------
10463 Fix for linux PPC compile
10464 New generic expression-tree-walker subroutine (Tom)
10465 Change form() to varargform() to prevent portability problems
10466 Improved range checking for large integers on Alphas
10467 Clean up #include in /include directory (Bruce)
10468 Add scripts for checking includes (Bruce)
10469 Remove un-needed #include's from *.c files (Bruce)
10470 Change #include's to use &lt;&gt; and "" as appropriate (Bruce)
10471 Enable Windows compilation of libpq
10472 Alpha spinlock fix from Uncle George <email>gatgul@voicenet.com</email>
10473 Overhaul of optimizer data structures (Tom)
10474 Fix to cygipc library (Yutaka Tanida)
10475 Allow pgsql to work on newer Cygwin snapshots (Dan)
10476 New catalog version number (Tom)
10477 Add Linux ARM
10478 Rename heap_replace to heap_update
10479 Update for QNX (Dr. Andreas Kardos)
10480 New platform-specific regression handling (Tom)
10481 Rename oid8 -&gt; oidvector and int28 -&gt; int2vector (Bruce)
10482 Included all yacc and lex files into the distribution (Peter E.)
10483 Remove lextest, no longer needed (Peter E)
10484 Fix for libpq and psql on Windows (Magnus)
10485 Internally change datetime and timespan into timestamp and interval (Thomas)
10486 Fix for plpgsql on BSD/OS
10487 Add SQL_ASCII test case to the regression test (Tatsuo)
10488 configure --with-mb now deprecated (Tatsuo)
10489 NT fixes
10490 NetBSD fixes (Johnny C. Lam <email>lamj@stat.cmu.edu</email>)
10491 Fixes for Alpha compiles
10492 New multibyte encodings
10493      </programlisting>
10494     </para>
10495    </sect2>
10496   </sect1>
10497
10498   <sect1 id="release-6-5-3">
10499    <title>Release 6.5.3</title>
10500
10501    <note>
10502    <title>Release date</title>
10503    <simpara>1999-10-13</simpara>
10504    </note>
10505
10506    <para>
10507     This is basically a cleanup release for 6.5.2.  We have added a new
10508     <application>PgAccess</> that was missing in 6.5.2, and installed an NT-specific fix.
10509    </para>
10510
10511
10512    <sect2>
10513     <title>Migration to version 6.5.3</title>
10514
10515     <para>
10516      A dump/restore is <emphasis>not</emphasis> required for those running
10517      6.5.*.
10518     </para>
10519    </sect2>
10520    <sect2>
10521     <title>Changes</title>
10522
10523     <para>
10524      <programlisting>
10525 Updated version of pgaccess 0.98
10526 NT-specific patch
10527 Fix dumping rules on inherited tables
10528      </programlisting>
10529     </para>
10530    </sect2>
10531   </sect1>
10532
10533
10534   <sect1 id="release-6-5-2">
10535    <title>Release 6.5.2</title>
10536
10537    <note>
10538    <title>Release date</title>
10539    <simpara>1999-09-15</simpara>
10540    </note>
10541
10542    <para>
10543     This is basically a cleanup release for 6.5.1.  We have fixed a variety of
10544     problems reported by 6.5.1 users.
10545    </para>
10546
10547
10548    <sect2>
10549     <title>Migration to version 6.5.2</title>
10550
10551     <para>
10552      A dump/restore is <emphasis>not</emphasis> required for those running
10553      6.5.*.
10554     </para>
10555    </sect2>
10556
10557    <sect2>
10558     <title>Changes</title>
10559
10560     <para>
10561      <programlisting>
10562 subselect+CASE fixes(Tom)
10563 Add SHLIB_LINK setting for solaris_i386 and solaris_sparc ports(Daren Sefcik)
10564 Fixes for CASE in WHERE join clauses(Tom)
10565 Fix BTScan abort(Tom)
10566 Repair the check for redundant UNIQUE and PRIMARY KEY indexes(Thomas)
10567 Improve it so that it checks for multicolumn constraints(Thomas)
10568 Fix for Windows making problem with MB enabled(Hiroki Kataoka)
10569 Allow BSD yacc and bison to compile pl code(Bruce)
10570 Fix SET NAMES working
10571 int8 fixes(Thomas)
10572 Fix vacuum's memory consumption(Hiroshi,Tatsuo)
10573 Reduce the total memory consumption of vacuum(Tom)
10574 Fix for timestamp(datetime)
10575 Rule deparsing bugfixes(Tom)
10576 Fix quoting problems in mkMakefile.tcldefs.sh.in and mkMakefile.tkdefs.sh.in(Tom)
10577 This is to re-use space on index pages freed by vacuum(Vadim)
10578 document -x for pg_dump(Bruce)
10579 Fix for unary operators in rule deparser(Tom)
10580 Comment out FileUnlink of excess segments during mdtruncate()(Tom)
10581 IRIX linking fix from Yu Cao &gt;yucao@falcon.kla-tencor.com&lt;
10582 Repair logic error in LIKE: should not return LIKE_ABORT
10583    when reach end of pattern before end of text(Tom)
10584 Repair incorrect cleanup of heap memory allocation during transaction abort(Tom)
10585 Updated version of pgaccess 0.98
10586      </programlisting>
10587     </para>
10588    </sect2>
10589   </sect1>
10590
10591   <sect1 id="release-6-5-1">
10592    <title>Release 6.5.1</title>
10593
10594    <note>
10595    <title>Release date</title>
10596    <simpara>1999-07-15</simpara>
10597    </note>
10598
10599    <para>
10600     This is basically a cleanup release for 6.5.  We have fixed a variety of
10601     problems reported by 6.5 users.
10602    </para>
10603
10604    <sect2>
10605     <title>Migration to version 6.5.1</title>
10606
10607     <para>
10608      A dump/restore is <emphasis>not</emphasis> required for those running
10609      6.5.
10610     </para>
10611    </sect2>
10612
10613    <sect2>
10614     <title>Changes</title>
10615
10616     <para>
10617      <programlisting>
10618 Add NT README file
10619 Portability fixes for linux_ppc, IRIX, linux_alpha, OpenBSD, alpha
10620 Remove QUERY_LIMIT, use SELECT...LIMIT
10621 Fix for EXPLAIN on inheritance(Tom)
10622 Patch to allow vacuum on multisegment tables(Hiroshi)
10623 R-Tree optimizer selectivity fix(Tom)
10624 ACL file descriptor leak fix(Atsushi Ogawa)
10625 New expresssion subtree code(Tom)
10626 Avoid disk writes for read-only transactions(Vadim)
10627 Fix for removal of temp tables if last transaction was aborted(Bruce)
10628 Fix to prevent too large row from being created(Bruce)
10629 plpgsql fixes
10630 Allow port numbers 32k - 64k(Bruce)
10631 Add ^ precidence(Bruce)
10632 Rename sort files called pg_temp to pg_sorttemp(Bruce)
10633 Fix for microseconds in time values(Tom)
10634 Tutorial source cleanup
10635 New linux_m68k port
10636 Fix for sorting of NULL's in some cases(Tom)
10637 Shared library dependencies fixed (Tom)
10638 Fixed glitches affecting GROUP BY in subselects(Tom)
10639 Fix some compiler warnings (Tomoaki Nishiyama)
10640 Add Win1250 (Czech) support (Pavel Behal)
10641      </programlisting>
10642     </para>
10643    </sect2>
10644   </sect1>
10645
10646   <sect1 id="release-6-5">
10647    <title>Release 6.5</title>
10648
10649    <note>
10650    <title>Release date</title>
10651    <simpara>1999-06-09</simpara>
10652    </note>
10653
10654    <para>
10655     This release marks a major step in the development team's mastery of the source
10656     code we inherited from Berkeley.  You will see we are now easily adding
10657     major features, thanks to the increasing size and experience of our
10658     world-wide development team.
10659    </para>
10660
10661    <para>
10662     Here is a brief summary of the more notable changes:
10663
10664     <variablelist>
10665      <varlistentry>
10666       <term>
10667        Multiversion concurrency control(MVCC)
10668       </term>
10669       <listitem>
10670        <para>
10671         This removes our old table-level locking, and replaces it with
10672         a locking system that is superior to most commercial database
10673         systems.  In a traditional system, each row that is modified
10674         is locked until committed, preventing reads by other users.
10675         MVCC uses the natural multiversion nature of
10676         <productname>PostgreSQL</productname> to allow readers to
10677         continue reading consistent data during writer activity.
10678         Writers continue to use the compact pg_log transaction system.
10679         This is all performed without having to allocate a lock for
10680         every row like traditional database systems.  So, basically,
10681         we no longer are restricted by simple table-level locking; we
10682         have something better than row-level locking.
10683        </para>
10684       </listitem>
10685      </varlistentry>
10686
10687      <varlistentry>
10688       <term>
10689        Hot backups from <application>pg_dump</application>
10690       </term>
10691       <listitem>
10692        <para>
10693         <application>pg_dump</application> takes advantage of the new
10694         MVCC features to give a consistent database dump/backup while
10695         the database stays online and available for queries.
10696        </para>
10697       </listitem>
10698      </varlistentry>
10699
10700      <varlistentry>
10701       <term>
10702        Numeric data type
10703       </term>
10704       <listitem>
10705        <para>
10706         We now have a true numeric data type, with
10707         user-specified precision.
10708        </para>
10709       </listitem>
10710      </varlistentry>
10711
10712      <varlistentry>
10713       <term>
10714        Temporary tables
10715       </term>
10716       <listitem>
10717        <para>
10718         Temporary tables are guaranteed to have unique names
10719         within a database session, and are destroyed on session exit.
10720        </para>
10721       </listitem>
10722      </varlistentry>
10723
10724      <varlistentry>
10725       <term>
10726        New SQL features
10727       </term>
10728       <listitem>
10729        <para>
10730         We now have CASE, INTERSECT, and EXCEPT statement
10731         support.  We have new LIMIT/OFFSET, SET TRANSACTION ISOLATION LEVEL,
10732         SELECT ... FOR UPDATE, and an improved LOCK TABLE command.
10733        </para>
10734       </listitem>
10735      </varlistentry>
10736
10737      <varlistentry>
10738       <term>
10739        Speedups
10740       </term>
10741       <listitem>
10742        <para>
10743         We continue to speed up <productname>PostgreSQL</productname>,
10744         thanks to the variety of talents within our team.  We have
10745         sped up memory allocation, optimization, table joins, and row
10746         transfer routines.
10747        </para>
10748       </listitem>
10749      </varlistentry>
10750
10751      <varlistentry>
10752       <term>
10753        Ports
10754       </term>
10755       <listitem>
10756        <para>
10757         We continue to expand our port list, this time including
10758         <systemitem class="osname">Windows NT</>/<systemitem>ix86</> and <systemitem class="osname">NetBSD</>/<systemitem>arm32</>.
10759        </para>
10760       </listitem>
10761      </varlistentry>
10762
10763      <varlistentry>
10764       <term>
10765        Interfaces
10766       </term>
10767       <listitem>
10768        <para>
10769         Most interfaces have new versions, and existing functionality
10770         has been improved.
10771        </para>
10772       </listitem>
10773      </varlistentry>
10774
10775      <varlistentry>
10776       <term>
10777        Documentation
10778       </term>
10779       <listitem>
10780        <para>
10781         New and updated material is present throughout the
10782         documentation. New <acronym>FAQ</acronym>s have been
10783         contributed for <systemitem class="osname">SGI</> and <systemitem class="osname">AIX</> platforms.
10784         The <citetitle>Tutorial</citetitle> has introductory information
10785         on <acronym>SQL</acronym> from Stefan Simkovics.
10786         For the <citetitle>User's Guide</citetitle>, there are
10787         reference pages covering the postmaster and more utility
10788         programs, and a new appendix
10789         contains details on date/time behavior.
10790         The <citetitle>Administrator's Guide</citetitle> has a new
10791         chapter on troubleshooting from Tom Lane.
10792         And the <citetitle>Programmer's Guide</citetitle> has a
10793         description of query processing, also from Stefan, and details 
10794         on obtaining the <productname>PostgreSQL</productname> source
10795         tree via anonymous <productname>CVS</productname> and
10796         <productname>CVSup</productname>. 
10797        </para>
10798       </listitem>
10799      </varlistentry>
10800     </variablelist>
10801    </para>
10802
10803    <sect2>
10804     <title>Migration to version 6.5</title>
10805
10806     <para>
10807      A dump/restore using <application>pg_dump</application>
10808      is required for those wishing to migrate data from any
10809      previous release of <productname>PostgreSQL</productname>.
10810      <application>pg_upgrade</application> can <emphasis>not</emphasis>
10811      be used to upgrade to this release because the on-disk structure
10812      of the tables has changed compared to previous releases.
10813     </para>
10814
10815     <para>
10816      The new Multiversion Concurrency Control (MVCC) features can
10817      give somewhat different behaviors in multiuser
10818      environments. <emphasis>Read and understand the following section 
10819       to ensure that your existing applications will give you the
10820       behavior you need.</emphasis>
10821     </para>
10822
10823     <sect3>
10824      <title>Multiversion Concurrency Control</title>
10825
10826      <para>
10827       Because readers in 6.5 don't lock data, regardless of transaction
10828       isolation level, data read by one transaction can be overwritten by
10829       another. In other words, if a row is returned by
10830       <command>SELECT</command> it doesn't mean that this row really exists
10831       at the time it is returned (i.e. sometime after the statement or
10832       transaction began) nor that the row is protected from being deleted or
10833       updated by concurrent transactions before the current transaction does
10834       a commit or rollback.
10835      </para>
10836
10837      <para>
10838       To ensure the actual existence of a row and protect it against
10839       concurrent updates one must use <command>SELECT FOR UPDATE</command> or
10840       an appropriate <command>LOCK TABLE</command> statement. This should be
10841       taken into account when porting applications from previous releases of
10842       <productname>PostgreSQL</productname> and other environments.
10843      </para>
10844
10845      <para>
10846       Keep the above in mind if you are using
10847       <filename>contrib/refint.*</filename> triggers for
10848       referential integrity. Additional techniques are required now. One way is
10849       to use <command>LOCK parent_table IN SHARE ROW EXCLUSIVE MODE</command>
10850       command if a transaction is going to update/delete a primary key and
10851       use <command>LOCK parent_table IN SHARE MODE</command> command if a
10852       transaction is going to update/insert a foreign key.
10853
10854       <note>
10855        <para>
10856         Note that if you run a transaction in SERIALIZABLE mode then you must
10857         execute the <command>LOCK</command> commands above before execution of any
10858         <acronym>DML</acronym> statement
10859         (<command>SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO</command>) in the
10860         transaction.
10861        </para>
10862       </note>
10863      </para>
10864
10865      <para>
10866       These inconveniences will disappear in the future
10867       when the ability to read dirty
10868       (uncommitted) data (regardless of isolation level) and true referential
10869       integrity will be implemented.
10870      </para>
10871     </sect3>
10872     </sect2>
10873
10874    <sect2>
10875     <title>Changes</title>
10876
10877     <para>
10878      <programlisting>
10879 Bug Fixes
10880 ---------
10881 Fix text&lt;-&gt;float8 and text&lt;-&gt;float4 conversion functions(Thomas)
10882 Fix for creating tables with mixed-case constraints(Billy)
10883 Change exp()/pow() behavior to generate error on underflow/overflow(Jan)
10884 Fix bug in pg_dump -z
10885 Memory overrun cleanups(Tatsuo)
10886 Fix for lo_import crash(Tatsuo)
10887 Adjust handling of data type names to suppress double quotes(Thomas)
10888 Use type coercion for matching columns and DEFAULT(Thomas)
10889 Fix deadlock so it only checks once after one second of sleep(Bruce)
10890 Fixes for aggregates and PL/pgsql(Hiroshi)
10891 Fix for subquery crash(Vadim)
10892 Fix for libpq function PQfnumber and case-insensitive names(Bahman Rafatjoo)
10893 Fix for large object write-in-middle, no extra block, memory consumption(Tatsuo)
10894 Fix for pg_dump -d or -D and  quote special characters in INSERT
10895 Repair serious problems with dynahash(Tom)
10896 Fix INET/CIDR portability problems
10897 Fix problem with selectivity error in ALTER TABLE ADD COLUMN(Bruce)
10898 Fix executor so mergejoin of different column types works(Tom)
10899 Fix for Alpha OR selectivity bug
10900 Fix OR index selectivity problem(Bruce)
10901 Fix so \d shows proper length for char()/varchar()(Ryan)
10902 Fix tutorial code(Clark)
10903 Improve destroyuser checking(Oliver)
10904 Fix for Kerberos(Rodney McDuff)
10905 Fix for dropping database while dirty buffers(Bruce)
10906 Fix so sequence nextval() can be case-sensitive(Bruce)
10907 Fix !!= operator
10908 Drop buffers before destroying database files(Bruce)
10909 Fix case where executor evaluates functions twice(Tatsuo)
10910 Allow sequence nextval actions to be case-sensitive(Bruce)
10911 Fix optimizer indexing not working for negative numbers(Bruce)
10912 Fix for memory leak in executor with fjIsNull
10913 Fix for aggregate memory leaks(Erik Riedel)
10914 Allow user name containing a dash to grant privileges
10915 Cleanup of NULL in inet types
10916 Clean up system table bugs(Tom)
10917 Fix problems of PAGER and \? command(Masaaki Sakaida)
10918 Reduce default multisegment file size limit to 1GB(Peter)
10919 Fix for dumping of CREATE OPERATOR(Tom)
10920 Fix for backward scanning of cursors(Hiroshi Inoue)
10921 Fix for COPY FROM STDIN when using \i(Tom)
10922 Fix for subselect is compared inside an expression(Jan)
10923 Fix handling of error reporting while returning rows(Tom)
10924 Fix problems with reference to array types(Tom,Jan)
10925 Prevent UPDATE SET oid(Jan)
10926 Fix pg_dump so -t option can handle case-sensitive tablenames
10927 Fixes for GROUP BY in special cases(Tom, Jan)
10928 Fix for memory leak in failed queries(Tom)
10929 DEFAULT now supports mixed-case identifiers(Tom)
10930 Fix for multisegment uses of DROP/RENAME table, indexes(Ole Gjerde)
10931 Disable use of pg_dump with both -o and -d options(Bruce)
10932 Allow pg_dump to properly dump group privileges(Bruce)
10933 Fix GROUP BY in INSERT INTO table SELECT * FROM table2(Jan)
10934 Fix for computations in views(Jan)
10935 Fix for aggregates on array indexes(Tom)
10936 Fix for DEFAULT handles single quotes in value requiring too many quotes
10937 Fix security problem with non-super users importing/exporting large objects(Tom)
10938 Rollback of transaction that creates table cleaned up properly(Tom)
10939 Fix to allow long table and column names to generate proper serial names(Tom)
10940
10941 Enhancements
10942 ------------
10943 Add "vacuumdb" utility
10944 Speed up libpq by allocating memory better(Tom)
10945 EXPLAIN all indexes used(Tom)
10946 Implement CASE, COALESCE, NULLIF  expression(Thomas)
10947 New pg_dump table output format(Constantin)
10948 Add string min()/max() functions(Thomas)
10949 Extend new type coercion techniques to aggregates(Thomas)
10950 New moddatetime contrib(Terry)
10951 Update to pgaccess 0.96(Constantin)
10952 Add routines for single-byte "char" type(Thomas)
10953 Improved substr() function(Thomas)
10954 Improved multibyte handling(Tatsuo)
10955 Multiversion concurrency control/MVCC(Vadim)
10956 New Serialized mode(Vadim)
10957 Fix for tables over 2gigs(Peter)
10958 New SET TRANSACTION ISOLATION LEVEL(Vadim)
10959 New LOCK TABLE IN ... MODE(Vadim)
10960 Update ODBC driver(Byron)
10961 New NUMERIC data type(Jan)
10962 New SELECT FOR UPDATE(Vadim)
10963 Handle "NaN" and "Infinity" for input values(Jan)
10964 Improved date/year handling(Thomas)
10965 Improved handling of backend connections(Magnus)
10966 New options ELOG_TIMESTAMPS and USE_SYSLOG options for log files(Massimo)
10967 New TCL_ARRAYS option(Massimo)
10968 New INTERSECT and EXCEPT(Stefan)
10969 New pg_index.indisprimary for primary key tracking(D'Arcy)
10970 New pg_dump option to allow dropping of tables before creation(Brook)
10971 Speedup of row output routines(Tom)
10972 New READ COMMITTED isolation level(Vadim)
10973 New TEMP tables/indexes(Bruce)
10974 Prevent sorting if result is already sorted(Jan)
10975 New memory allocation optimization(Jan)
10976 Allow psql to do \p\g(Bruce)
10977 Allow multiple rule actions(Jan)
10978 Added LIMIT/OFFSET functionality(Jan)
10979 Improve optimizer when joining a large number of tables(Bruce)
10980 New intro to SQL from S. Simkovics' Master's Thesis (Stefan, Thomas)
10981 New intro to backend processing from S. Simkovics' Master's Thesis (Stefan)
10982 Improved int8 support(Ryan Bradetich, Thomas, Tom)
10983 New routines to convert between int8 and text/varchar types(Thomas)
10984 New bushy plans, where meta-tables are joined(Bruce)
10985 Enable right-hand queries by default(Bruce)
10986 Allow reliable maximum number of backends to be set at configure time
10987       (--with-maxbackends and postmaster switch (-N backends))(Tom)
10988 GEQO default now 10 tables because of optimizer speedups(Tom)
10989 Allow NULL=Var for MS-SQL portability(Michael, Bruce)
10990 Modify contrib check_primary_key() so either "automatic" or "dependent"(Anand)
10991 Allow psql \d on a view show query(Ryan)
10992 Speedup for LIKE(Bruce)
10993 Ecpg fixes/features, see src/interfaces/ecpg/ChangeLog file(Michael)
10994 JDBC fixes/features, see src/interfaces/jdbc/CHANGELOG(Peter)
10995 Make % operator have precedence like /(Bruce)
10996 Add new postgres -O option to allow system table structure changes(Bruce)
10997 Update contrib/pginterface/findoidjoins script(Tom)
10998 Major speedup in vacuum of deleted rows with indexes(Vadim) 
10999 Allow non-SQL functions to run different versions based on arguments(Tom)
11000 Add -E option that shows actual queries sent by \dt and friends(Masaaki Sakaida)
11001 Add version number in start-up banners for psql(Masaaki Sakaida)
11002 New contrib/vacuumlo removes large objects not referenced(Peter)
11003 New initialization for table sizes so non-vacuumed tables perform better(Tom)
11004 Improve error messages when a connection is rejected(Tom)
11005 Support for arrays of char() and varchar() fields(Massimo)
11006 Overhaul of hash code to increase reliability and performance(Tom)
11007 Update to PyGreSQL 2.4(D'Arcy)
11008 Changed debug options so -d4 and -d5 produce different node displays(Jan)
11009 New pg_options: pretty_plan, pretty_parse, pretty_rewritten(Jan)
11010 Better optimization statistics for system table access(Tom)
11011 Better handling of non-default block sizes(Massimo)
11012 Improve GEQO optimizer memory consumption(Tom)
11013 UNION now suppports ORDER BY of columns not in target list(Jan)
11014 Major libpq++ improvements(Vince Vielhaber)
11015 pg_dump now uses -z(ACL's) as default(Bruce)
11016 backend cache, memory speedups(Tom)
11017 have pg_dump do everything in one snapshot transaction(Vadim)
11018 fix for large object memory leakage, fix for pg_dumping(Tom)
11019 INET type now respects netmask for comparisons
11020 Make VACUUM ANALYZE only use a readlock(Vadim)
11021 Allow VIEWs on UNIONS(Jan)
11022 pg_dump now can generate consistent snapshots on active databases(Vadim)
11023
11024 Source Tree Changes
11025 -------------------
11026 Improve port matching(Tom)
11027 Portability fixes for SunOS
11028 Add Windows NT backend port and enable dynamic loading(Magnus and Daniel Horak)
11029 New port to Cobalt Qube(Mips) running Linux(Tatsuo)
11030 Port to NetBSD/m68k(Mr. Mutsuki Nakajima)
11031 Port to NetBSD/sun3(Mr. Mutsuki Nakajima)
11032 Port to NetBSD/macppc(Toshimi Aoki)
11033 Fix for tcl/tk configuration(Vince)
11034 Removed CURRENT key word for rule queries(Jan)
11035 NT dynamic loading now works(Daniel Horak)
11036 Add ARM32 support(Andrew McMurry)
11037 Better support for HP-UX 11 and UnixWare
11038 Improve file handling to be more uniform, prevent file descriptor leak(Tom)
11039 New install commands for plpgsql(Jan)
11040      </programlisting>
11041     </para>
11042    </sect2>
11043   </sect1>
11044
11045
11046 <sect1 id="release-6-4-2">
11047 <title>Release 6.4.2</title>
11048
11049    <note>
11050    <title>Release date</title>
11051    <simpara>1998-12-20</simpara>
11052    </note>
11053
11054 <para>
11055 The 6.4.1 release was improperly packaged.  This also has one additional
11056 bug fix.
11057 </para>
11058
11059
11060 <sect2>
11061 <title>Migration to version 6.4.2</title>
11062
11063 <para>
11064 A dump/restore is <emphasis>not</emphasis> required for those running
11065 6.4.*.
11066 </para>
11067 </sect2>
11068 <sect2>
11069 <title>Changes</title>
11070
11071 <para>
11072 <programlisting>
11073 Fix for datetime constant problem on some platforms(Thomas)
11074 </programlisting>
11075 </para>
11076 </sect2>
11077 </sect1>
11078
11079
11080
11081 <sect1 id="release-6-4-1">
11082 <title>Release 6.4.1</title>
11083
11084    <note>
11085    <title>Release date</title>
11086    <simpara>1998-12-18</simpara>
11087    </note>
11088
11089 <para>
11090 This is basically a cleanup release for 6.4.  We have fixed a variety of
11091 problems reported by 6.4 users.
11092 </para>
11093
11094
11095 <sect2>
11096 <title>Migration to version 6.4.1</title>
11097
11098 <para>
11099 A dump/restore is <emphasis>not</emphasis> required for those running
11100 6.4.
11101 </para>
11102 </sect2>
11103 <sect2>
11104 <title>Changes</title>
11105
11106 <para>
11107 <programlisting>
11108 Add pg_dump -N flag to force double quotes around identifiers.  This is
11109         the default(Thomas)
11110 Fix for NOT in where clause causing crash(Bruce)
11111 EXPLAIN VERBOSE coredump fix(Vadim)
11112 Fix shared-library problems on Linux
11113 Fix test for table existence to allow mixed-case and whitespace in
11114         the table name(Thomas)
11115 Fix a couple of pg_dump bugs
11116 Configure matches template/.similar entries better(Tom)
11117 Change builtin function names from SPI_* to spi_*
11118 OR WHERE clause fix(Vadim)
11119 Fixes for mixed-case table names(Billy)
11120 contrib/linux/postgres.init.csh/sh fix(Thomas)
11121 libpq memory overrun fix
11122 SunOS fixes(Tom)
11123 Change exp() behavior to generate error on underflow(Thomas)
11124 pg_dump fixes for memory leak, inheritance constraints, layout change
11125 update pgaccess to 0.93
11126 Fix prototype for 64-bit platforms
11127 Multibyte fixes(Tatsuo)
11128 New ecpg man page
11129 Fix memory overruns(Tatsuo)
11130 Fix for lo_import() crash(Bruce)
11131 Better search for install program(Tom)
11132 Timezone fixes(Tom)
11133 HP-UX fixes(Tom)
11134 Use implicit type coercion for matching DEFAULT values(Thomas)
11135 Add routines to help with single-byte (internal) character type(Thomas)
11136 Compilation of libpq for Windows fixes(Magnus)
11137 Upgrade to PyGreSQL 2.2(D'Arcy)
11138 </programlisting>
11139 </para>
11140 </sect2>
11141 </sect1>
11142
11143
11144
11145 <sect1 id="release-6-4">
11146 <title>Release 6.4</title>
11147
11148    <note>
11149    <title>Release date</title>
11150    <simpara>1998-10-30</simpara>
11151    </note>
11152
11153 <para>
11154 There are <emphasis>many</emphasis> new features and improvements in this release.
11155 Thanks to our developers and maintainers, nearly every aspect of the system
11156 has received some attention since the previous release.
11157 Here is a brief, incomplete summary:
11158
11159 <itemizedlist>
11160 <listitem>
11161 <para>
11162 Views and rules are now functional thanks to extensive new code in the 
11163 rewrite rules system from Jan Wieck. He also wrote a chapter on it
11164 for the <citetitle>Programmer's Guide</citetitle>.
11165 </para>
11166 </listitem>
11167 <listitem>
11168 <para>
11169 Jan also contributed a second procedural language, <application>PL/pgSQL</application>, to go with the
11170 original <application>PL/pgTCL</application> procedural language he contributed last release.
11171 </para>
11172 </listitem>
11173
11174 <listitem>
11175 <para>
11176 We have optional multiple-byte character set support from Tatsuo Ishii
11177 to complement our existing locale support.
11178 </para>
11179 </listitem>
11180
11181 <listitem>
11182 <para>
11183 Client/server communications has been cleaned up, with better support for
11184 asynchronous messages and interrupts thanks to Tom Lane.
11185 </para>
11186 </listitem>
11187
11188 <listitem>
11189 <para>
11190 The parser will now perform automatic type coercion to match arguments
11191 to available operators and functions, and to match columns and expressions
11192 with target columns. This uses a generic mechanism which supports
11193 the type extensibility features of <productname>PostgreSQL</productname>.
11194 There is a new chapter in the <citetitle>User's Guide</citetitle>
11195 which covers this topic.
11196 </para>
11197 </listitem>
11198
11199 <listitem>
11200 <para>
11201 Three new data types have been added. 
11202 Two types, <type>inet</type> and <type>cidr</type>, support various forms
11203 of IP network, subnet, and machine addressing. There is now an 8-byte integer
11204 type available on some platforms. See the chapter on data types
11205 in the <citetitle>User's Guide</citetitle> for details.
11206 A fourth type, <type>serial</type>, is now supported by the parser as an
11207 amalgam of the <type>int4</type> type, a sequence, and a unique index.
11208 </para>
11209 </listitem>
11210
11211 <listitem>
11212 <para>
11213 Several more <acronym>SQL92</acronym>-compatible syntax features have been
11214 added, including <command>INSERT DEFAULT VALUES</command>
11215 </para>
11216 </listitem>
11217
11218 <listitem>
11219 <para>
11220 The automatic configuration and installation system has received some
11221 attention, and should be more robust for more platforms than it has ever
11222 been.
11223 </para>
11224 </listitem>
11225
11226 </itemizedlist>
11227 </para>
11228
11229 <sect2>
11230 <title>Migration to version 6.4</title>
11231
11232 <para>
11233 A dump/restore using <application>pg_dump</application> 
11234 or <application>pg_dumpall</application>
11235 is required for those wishing to migrate data from any
11236 previous release of <productname>PostgreSQL</productname>.
11237 </para>
11238 </sect2>
11239
11240    <sect2>
11241 <title>Changes</title>
11242
11243     <para>
11244      <programlisting>
11245 Bug Fixes
11246 ---------
11247 Fix for a tiny memory leak in PQsetdb/PQfinish(Bryan)
11248 Remove char2-16 data types, use char/varchar(Darren)
11249 Pqfn not handles a NOTICE message(Anders)
11250 Reduced busywaiting overhead for spinlocks with many backends (dg)
11251 Stuck spinlock detection (dg)
11252 Fix up "ISO-style" timespan decoding and encoding(Thomas)
11253 Fix problem with table drop after rollback of transaction(Vadim)
11254 Change error message and remove non-functional update message(Vadim)
11255 Fix for COPY array checking
11256 Fix for SELECT 1 UNION SELECT NULL
11257 Fix for buffer leaks in large object calls(Pascal)
11258 Change owner from oid to int4 type(Bruce)
11259 Fix a bug in the oracle compatibility functions btrim() ltrim() and rtrim()
11260 Fix for shared invalidation cache overflow(Massimo)
11261 Prevent file descriptor leaks in failed COPY's(Bruce)
11262 Fix memory leak in libpgtcl's pg_select(Constantin)
11263 Fix problems with username/passwords over 8 characters(Tom)
11264 Fix problems with handling of asynchronous NOTIFY in backend(Tom)
11265 Fix of many bad system table entries(Tom)
11266
11267 Enhancements
11268 ------------
11269 Upgrade ecpg and ecpglib,see src/interfaces/ecpc/ChangeLog(Michael)
11270 Show the index used in an EXPLAIN(Zeugswetter)
11271 EXPLAIN  invokes  rule system and shows plan(s) for rewritten queries(Jan)
11272 Multibyte awareness of many data types and functions, via configure(Tatsuo)
11273 New configure --with-mb option(Tatsuo)
11274 New initdb --pgencoding option(Tatsuo)
11275 New createdb -E multibyte option(Tatsuo)
11276 Select version(); now returns PostgreSQL version(Jeroen)
11277 libpq now allows asynchronous clients(Tom)
11278 Allow cancel from client of backend query(Tom)
11279 psql now cancels query with Control-C(Tom)
11280 libpq users need not issue dummy queries to get NOTIFY messages(Tom)
11281 NOTIFY now sends sender's PID, so you can tell whether it was your own(Tom)
11282 PGresult struct now includes associated error message, if any(Tom)
11283 Define "tz_hour" and "tz_minute" arguments to date_part()(Thomas)
11284 Add routines to convert between varchar and bpchar(Thomas)
11285 Add routines to allow sizing of varchar and bpchar into target columns(Thomas)
11286 Add bit flags to support timezonehour and minute in data retrieval(Thomas)
11287 Allow more variations on valid floating point numbers (e.g. ".1", "1e6")(Thomas)
11288 Fixes for unary minus parsing with leading spaces(Thomas)
11289 Implement TIMEZONE_HOUR, TIMEZONE_MINUTE per SQL92 specs(Thomas)
11290 Check for and properly ignore FOREIGN KEY column constraints(Thomas)
11291 Define USER as synonym for CURRENT_USER per SQL92 specs(Thomas)
11292 Enable HAVING clause but no fixes elsewhere yet.
11293 Make "char" type a synonym for "char(1)" (actually implemented as bpchar)(Thomas)
11294 Save string type if specified for DEFAULT clause handling(Thomas)
11295 Coerce operations involving different data types(Thomas)
11296 Allow some index use for columns of different types(Thomas)
11297 Add capabilities for automatic type conversion(Thomas)
11298 Cleanups for large objects, so file is truncated on open(Peter)
11299 Readline cleanups(Tom)
11300 Allow psql  \f \ to make spaces as delimiter(Bruce)
11301 Pass pg_attribute.atttypmod to the frontend for column field lengths(Tom,Bruce)
11302 Msql compatibility library in /contrib(Aldrin)
11303 Remove the requirement that ORDER/GROUP BY clause identifiers be 
11304 included in the target list(David)
11305 Convert columns to match columns in UNION clauses(Thomas)
11306 Remove fork()/exec() and only do fork()(Bruce)
11307 Jdbc cleanups(Peter)
11308 Show backend status on ps command line(only works on some platforms)(Bruce)
11309 Pg_hba.conf now has a sameuser option in the database field
11310 Make lo_unlink take oid param, not int4
11311 New DISABLE_COMPLEX_MACRO for compilers that can't handle our macros(Bruce)
11312 Libpgtcl now handles NOTIFY as a Tcl event, need not send dummy queries(Tom)
11313 libpgtcl cleanups(Tom)
11314 Add -error option to libpgtcl's pg_result command(Tom)
11315 New locale patch, see docs/README/locale(Oleg)
11316 Fix for pg_dump so CONSTRAINT and CHECK syntax is correct(ccb)
11317 New contrib/lo code for large object orphan removal(Peter)
11318 New psql command "SET CLIENT_ENCODING TO 'encoding'" for multibytes
11319 feature, see /doc/README.mb(Tatsuo)
11320 contrib/noupdate code to revoke update permission on a column
11321 libpq can now be compiled on Windows(Magnus)
11322 Add PQsetdbLogin() in libpq
11323 New 8-byte integer type, checked by configure for OS support(Thomas)
11324 Better support for quoted table/column names(Thomas)
11325 Surround table and column names with double-quotes in pg_dump(Thomas)
11326 PQreset() now works with passwords(Tom)
11327 Handle case of GROUP BY target list column number out of range(David)
11328 Allow UNION in subselects
11329 Add auto-size to screen to \d? commands(Bruce)
11330 Use UNION to show all \d? results in one query(Bruce)
11331 Add \d? field search feature(Bruce)
11332 Pg_dump issues fewer \connect requests(Tom)
11333 Make pg_dump -z flag work better, document it in manual page(Tom)
11334 Add HAVING clause with full support for subselects and unions(Stephan)
11335 Full text indexing routines in contrib/fulltextindex(Maarten)
11336 Transaction ids now stored in shared memory(Vadim)
11337 New PGCLIENTENCODING when issuing COPY command(Tatsuo)
11338 Support for SQL92 syntax "SET NAMES"(Tatsuo)
11339 Support for LATIN2-5(Tatsuo)
11340 Add UNICODE regression test case(Tatsuo)
11341 Lock manager cleanup, new locking modes for LLL(Vadim)
11342 Allow index use with OR clauses(Bruce)
11343 Allows "SELECT NULL ORDER BY 1;"
11344 Explain VERBOSE prints the plan, and now pretty-prints the plan to
11345 the postmaster log file(Bruce)
11346 Add indexes display to \d command(Bruce)
11347 Allow GROUP BY on functions(David)
11348 New pg_class.relkind for large objects(Bruce)
11349 New way to send libpq NOTICE messages to a different location(Tom)
11350 New \w write command to psql(Bruce)
11351 New /contrib/findoidjoins scans oid columns to find join relationships(Bruce)
11352 Allow binary-compatible indexes to be considered when checking for valid
11353 Indexes for restriction clauses containing a constant(Thomas)
11354 New ISBN/ISSN code in /contrib/isbn_issn
11355 Allow NOT LIKE, IN, NOT IN, BETWEEN, and NOT BETWEEN constraint(Thomas)
11356 New rewrite system fixes many problems with rules and views(Jan)
11357         * Rules on relations work
11358         * Event qualifications on insert/update/delete work
11359         * New OLD variable to reference CURRENT, CURRENT will be remove in future
11360         * Update rules can reference NEW and OLD in rule qualifications/actions
11361         * Insert/update/delete rules on views work
11362         * Multiple rule actions are now supported, surrounded by parentheses
11363         * Regular users can create views/rules on tables they have RULE permits
11364         * Rules and views inherit the privileges of the creator
11365         * No rules at the column level
11366         * No UPDATE NEW/OLD rules
11367         * New pg_tables, pg_indexes, pg_rules and pg_views system views
11368         * Only a single action on SELECT rules
11369         * Total rewrite overhaul, perhaps for 6.5
11370         * handle subselects
11371         * handle aggregates on views
11372         * handle insert into select from view works
11373 System indexes are now multikey(Bruce)
11374 Oidint2, oidint4, and oidname types are removed(Bruce)
11375 Use system cache for more system table lookups(Bruce)
11376 New backend programming language PL/pgSQL in backend/pl(Jan)
11377 New SERIAL data type, auto-creates sequence/index(Thomas)
11378 Enable assert checking without a recompile(Massimo)
11379 User lock enhancements(Massimo)
11380 New setval() command to set sequence value(Massimo)
11381 Auto-remove unix socket file on start-up if no postmaster running(Massimo)
11382 Conditional trace package(Massimo)
11383 New UNLISTEN command(Massimo)
11384 psql and libpq now compile under Windows using win32.mak(Magnus)
11385 Lo_read no longer stores trailing NULL(Bruce)
11386 Identifiers are now truncated to 31 characters internally(Bruce)
11387 Createuser options now availble on the command line
11388 Code for 64-bit integer supported added, configure tested, int8 type(Thomas)
11389 Prevent file descriptor leaf from failed COPY(Bruce)
11390 New pg_upgrade command(Bruce)
11391 Updated /contrib directories(Massimo)
11392 New CREATE TABLE DEFAULT VALUES statement available(Thomas)
11393 New INSERT INTO TABLE DEFAULT VALUES statement available(Thomas)
11394 New DECLARE and FETCH feature(Thomas)
11395 libpq's internal structures now not exported(Tom)
11396 Allow up to 8 key indexes(Bruce)
11397 Remove ARCHIVE key word, that is no longer used(Thomas)
11398 pg_dump -n flag to supress quotes around indentifiers
11399 disable system columns for views(Jan)
11400 new INET and CIDR types for network addresses(TomH, Paul)
11401 no more double quotes in psql output
11402 pg_dump now dumps views(Terry)
11403 new SET QUERY_LIMIT(Tatsuo,Jan)
11404
11405 Source Tree Changes
11406 -------------------
11407 /contrib cleanup(Jun)
11408 Inline some small functions called for every row(Bruce)
11409 Alpha/linux fixes
11410 HP-UX cleanups(Tom)
11411 Multibyte regression tests(Soonmyung.)
11412 Remove --disabled options from configure
11413 Define PGDOC to use POSTGRESDIR by default
11414 Make regression optional
11415 Remove extra braces code to pgindent(Bruce)
11416 Add bsdi shared library support(Bruce)
11417 New --without-CXX support configure option(Brook)
11418 New FAQ_CVS
11419 Update backend flowchart in tools/backend(Bruce)
11420 Change atttypmod from int16 to int32(Bruce, Tom)
11421 Getrusage() fix for platforms that do not have it(Tom)
11422 Add PQconnectdb, PGUSER, PGPASSWORD to libpq man page
11423 NS32K platform fixes(Phil Nelson, John Buller)
11424 SCO 7/UnixWare 2.x fixes(Billy,others)
11425 Sparc/Solaris 2.5 fixes(Ryan)
11426 Pgbuiltin.3 is obsolete, move to doc files(Thomas)
11427 Even more documention(Thomas)
11428 Nextstep support(Jacek)
11429 Aix support(David)
11430 pginterface manual page(Bruce)
11431 shared libraries all have version numbers
11432 merged all OS-specific shared library defines into one file
11433 smarter TCL/TK configuration checking(Billy)
11434 smarter perl configuration(Brook)
11435 configure uses supplied install-sh if no install script found(Tom)
11436 new Makefile.shlib for shared library configuration(Tom)
11437 </programlisting>
11438 </para>
11439 </sect2>
11440 </sect1>
11441
11442 <sect1 id="release-6-3-2">
11443 <title>Release 6.3.2</title>
11444
11445    <note>
11446    <title>Release date</title>
11447    <simpara>1998-04-07</simpara>
11448    </note>
11449
11450 <para>
11451 This is a bug-fix release for 6.3.x.
11452 Refer to the release notes for version 6.3 for a more complete summary of new features.
11453 </para>
11454 <para>
11455 Summary:
11456
11457 <itemizedlist>
11458 <listitem>
11459 <para>
11460 Repairs automatic configuration support for some platforms, including Linux,
11461 from breakage inadvertently introduced in version 6.3.1.
11462 </para>
11463 </listitem>
11464
11465 <listitem>
11466 <para>
11467 Correctly handles function calls on the left side of BETWEEN and LIKE clauses.
11468 </para>
11469 </listitem>
11470
11471 </itemizedlist>
11472 </para>
11473 <para>
11474 A dump/restore is NOT required for those running 6.3 or 6.3.1.  A 
11475 <literal>make distclean</>, <literal>make</>, and <literal>make install</> is all that is required.
11476 This last step should be performed while the postmaster is not running.
11477 You should re-link any custom applications that use <productname>PostgreSQL</productname> libraries.
11478 </para>
11479 <para>
11480 For upgrades from pre-6.3 installations,
11481 refer to the installation and migration instructions for version 6.3.
11482 </para>
11483
11484    <sect2>
11485     <title>Changes</title>
11486
11487     <para>
11488      <programlisting>
11489 Configure detection improvements for tcl/tk(Brook Milligan, Alvin)
11490 Manual page improvements(Bruce)
11491 BETWEEN and LIKE fix(Thomas)
11492 fix for psql \connect used by pg_dump(Oliver Elphick)
11493 New odbc driver
11494 pgaccess, version 0.86
11495 qsort removed, now uses libc version, cleanups(Jeroen)
11496 fix for buffer over-runs detected(Maurice Gittens)
11497 fix for buffer overrun in libpgtcl(Randy Kunkee)
11498 fix for UNION with DISTINCT or ORDER BY(Bruce)
11499 gettimeofday configure check(Doug Winterburn)
11500 Fix "indexes not used" bug(Vadim)
11501 docs additions(Thomas)
11502 Fix for backend memory leak(Bruce)
11503 libreadline cleanup(Erwan MAS)
11504 Remove DISTDIR(Bruce)
11505 Makefile dependency cleanup(Jeroen van Vianen)
11506 ASSERT fixes(Bruce)
11507      </programlisting>
11508     </para>
11509    </sect2>
11510   </sect1>
11511
11512   <sect1 id="release-6-3-1">
11513    <title>Release 6.3.1</title>
11514
11515    <note>
11516    <title>Release date</title>
11517    <simpara>1998-03-23</simpara>
11518    </note>
11519
11520    <para>
11521     Summary:
11522
11523 <itemizedlist>
11524 <listitem>
11525 <para>
11526 Additional support for multibyte character sets.
11527 </para>
11528 </listitem>
11529
11530 <listitem>
11531 <para>
11532 Repair byte ordering for mixed-endian clients and servers.
11533 </para>
11534 </listitem>
11535
11536 <listitem>
11537 <para>
11538 Minor updates to allowed SQL syntax.
11539 </para>
11540 </listitem>
11541
11542 <listitem>
11543 <para>
11544 Improvements to the configuration autodetection for installation.
11545 </para>
11546 </listitem>
11547
11548 </itemizedlist>
11549 </para>
11550 <para>
11551 A dump/restore is NOT required for those running 6.3.  A 
11552 <literal>make distclean</>, <literal>make</>, and <literal>make install</> is all that is required.
11553 This last step should be performed while the postmaster is not running.
11554 You should re-link any custom applications that use <productname>PostgreSQL</productname> libraries.
11555 </para>
11556 <para>
11557 For upgrades from pre-6.3 installations,
11558 refer to the installation and migration instructions for version 6.3.
11559 </para>
11560
11561    <sect2>
11562     <title>Changes</title>
11563
11564     <para>
11565      <programlisting>
11566 ecpg cleanup/fixes, now version 1.1(Michael Meskes)
11567 pg_user cleanup(Bruce)
11568 large object fix for pg_dump and tclsh (alvin)
11569 LIKE fix for multiple adjacent underscores
11570 fix for redefining builtin functions(Thomas)
11571 ultrix4 cleanup
11572 upgrade to pg_access 0.83
11573 updated CLUSTER manual page
11574 multibyte character set support, see doc/README.mb(Tatsuo)
11575 configure --with-pgport fix
11576 pg_ident fix
11577 big-endian fix for backend communications(Kataoka)
11578 SUBSTR() and substring() fix(Jan)
11579 several jdbc fixes(Peter)
11580 libpgtcl improvements, see libptcl/README(Randy Kunkee)
11581 Fix for "Datasize = 0" error(Vadim)
11582 Prevent \do from wrapping(Bruce)
11583 Remove duplicate Russian character set entries
11584 Sunos4 cleanup
11585 Allow optional TABLE key word in LOCK and SELECT INTO(Thomas)
11586 CREATE SEQUENCE options to allow a negative integer(Thomas)
11587 Add "PASSWORD" as an allowed column identifier(Thomas)
11588 Add checks for UNION target fields(Bruce)
11589 Fix Alpha port(Dwayne Bailey)
11590 Fix for text arrays containing quotes(Doug Gibson)
11591 Solaris compile fix(Albert Chin-A-Young)
11592 Better identify tcl and tk libs and includes(Bruce)
11593      </programlisting>
11594     </para>
11595    </sect2>
11596   </sect1>
11597
11598   <sect1 id="release-6-3">
11599    <title>Release 6.3</title>
11600
11601    <note>
11602    <title>Release date</title>
11603    <simpara>1998-03-01</simpara>
11604    </note>
11605
11606    <para>
11607     There are <emphasis>many</emphasis> new features and improvements in this release.
11608     Here is a brief, incomplete summary:
11609
11610     <itemizedlist>
11611      <listitem>
11612       <para>
11613        Many new SQL features, including
11614        full <acronym>SQL92</acronym> subselect capability
11615        (everything is here but target-list subselects).
11616       </para>
11617      </listitem>
11618
11619      <listitem>
11620       <para>
11621        Support for client-side environment variables to specify time zone and date style.
11622       </para>
11623      </listitem>
11624
11625      <listitem>
11626       <para>
11627        Socket interface for client/server connection. This is the default now
11628        so you may need to start <application>postmaster</application> with the
11629        <option>-i</option> flag.
11630       </para>
11631      </listitem>
11632
11633      <listitem>
11634       <para>
11635        Better password authorization mechanisms. Default table privileges have changed.
11636       </para>
11637      </listitem>
11638
11639      <listitem>
11640       <para>
11641        Old-style <firstterm>time travel</firstterm>
11642        has been removed. Performance has been improved.
11643       </para>
11644      </listitem>
11645     </itemizedlist>
11646    </para>
11647
11648    <note>
11649     <para>
11650      Bruce Momjian wrote the following notes to introduce the new release.
11651     </para>
11652    </note>
11653
11654    <para>
11655     There are some general 6.3 issues that I want to mention.  These are
11656     only the big items that cannot be described in one sentence.  A review
11657     of the detailed changes list is still needed.
11658    </para>
11659    <para>
11660     First, we now have subselects.  Now that we have them, I would like to
11661     mention that without subselects, SQL is a very limited language.
11662     Subselects are a major feature, and you should review your code for
11663     places where subselects provide a better solution for your queries.  I
11664     think you will find that there are more uses for subselects than you may
11665     think.  Vadim has put us on the big SQL map with subselects, and fully
11666     functional ones too.  The only thing you can't do with subselects is to
11667     use them in the target list.
11668    </para>
11669    <para>
11670     Second, 6.3 uses Unix domain sockets rather than TCP/IP by default.  To
11671     enable connections from other machines, you have to use the new
11672     postmaster -i option, and of course edit <filename>pg_hba.conf</filename>.  Also, for this
11673     reason, the format of <filename>pg_hba.conf</filename> has changed.
11674    </para>
11675    <para>
11676     Third, <type>char()</type> fields will now allow faster access than <type>varchar()</type> or
11677     <type>text</type>. Specifically, the <type>text</> and <type>varchar()</type> have a penalty for access to
11678     any columns after the first column of this type.  <type>char()</type> used to also
11679     have this access penalty, but it no longer does.  This may suggest that
11680     you redesign some of your tables, especially if you have short character
11681     columns that you have defined as <type>varchar()</type> or <type>text</type>.  This and other
11682     changes make 6.3 even faster than earlier releases.
11683    </para>
11684    <para>
11685     We now have passwords definable independent of any Unix file.  There are
11686     new SQL USER commands.
11687     See the <citetitle>Administrator's Guide</citetitle> for more
11688     information.  There is a new table, pg_shadow, which is used to store
11689     user information and user passwords, and it by default only SELECT-able
11690     by the <systemitem>postgres</systemitem> super-user.  pg_user is now a view of pg_shadow, and is
11691     SELECT-able by PUBLIC.  You should keep using pg_user in your
11692     application without changes.
11693    </para>
11694    <para>
11695     User-created tables now no longer have SELECT privilege to PUBLIC by
11696     default.  This was done because the ANSI standard requires it.  You can
11697     of course GRANT any privileges you want after the table is created. 
11698     System tables continue to be SELECT-able by PUBLIC.
11699    </para>
11700    <para>
11701     We also have real deadlock detection code.  No more sixty-second
11702     timeouts.  And the new locking code implements a <acronym>FIFO</acronym> better, so there
11703     should be less resource starvation during heavy use.
11704    </para>
11705    <para>
11706     Many complaints have been made about inadequate documentation in previous
11707     releases.  Thomas has put much effort into many new manuals for this
11708     release.  Check out the doc/ directory.
11709    </para>
11710    <para>
11711     For performance reasons, time travel is gone, but can be implemented
11712     using triggers (see <filename>pgsql/contrib/spi/README</filename>).  Please check out the new
11713     \d command for types, operators, etc.  Also, views have their own
11714     privileges now, not based on the underlying tables, so privileges on
11715     them have to be set separately.  Check <filename>/pgsql/interfaces</filename> for some new
11716     ways to talk to <productname>PostgreSQL</productname>.
11717    </para>
11718    <para>
11719     This is the first release that really required an explanation for
11720     existing users.  In many ways, this was necessary because the new
11721     release removes many limitations, and the work-arounds people were using
11722     are no longer needed.
11723    </para>
11724
11725    <sect2>
11726     <title>Migration to version 6.3</title>
11727
11728     <para>
11729      A dump/restore using <application>pg_dump</application> 
11730      or <application>pg_dumpall</application>
11731      is required for those wishing to migrate data from any
11732      previous release of <productname>PostgreSQL</productname>.
11733     </para>
11734    </sect2>
11735
11736    <sect2>
11737     <title>Changes</title>
11738
11739     <para>
11740      <programlisting>
11741 Bug Fixes
11742 ---------
11743 Fix binary cursors broken by MOVE implementation(Vadim)
11744 Fix for tcl library crash(Jan)
11745 Fix for array handling, from Gerhard Hintermayer
11746 Fix acl error, and remove duplicate pqtrace(Bruce)
11747 Fix psql \e for empty file(Bruce)
11748 Fix for textcat on varchar() fields(Bruce)
11749 Fix for DBT Sendproc (Zeugswetter Andres)
11750 Fix vacuum analyze syntax problem(Bruce)
11751 Fix for international identifiers(Tatsuo)
11752 Fix aggregates on inherited tables(Bruce)
11753 Fix substr() for out-of-bounds data
11754 Fix for select 1=1 or 2=2, select 1=1 and 2=2, and select sum(2+2)(Bruce)
11755 Fix notty output to show status result.  -q option still turns it off(Bruce)
11756 Fix for count(*), aggs with views and multiple tables and sum(3)(Bruce)
11757 Fix cluster(Bruce)
11758 Fix for PQtrace start/stop several times(Bruce)
11759 Fix a variety of locking problems like newer lock waiters getting
11760         lock before older waiters, and having readlock people not share
11761         locks if a writer is waiting for a lock, and waiting writers not
11762         getting priority over waiting readers(Bruce)
11763 Fix crashes in psql when executing queries from external files(James)
11764 Fix problem with multiple order by columns, with the first one having
11765         NULL values(Jeroen)
11766 Use correct hash table support functions for float8 and int4(Thomas)
11767 Re-enable JOIN= option in CREATE OPERATOR statement (Thomas)
11768 Change precedence for boolean operators to match expected behavior(Thomas)
11769 Generate elog(ERROR) on over-large integer(Bruce)
11770 Allow multiple-argument functions in constraint clauses(Thomas)
11771 Check boolean input literals for 'true','false','yes','no','1','0'
11772         and throw elog(ERROR) if unrecognized(Thomas)
11773 Major large objects fix
11774 Fix for GROUP BY showing duplicates(Vadim)
11775 Fix for index scans in MergeJion(Vadim)
11776
11777 Enhancements
11778 ------------
11779 Subselects with EXISTS, IN, ALL, ANY key words (Vadim, Bruce, Thomas)
11780 New User Manual(Thomas, others)
11781 Speedup by inlining some frequently-called functions
11782 Real deadlock detection, no more timeouts(Bruce)
11783 Add SQL92 "constants" CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, 
11784         CURRENT_USER(Thomas)
11785 Modify constraint syntax to be SQL92-compliant(Thomas)
11786 Implement SQL92 PRIMARY KEY and UNIQUE clauses using indexes(Thomas)
11787 Recognize SQL92 syntax for FOREIGN KEY. Throw elog notice(Thomas)
11788 Allow NOT NULL UNIQUE constraint clause (each allowed separately before)(Thomas)
11789 Allow PostgreSQL-style casting ("::") of non-constants(Thomas)
11790 Add support for SQL3 TRUE and FALSE boolean constants(Thomas)
11791 Support SQL92 syntax for IS TRUE/IS FALSE/IS NOT TRUE/IS NOT FALSE(Thomas)
11792 Allow shorter strings for boolean literals (e.g. "t", "tr", "tru")(Thomas)
11793 Allow SQL92 delimited identifiers(Thomas)
11794 Implement SQL92 binary and hexadecimal string decoding (b'10' and x'1F')(Thomas)
11795 Support SQL92 syntax for type coercion of literal strings
11796         (e.g. "DATETIME 'now'")(Thomas)
11797 Add conversions for int2, int4, and OID types to and from text(Thomas)
11798 Use shared lock when building indexes(Vadim)
11799 Free memory allocated for an user query inside transaction block after
11800         this query is done, was turned off in &lt;= 6.2.1(Vadim)
11801 New SQL statement CREATE PROCEDURAL LANGUAGE(Jan)
11802 New <productname>PostgreSQL</productname> Procedural Language (PL) backend interface(Jan)
11803 Rename pg_dump -H option to -h(Bruce)
11804 Add Java support for passwords, European dates(Peter)
11805 Use indexes for LIKE and ~, !~ operations(Bruce)
11806 Add hash functions for datetime and timespan(Thomas)
11807 Time Travel removed(Vadim, Bruce)
11808 Add paging for \d and \z, and fix \i(Bruce)
11809 Add Unix domain socket support to backend and to frontend library(Goran)
11810 Implement CREATE DATABASE/WITH LOCATION and initlocation utility(Thomas)
11811 Allow more SQL92 and/or <productname>PostgreSQL</productname> reserved words as column identifiers(Thomas)
11812 Augment support for SQL92 SET TIME ZONE...(Thomas)
11813 SET/SHOW/RESET TIME ZONE uses TZ backend environment variable(Thomas)
11814 Implement SET keyword = DEFAULT and SET TIME ZONE DEFAULT(Thomas)
11815 Enable SET TIME ZONE using TZ environment variable(Thomas)
11816 Add PGDATESTYLE environment variable to frontend and backend initialization(Thomas)
11817 Add PGTZ, PGCOSTHEAP, PGCOSTINDEX, PGRPLANS, PGGEQO
11818         frontend library initialization environment variables(Thomas)
11819 Regression tests time zone automatically set with "setenv PGTZ PST8PDT"(Thomas)
11820 Add pg_description table for info on tables, columns, operators, types, and
11821         aggregates(Bruce)
11822 Increase 16 char limit on system table/index names to 32 characters(Bruce)
11823 Rename system indexes(Bruce)
11824 Add 'GERMAN' option to SET DATESTYLE(Thomas)
11825 Define an "ISO-style" timespan output format with "hh:mm:ss" fields(Thomas)
11826 Allow fractional values for delta times (e.g. '2.5 days')(Thomas)
11827 Validate numeric input more carefully for delta times(Thomas)
11828 Implement day of year as possible input to date_part()(Thomas)
11829 Define timespan_finite() and text_timespan() functions(Thomas)
11830 Remove archive stuff(Bruce)
11831 Allow for a pg_password authentication database that is separate from
11832         the system password file(Todd)
11833 Dump ACLs, GRANT, REVOKE privileges(Matt)
11834 Define text, varchar, and bpchar string length functions(Thomas)
11835 Fix Query handling for inheritance, and cost computations(Bruce)
11836 Implement CREATE TABLE/AS SELECT (alternative to SELECT/INTO)(Thomas)
11837 Allow NOT, IS NULL, IS NOT NULL in constraints(Thomas)
11838 Implement UNIONs for SELECT(Bruce)
11839 Add UNION, GROUP, DISTINCT to INSERT(Bruce)
11840 varchar() stores only necessary bytes on disk(Bruce)
11841 Fix for BLOBs(Peter)
11842 Mega-Patch for JDBC...see README_6.3 for list of changes(Peter)
11843 Remove unused "option" from PQconnectdb()
11844 New LOCK command and lock manual page describing deadlocks(Bruce)
11845 Add new psql \da, \dd, \df, \do, \dS, and \dT commands(Bruce)
11846 Enhance psql \z to show sequences(Bruce)
11847 Show NOT NULL and DEFAULT in psql \d table(Bruce)
11848 New psql .psqlrc file start-up(Andrew)
11849 Modify sample start-up script in contrib/linux to show syslog(Thomas)
11850 New types for IP and MAC addresses in contrib/ip_and_mac(TomH)
11851 Unix system time conversions with date/time types in contrib/unixdate(Thomas)
11852 Update of contrib stuff(Massimo)
11853 Add Unix socket support to DBD::Pg(Goran)
11854 New python interface (PyGreSQL 2.0)(D'Arcy)
11855 New frontend/backend protocol has a version number, network byte order(Phil)
11856 Security features in pg_hba.conf enhanced and documented, many cleanups(Phil)
11857 CHAR() now faster access than VARCHAR() or TEXT
11858 ecpg embedded SQL preprocessor
11859 Reduce system column overhead(Vadmin)
11860 Remove pg_time table(Vadim)
11861 Add pg_type attribute to identify types that need length (bpchar, varchar)
11862 Add report of offending line when COPY command fails
11863 Allow VIEW privileges to be set separately from the underlying tables. 
11864         For security, use GRANT/REVOKE on views as appropriate(Jan)
11865 Tables now have no default GRANT SELECT TO PUBLIC.  You must
11866         explicitly grant such privileges.
11867 Clean up tutorial examples(Darren)
11868
11869 Source Tree Changes
11870 -------------------
11871 Add new html development tools, and flow chart in /tools/backend
11872 Fix for SCO compiles
11873 Stratus computer port Robert Gillies
11874 Added support for shlib for BSD44_derived & i386_solaris
11875 Make configure more automated(Brook)
11876 Add script to check regression test results
11877 Break parser functions into smaller files, group together(Bruce)
11878 Rename heap_create to heap_create_and_catalog, rename heap_creatr
11879         to heap_create()(Bruce)
11880 Sparc/Linux patch for locking(TomS)
11881 Remove PORTNAME and reorganize port-specific stuff(Marc)
11882 Add optimizer README file(Bruce)
11883 Remove some recursion in optimizer and clean up some code there(Bruce)
11884 Fix for NetBSD locking(Henry)
11885 Fix for libptcl make(Tatsuo)
11886 AIX patch(Darren)
11887 Change IS TRUE, IS FALSE, ... to expressions using "=" rather than
11888         function calls to istrue() or isfalse() to allow optimization(Thomas)
11889 Various fixes NetBSD/Sparc related(TomH)
11890 Alpha linux locking(Travis,Ryan)
11891 Change elog(WARN) to elog(ERROR)(Bruce)
11892 FAQ for FreeBSD(Marc)
11893 Bring in the PostODBC source tree as part of our standard distribution(Marc)
11894 A minor patch for HP/UX 10 vs 9(Stan)
11895 New pg_attribute.atttypmod for type-specific info like varchar length(Bruce)
11896 UnixWare patches(Billy)
11897 New i386 'lock' for spinlock asm(Billy)
11898 Support for multiplexed backends is removed
11899 Start an OpenBSD port
11900 Start an AUX port
11901 Start a Cygnus port
11902 Add string functions to regression suite(Thomas)
11903 Expand a few function names formerly truncated to 16 characters(Thomas)
11904 Remove un-needed malloc() calls and replace with palloc()(Bruce)
11905 </programlisting>
11906 </para>
11907 </sect2>
11908 </sect1>
11909
11910 <sect1 id="release-6-2-1">
11911 <title>Release 6.2.1</title>
11912
11913    <note>
11914    <title>Release date</title>
11915    <simpara>1997-10-17</simpara>
11916    </note>
11917
11918 <para>
11919 6.2.1 is a bug-fix and usability release on 6.2.
11920 </para>
11921 <para>
11922 Summary:
11923
11924 <itemizedlist>
11925 <listitem>
11926 <para>
11927 Allow strings to span lines, per <acronym>SQL92</acronym>.
11928 </para>
11929 </listitem>
11930
11931 <listitem>
11932 <para>
11933 Include example trigger function for inserting user names on table updates.
11934 </para>
11935 </listitem>
11936
11937 </itemizedlist>
11938 </para>
11939 <para>
11940 This is a minor bug-fix release on 6.2. 
11941 For upgrades from pre-6.2 systems, a full dump/reload is required. 
11942 Refer to the 6.2 release notes for instructions.
11943 </para>
11944
11945 <sect2>
11946 <title>Migration from version 6.2 to version 6.2.1</title>
11947
11948 <para>
11949 This is a minor bug-fix release. A dump/reload is not required from version 6.2,
11950 but is required from any release prior to 6.2.
11951 </para>
11952 <para>
11953 In upgrading from version 6.2, if you choose to dump/reload you will find that
11954 avg(money) is now calculated correctly. All other bug fixes take effect
11955 upon updating the executables.
11956 </para>
11957 <para>
11958 Another way to avoid dump/reload is to use the following SQL command
11959 from <command>psql</command> to update the existing system table:
11960
11961 <programlisting>
11962   update pg_aggregate set aggfinalfn = 'cash_div_flt8'
11963    where aggname = 'avg' and aggbasetype = 790;
11964 </programlisting>
11965 </para>
11966 <para>
11967 This will need to be done to every existing database, including template1.
11968 </para>
11969 </sect2>
11970
11971    <sect2>
11972     <title>Changes</title>
11973
11974     <para>
11975      <programlisting>
11976 Allow TIME and TYPE column names(Thomas)
11977 Allow larger range of true/false as boolean values(Thomas)
11978 Support output of "now" and "current"(Thomas)
11979 Handle DEFAULT with INSERT of NULL properly(Vadim)
11980 Fix for relation reference counts problem in buffer manager(Vadim)
11981 Allow strings to span lines, like ANSI(Thomas)
11982 Fix for backward cursor with ORDER BY(Vadim)
11983 Fix avg(cash) computation(Thomas)
11984 Fix for specifying a column twice in ORDER/GROUP BY(Vadim)
11985 Documented new libpq function to return affected rows, PQcmdTuples(Bruce)
11986 Trigger function for inserting user names for INSERT/UPDATE(Brook Milligan)
11987      </programlisting>
11988     </para>
11989    </sect2>
11990   </sect1>
11991
11992 <sect1 id="release-6-2">
11993 <title>Release 6.2</title>
11994
11995    <note>
11996    <title>Release date</title>
11997    <simpara>1997-10-02</simpara>
11998    </note>
11999
12000 <para>
12001 A dump/restore is required for those wishing to migrate data from
12002 previous releases of <productname>PostgreSQL</productname>.
12003 </para>
12004
12005 <sect2>
12006 <title>Migration from version 6.1 to version 6.2</title>
12007
12008 <para>
12009 This migration requires a complete dump of the 6.1 database and a
12010 restore of the database in 6.2.
12011 </para>
12012 <para>
12013 Note that the <command>pg_dump</command> and <command>pg_dumpall</command> utility from 6.2 should be used
12014 to dump the 6.1 database.
12015 </para>
12016 </sect2>
12017
12018 <sect2>
12019 <title>Migration from version 1.<replaceable>x</> to version 6.2</title>
12020
12021 <para>
12022 Those migrating from earlier 1.* releases should first upgrade to 1.09
12023 because the COPY output format was improved from the 1.02 release.
12024 </para>
12025 </sect2>
12026
12027    <sect2>
12028     <title>Changes</title>
12029
12030     <para>
12031      <programlisting>
12032 Bug Fixes
12033 ---------
12034 Fix problems with pg_dump for inheritance, sequences, archive tables(Bruce)
12035 Fix compile errors on overflow due to shifts, unsigned, and bad prototypes
12036          from Solaris(Diab Jerius)
12037 Fix bugs in geometric line arithmetic (bad intersection calculations)(Thomas)
12038 Check for geometric intersections at endpoints to avoid rounding ugliness(Thomas)
12039 Catch non-functional delete attempts(Vadim)
12040 Change time function names to be more consistent(Michael Reifenberg)
12041 Check for zero divides(Michael Reifenberg)
12042 Fix very old bug which made rows changed/inserted by a command
12043         visible to the command itself (so we had multiple update of 
12044         updated rows, etc.)(Vadim)
12045 Fix for SELECT null, 'fail' FROM pg_am (Patrick)
12046 SELECT NULL as EMPTY_FIELD now allowed(Patrick)
12047 Remove un-needed signal stuff from contrib/pginterface
12048 Fix OR (where x != 1 or x isnull didn't return rows with x NULL) (Vadim)
12049 Fix time_cmp function (Vadim)
12050 Fix handling of functions with non-attribute first argument in 
12051         WHERE clauses (Vadim)
12052 Fix GROUP BY when order of entries is different from order
12053         in target list (Vadim)
12054 Fix pg_dump for aggregates without sfunc1 (Vadim)
12055
12056 Enhancements
12057 ------------
12058 Default genetic optimizer GEQO parameter is now 8(Bruce)
12059 Allow use parameters in target list having aggregates in functions(Vadim)
12060 Added JDBC driver as an interface(Adrian & Peter)
12061 pg_password utility
12062 Return number of rows inserted/affected by INSERT/UPDATE/DELETE etc.(Vadim)
12063 Triggers implemented with CREATE TRIGGER (SQL3)(Vadim)
12064 SPI (Server Programming Interface) allows execution of queries inside 
12065         C-functions (Vadim)
12066 NOT NULL implemented (SQL92)(Robson Paniago de Miranda)
12067 Include reserved words for string handling, outer joins, and unions(Thomas)
12068 Implement extended comments ("/* ... */") using exclusive states(Thomas)
12069 Add "//" single-line comments(Bruce)
12070 Remove some restrictions on characters in operator names(Thomas)
12071 DEFAULT and CONSTRAINT for tables implemented (SQL92)(Vadim & Thomas)
12072 Add text concatenation operator and function (SQL92)(Thomas)
12073 Support WITH TIME ZONE syntax (SQL92)(Thomas)
12074 Support INTERVAL unit TO unit syntax (SQL92)(Thomas)
12075 Define types DOUBLE PRECISION, INTERVAL, CHARACTER,
12076         and CHARACTER VARYING (SQL92)(Thomas)
12077 Define type FLOAT(p) and rudimentary DECIMAL(p,s), NUMERIC(p,s) (SQL92)(Thomas)
12078 Define EXTRACT(), POSITION(), SUBSTRING(), and TRIM() (SQL92)(Thomas)
12079 Define CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP (SQL92)(Thomas)
12080 Add syntax and warnings for UNION, HAVING, INNER and OUTER JOIN (SQL92)(Thomas)
12081 Add more reserved words, mostly for SQL92 compliance(Thomas)
12082 Allow hh:mm:ss time entry for timespan/reltime types(Thomas)
12083 Add center() routines for lseg, path, polygon(Thomas)
12084 Add distance() routines for circle-polygon, polygon-polygon(Thomas)
12085 Check explicitly for points and polygons contained within polygons
12086         using an axis-crossing algorithm(Thomas)
12087 Add routine to convert circle-box(Thomas)
12088 Merge conflicting operators for different geometric data types(Thomas)
12089 Replace distance operator "&lt;===&gt;" with "&lt;-&gt;"(Thomas)
12090 Replace "above" operator "!^" with "&gt;^" and "below" operator "!|" with "&lt;^"(Thomas)
12091 Add routines for text trimming on both ends, substring, and string position(Thomas)
12092 Added conversion routines circle(box) and poly(circle)(Thomas)
12093 Allow internal sorts to be stored in memory rather than in files(Bruce & Vadim)
12094 Allow functions and operators on internally-identical types to succeed(Bruce)
12095 Speed up backend start-up after profiling analysis(Bruce)
12096 Inline frequently called functions for performance(Bruce)
12097 Reduce open() calls(Bruce)
12098 psql:  Add PAGER for \h and \?,\C fix
12099 Fix for psql pager when no tty(Bruce)
12100 New entab utility(Bruce)
12101 General trigger functions for referential integrity (Vadim)
12102 General trigger functions for time travel (Vadim)
12103 General trigger functions for AUTOINCREMENT/IDENTITY feature (Vadim)
12104 MOVE implementation (Vadim)
12105
12106 Source Tree Changes
12107 -------------------
12108 HP-UX 10 patches (Vladimir Turin)
12109 Added SCO support, (Daniel Harris)
12110 MkLinux patches (Tatsuo Ishii)
12111 Change geometric box terminology from "length" to "width"(Thomas)
12112 Deprecate temporary unstored slope fields in geometric code(Thomas)
12113 Remove restart instructions from INSTALL(Bruce)
12114 Look in /usr/ucb first for install(Bruce)
12115 Fix c++ copy example code(Thomas)
12116 Add -o to psql manual page(Bruce)
12117 Prevent relname unallocated string length from being copied into database(Bruce)
12118 Cleanup for NAMEDATALEN use(Bruce)
12119 Fix pg_proc names over 15 chars in output(Bruce)
12120 Add strNcpy() function(Bruce)
12121 remove some (void) casts that are unnecessary(Bruce)
12122 new interfaces directory(Marc)
12123 Replace fopen() calls with calls to fd.c functions(Bruce)
12124 Make functions static where possible(Bruce)
12125 enclose unused functions in #ifdef NOT_USED(Bruce)
12126 Remove call to difftime() in timestamp support to fix SunOS(Bruce & Thomas)
12127 Changes for Digital Unix
12128 Portability fix for pg_dumpall(Bruce)
12129 Rename pg_attribute.attnvals to attdispersion(Bruce)
12130 "intro/unix" manual page now "pgintro"(Bruce)
12131 "built-in" manual page now "pgbuiltin"(Bruce)
12132 "drop" manual page now "drop_table"(Bruce)
12133 Add "create_trigger", "drop_trigger" manual pages(Thomas)
12134 Add constraints regression test(Vadim & Thomas)
12135 Add comments syntax regression test(Thomas)
12136 Add PGINDENT and support program(Bruce)
12137 Massive commit to run PGINDENT on all *.c and *.h files(Bruce)
12138 Files moved to /src/tools directory(Bruce)
12139 SPI and Trigger programming guides (Vadim & D'Arcy)
12140 </programlisting>
12141 </para>
12142 </sect2>
12143 </sect1>
12144
12145 <sect1 id="release-6-1-1">
12146 <title>Release 6.1.1</title>
12147
12148    <note>
12149    <title>Release date</title>
12150    <simpara>1997-07-22</simpara>
12151    </note>
12152
12153 <sect2>
12154 <title>Migration from version 6.1 to version 6.1.1</title>
12155
12156 <para>
12157 This is a minor bug-fix release. A dump/reload is not required from version 6.1,
12158 but is required from any release prior to 6.1.
12159 Refer to the release notes for 6.1 for more details.
12160 </para>
12161 </sect2>
12162
12163    <sect2>
12164     <title>Changes</title>
12165
12166     <para>
12167      <programlisting>
12168 fix for SET with options (Thomas)
12169 allow pg_dump/pg_dumpall to preserve ownership of all tables/objects(Bruce)
12170 new psql \connect option allows changing usernames without changing databases
12171 fix for initdb --debug option(Yoshihiko Ichikawa))
12172 lextest cleanup(Bruce)
12173 hash fixes(Vadim)
12174 fix date/time month boundary arithmetic(Thomas)
12175 fix timezone daylight handling for some ports(Thomas, Bruce, Tatsuo)
12176 timestamp overhauled to use standard functions(Thomas)
12177 other code cleanup in date/time routines(Thomas)
12178 psql's \d now case-insensitive(Bruce)
12179 psql's backslash commands can now have trailing semicolon(Bruce)
12180 fix memory leak in psql when using \g(Bruce)
12181 major fix for endian handling of communication to server(Thomas, Tatsuo)
12182 Fix for Solaris assembler and include files(Yoshihiko Ichikawa)
12183 allow underscores in usernames(Bruce)
12184 pg_dumpall now returns proper status, portability fix(Bruce)
12185      </programlisting>
12186     </para>
12187    </sect2>
12188   </sect1>
12189
12190 <sect1 id="release-6-1">
12191 <title>Release 6.1</title>
12192
12193    <note>
12194    <title>Release date</title>
12195    <simpara>1997-06-08</simpara>
12196    </note>
12197
12198 <para>
12199   The regression tests have been adapted and extensively modified for the
12200   6.1 release of <productname>PostgreSQL</productname>.
12201 </para>
12202
12203 <para>
12204   Three new data types (<type>datetime</type>, <type>timespan</type>, and <type>circle</type>) have been added to
12205   the native set of <productname>PostgreSQL</productname> types. Points, boxes, paths, and polygons
12206   have had their output formats made consistent across the data types.
12207   The polygon output in misc.out has only been spot-checked for correctness
12208   relative to the original regression output.
12209 </para>
12210
12211 <para>
12212   <productname>PostgreSQL</productname> 6.1 introduces a new, alternate
12213 optimizer which uses <firstterm>genetic</firstterm>
12214   algorithms. These algorithms introduce a random behavior in the ordering
12215   of query results when the query contains multiple qualifiers or multiple
12216   tables (giving the optimizer a choice on order of evaluation). Several
12217   regression tests have been modified to explicitly order the results, and
12218   hence are insensitive to optimizer choices. A few regression tests are
12219   for data types which are inherently unordered (e.g. points and time
12220   intervals) and tests involving those types are explicitly bracketed with
12221   <command>set geqo to 'off'</command> and <command>reset geqo</command>.
12222 </para>
12223
12224 <para>
12225   The interpretation of array specifiers (the curly braces around atomic
12226   values) appears to have changed sometime after the original regression
12227   tests were generated. The current <filename>./expected/*.out</filename> files reflect this
12228   new interpretation, which may not be correct!
12229 </para>
12230
12231 <para>
12232   The float8 regression test fails on at least some platforms. This is due
12233   to differences in implementations of <function>pow()</function> and <function>exp()</function> and the signaling
12234   mechanisms used for overflow and underflow conditions.
12235 </para>
12236
12237 <para>
12238   The <quote>random</> results in the random test should cause the
12239   <quote>random</quote> test to be <quote>failed</quote>, since the
12240   regression tests are evaluated using a simple diff. However,
12241   <quote>random</> does not seem to produce random results on my test
12242   machine (Linux/<application>gcc</>/i686).
12243 </para>
12244
12245 <sect2>
12246 <title>Migration to version 6.1</title>
12247
12248 <para>
12249 This migration requires a complete dump of the 6.0 database and a
12250 restore of the database in 6.1.
12251 </para>
12252 <para>
12253 Those migrating from earlier 1.* releases should first upgrade to 1.09
12254 because the COPY output format was improved from the 1.02 release.
12255 </para>
12256 </sect2>
12257
12258    <sect2>
12259     <title>Changes</title>
12260
12261     <para>
12262      <programlisting>
12263 Bug Fixes
12264 ---------
12265 packet length checking in library routines
12266 lock manager priority patch
12267 check for under/over flow of float8(Bruce)
12268 multitable join fix(Vadim)
12269 SIGPIPE crash fix(Darren)
12270 large object fixes(Sven)
12271 allow btree indexes to handle NULLs(Vadim)
12272 timezone fixes(D'Arcy)
12273 select SUM(x) can return NULL on no rows(Thomas)
12274 internal optimizer, executor bug fixes(Vadim)
12275 fix problem where inner loop in &lt; or &lt;= has no rows(Vadim)
12276 prevent re-commuting join index clauses(Vadim)
12277 fix join clauses for multiple tables(Vadim)
12278 fix hash, hashjoin for arrays(Vadim)
12279 fix btree for abstime type(Vadim)
12280 large object fixes(Raymond)
12281 fix buffer leak in hash indexes (Vadim)
12282 fix rtree for use in inner scan (Vadim)
12283 fix gist for use in inner scan, cleanups (Vadim, Andrea)
12284 avoid unnecessary local buffers allocation (Vadim, Massimo)
12285 fix local buffers leak in transaction aborts (Vadim)
12286 fix file manager memmory leaks, cleanups (Vadim, Massimo)
12287 fix storage manager memmory leaks (Vadim)
12288 fix btree duplicates handling (Vadim)
12289 fix deleted rows reincarnation caused by vacuum (Vadim)
12290 fix SELECT varchar()/char() INTO TABLE made zero-length fields(Bruce)
12291 many psql, pg_dump, and libpq memory leaks fixed using Purify (Igor)
12292
12293 Enhancements
12294 ------------
12295 attribute optimization statistics(Bruce)
12296 much faster new btree bulk load code(Paul)
12297 BTREE UNIQUE added to bulk load code(Vadim) 
12298 new lock debug code(Massimo)
12299 massive changes to libpg++(Leo)
12300 new GEQO optimizer speeds table multitable optimization(Martin)
12301 new WARN message for non-unique insert into unique key(Marc)
12302 update x=-3, no spaces, now valid(Bruce)
12303 remove case-sensitive identifier handling(Bruce,Thomas,Dan)
12304 debug backend now pretty-prints tree(Darren)
12305 new Oracle character functions(Edmund)
12306 new plaintext password functions(Dan)
12307 no such class or insufficient privilege changed to distinct messages(Dan)
12308 new ANSI timestamp function(Dan)
12309 new ANSI Time and Date types (Thomas)
12310 move large chunks of data in backend(Martin)
12311 multicolumn btree indexes(Vadim)
12312 new SET var TO value command(Martin)
12313 update transaction status on reads(Dan)
12314 new locale settings for character types(Oleg)
12315 new SEQUENCE serial number generator(Vadim)
12316 GROUP BY function now possible(Vadim)
12317 re-organize regression test(Thomas,Marc)
12318 new optimizer operation weights(Vadim)
12319 new psql \z grant/permit option(Marc)
12320 new MONEY data type(D'Arcy,Thomas)
12321 tcp socket communication speed improved(Vadim)
12322 new VACUUM option for attribute statistics, and for certain columns (Vadim)
12323 many geometric type improvements(Thomas,Keith)
12324 additional regression tests(Thomas)
12325 new datestyle variable(Thomas,Vadim,Martin)
12326 more comparison operators for sorting types(Thomas)
12327 new conversion functions(Thomas)
12328 new more compact btree format(Vadim)
12329 allow pg_dumpall to preserve database ownership(Bruce)
12330 new SET GEQO=# and R_PLANS variable(Vadim)
12331 old (!GEQO) optimizer can use right-sided plans (Vadim)
12332 typechecking improvement in SQL parser(Bruce)
12333 new SET, SHOW, RESET commands(Thomas,Vadim)
12334 new \connect database USER option
12335 new destroydb -i option (Igor)
12336 new \dt and \di psql commands (Darren)
12337 SELECT "\n" now escapes newline (A. Duursma)
12338 new geometry conversion functions from old format (Thomas)
12339
12340 Source tree changes
12341 -------------------
12342 new configuration script(Marc)
12343 readline configuration option added(Marc)
12344 OS-specific configuration options removed(Marc)
12345 new OS-specific template files(Marc)
12346 no more need to edit Makefile.global(Marc)
12347 re-arrange include files(Marc)
12348 nextstep patches (Gregor Hoffleit)
12349 removed Windows-specific code(Bruce)
12350 removed postmaster -e option, now only postgres -e option (Bruce)
12351 merge duplicate library code in front/backends(Martin)
12352 now works with eBones, international Kerberos(Jun)
12353 more shared library support
12354 c++ include file cleanup(Bruce)
12355 warn about buggy flex(Bruce)
12356 DG/UX, Ultrix, IRIX, AIX portability fixes
12357 </programlisting>
12358 </para>
12359 </sect2>
12360 </sect1>
12361
12362 <sect1 id="release-6-0">
12363 <title>Release 6.0</title>
12364
12365    <note>
12366    <title>Release date</title>
12367    <simpara>1997-01-29</simpara>
12368    </note>
12369
12370 <para>
12371 A dump/restore is required for those wishing to migrate data from
12372 previous releases of <productname>PostgreSQL</productname>.
12373 </para>
12374
12375 <sect2>
12376 <title>Migration from version 1.09 to version 6.0</title>
12377
12378 <para>
12379 This migration requires a complete dump of the 1.09 database and a
12380 restore of the database in 6.0.
12381 </para>
12382 </sect2>
12383
12384 <sect2>
12385 <title>Migration from pre-1.09 to version 6.0</title>
12386
12387 <para>
12388 Those migrating from earlier 1.* releases should first upgrade to 1.09
12389 because the COPY output format was improved from the 1.02 release.
12390 </para>
12391 </sect2>
12392
12393    <sect2>
12394     <title>Changes</title>
12395
12396     <para>
12397      <programlisting>
12398 Bug Fixes
12399 ---------
12400 ALTER TABLE bug - running postgress process needs to re-read table definition
12401 Allow vacuum to be run on one table or entire database(Bruce)
12402 Array fixes
12403 Fix array over-runs of memory writes(Kurt)
12404 Fix elusive btree range/non-range bug(Dan)
12405 Fix for hash indexes on some types like time and date
12406 Fix for pg_log size explosion
12407 Fix permissions on lo_export()(Bruce)
12408 Fix unitialized reads of memory(Kurt)
12409 Fixed ALTER TABLE ... char(3) bug(Bruce)
12410 Fixed a few small memory leaks
12411 Fixed EXPLAIN handling of options and changed full_path option name
12412 Fixed output of group acl privileges
12413 Memory leaks (hunt and destroy with tools like Purify(Kurt)
12414 Minor improvements to rules system
12415 NOTIFY fixes
12416 New asserts for run-checking
12417 Overhauled parser/analyze code to properly report errors and increase speed
12418 Pg_dump -d now handles NULL's properly(Bruce)
12419 Prevent SELECT NULL from crashing server (Bruce)
12420 Properly report errors when INSERT ... SELECT columns did not match
12421 Properly report errors when insert column names were not correct
12422 psql \g filename now works(Bruce)
12423 psql fixed problem with multiple statements on one line with multiple outputs
12424 Removed duplicate system OIDs
12425 SELECT * INTO TABLE . GROUP/ORDER BY gives unlink error if table exists(Bruce)
12426 Several fixes for queries that crashed the backend
12427 Starting quote in insert string errors(Bruce)
12428 Submitting an empty query now returns empty status, not just " " query(Bruce)
12429
12430 Enhancements
12431 ------------
12432 Add EXPLAIN manual page(Bruce)
12433 Add UNIQUE index capability(Dan)
12434 Add hostname/user level access control rather than just hostname and user
12435 Add synonym of != for &lt;&gt;(Bruce)
12436 Allow "select oid,* from table"
12437 Allow BY,ORDER BY to specify columns by number, or by non-alias table.column(Bruce)
12438 Allow COPY from the frontend(Bryan)
12439 Allow GROUP BY to use alias column name(Bruce)
12440 Allow actual compression, not just reuse on the same page(Vadim)
12441 Allow installation-configuration option to auto-add all local users(Bryan)
12442 Allow libpq to distinguish between text value '' and null(Bruce)
12443 Allow non-postgres users with createdb privs to destroydb's
12444 Allow restriction on who can create C functions(Bryan)
12445 Allow restriction on who can do backend COPY(Bryan)
12446 Can shrink tables, pg_time and pg_log(Vadim & Erich)
12447 Change debug level 2 to print queries only, changed debug heading layout(Bruce)
12448 Change default decimal constant representation from float4 to float8(Bruce)
12449 European date format now set when postmaster is started
12450 Execute lowercase function names if not found with exact case
12451 Fixes for aggregate/GROUP processing, allow 'select sum(func(x),sum(x+y) from z'
12452 Gist now included in the distrubution(Marc)
12453 Idend authentication of local users(Bryan)
12454 Implement BETWEEN qualifier(Bruce)
12455 Implement IN qualifier(Bruce)
12456 libpq has PQgetisnull()(Bruce)
12457 libpq++ improvements
12458 New options to initdb(Bryan)
12459 Pg_dump allow dump of OIDs(Bruce)
12460 Pg_dump create indexes after tables are loaded for speed(Bruce)
12461 Pg_dumpall dumps all databases, and the user table
12462 Pginterface additions for NULL values(Bruce)
12463 Prevent postmaster from being run as root
12464 psql \h and \? is now readable(Bruce)
12465 psql allow backslashed, semicolons anywhere on the line(Bruce)
12466 psql changed command prompt for lines in query or in quotes(Bruce)
12467 psql char(3) now displays as (bp)char in \d output(Bruce)
12468 psql return code now more accurate(Bryan?)
12469 psql updated help syntax(Bruce)
12470 Re-visit and fix vacuum(Vadim)
12471 Reduce size of regression diffs, remove timezone name difference(Bruce)
12472 Remove compile-time parameters to enable binary distributions(Bryan)
12473 Reverse meaning of HBA masks(Bryan)
12474 Secure Authentication of local users(Bryan)
12475 Speed up vacuum(Vadim)
12476 Vacuum now had VERBOSE option(Bruce)
12477
12478 Source tree changes
12479 -------------------
12480 All functions now have prototypes that are compared against the calls
12481 Allow asserts to be disabled easly from Makefile.global(Bruce)
12482 Change oid constants used in code to #define names
12483 Decoupled sparc and solaris defines(Kurt)
12484 Gcc -Wall compiles cleanly with warnings only from unfixable constructs
12485 Major include file reorganization/reduction(Marc)
12486 Make now stops on compile failure(Bryan)
12487 Makefile restructuring(Bryan, Marc)
12488 Merge bsdi_2_1 to bsdi(Bruce)
12489 Monitor program removed
12490 Name change from Postgres95 to PostgreSQL
12491 New config.h file(Marc, Bryan)
12492 PG_VERSION now set to 6.0 and used by postmaster
12493 Portability additions, including Ultrix, DG/UX, AIX, and Solaris
12494 Reduced the number of #define's, centeralized #define's
12495 Remove duplicate OIDS in system tables(Dan)
12496 Remove duplicate system catalog info or report mismatches(Dan)
12497 Removed many os-specific #define's
12498 Restructured object file generation/location(Bryan, Marc)
12499 Restructured port-specific file locations(Bryan, Marc)
12500 Unused/uninialized variables corrected
12501 </programlisting>
12502 </para>
12503 </sect2>
12504 </sect1>
12505
12506 <sect1 id="release-1-09">
12507 <title>Release 1.09</title>
12508
12509    <note>
12510    <title>Release date</title>
12511    <simpara>1996-11-04</simpara>
12512    </note>
12513
12514 <para>
12515 Sorry, we didn't keep track of changes from 1.02 to 1.09.  Some of
12516 the changes listed in 6.0 were actually included in the 1.02.1 to 1.09
12517 releases.
12518 </para>
12519 </sect1>
12520
12521 <sect1 id="release-1-02">
12522 <title>Release 1.02</title>
12523
12524    <note>
12525    <title>Release date</title>
12526    <simpara>1996-08-01</simpara>
12527    </note>
12528
12529 <sect2>
12530 <title>Migration from version 1.02 to version 1.02.1</title>
12531
12532 <para>
12533 Here is a new migration file for 1.02.1.  It includes the 'copy' change
12534 and a script to convert old <acronym>ASCII</acronym> files.
12535 </para>
12536 <note>
12537 <para>
12538 The following notes are for the benefit of users who want to migrate
12539 databases from <productname>Postgres95</> 1.01 and 1.02 to <productname>Postgres95</> 1.02.1.
12540 </para>
12541 <para>
12542 If you are starting afresh with <productname>Postgres95</> 1.02.1 and do not need
12543 to migrate old databases, you do not need to read any further.
12544 </para>
12545 </note>
12546
12547 <para>
12548 In order to upgrade older <productname>Postgres95</> version 1.01 or 1.02 databases to
12549 version 1.02.1, the following steps are required:
12550 </para>
12551 <procedure>
12552 <step>
12553 <para>
12554 Start up a new 1.02.1 postmaster
12555 </para>
12556 </step>
12557 <step>
12558 <para>
12559 Add the new built-in functions and operators of 1.02.1 to 1.01 or 1.02
12560    databases.  This is done by running the new 1.02.1 server against
12561    your own 1.01 or 1.02 database and applying the queries attached at
12562    the end of the file.   This can be done easily through <command>psql</>.  If your
12563    1.01 or 1.02 database is named <literal>testdb</literal> and you have cut the commands
12564    from the end of this file and saved them in <filename>addfunc.sql</filename>:
12565 <programlisting>
12566         % psql testdb -f addfunc.sql
12567 </programlisting>
12568
12569 Those upgrading 1.02 databases will get a warning when executing the
12570 last two statements in the file because they are already present in 1.02.  This is
12571 not a cause for concern.
12572 </para>
12573 </step>
12574 </procedure>
12575 </sect2>
12576
12577 <sect2>
12578 <title>Dump/Reload Procedure</title>
12579
12580 <para>
12581 If you are trying to reload a pg_dump or text-mode, <literal>copy tablename to
12582 stdout</literal> generated with a previous version, you will need to run the
12583 attached <command>sed</command> script on the ASCII file before loading it into the
12584 database.  The old format used '.' as end-of-data, while '\.' is now the
12585 end-of-data marker.  Also, empty strings are now loaded in as '' rather
12586 than NULL. See the copy manual page for full details.
12587
12588 <programlisting>
12589         sed 's/^\.$/\\./g' &lt;in_file &gt;out_file
12590 </programlisting>
12591 </para>
12592 <para>
12593 If you are loading an older binary copy or non-<systemitem>stdout</> copy, there is no
12594 end-of-data character, and hence no conversion necessary.
12595
12596 <programlisting>
12597 -- following lines added by agc to reflect the case-insensitive
12598 -- regexp searching for varchar (in 1.02), and bpchar (in 1.02.1)
12599 create operator ~* (leftarg = bpchar, rightarg = text, procedure = texticregexeq);
12600 create operator !~* (leftarg = bpchar, rightarg = text, procedure = texticregexne);
12601 create operator ~* (leftarg = varchar, rightarg = text, procedure = texticregexeq);
12602 create operator !~* (leftarg = varchar, rightarg = text, procedure = texticregexne);
12603 </programlisting>
12604 </para>
12605 </sect2>
12606
12607 <sect2>
12608 <title>Changes</title>
12609
12610 <para>
12611 <programlisting>
12612 Source code maintenance and development
12613  * worldwide team of volunteers
12614  * the source tree now in CVS at ftp.ki.net
12615
12616 Enhancements
12617  * psql (and underlying libpq library) now has many more options for
12618    formatting output, including HTML
12619  * pg_dump now output the schema and/or the data, with many fixes to
12620    enhance completeness.
12621  * psql used in place of monitor in administration shell scripts.
12622    monitor to be deprecated in next release.
12623  * date/time functions enhanced
12624  * NULL insert/update/comparison fixed/enhanced
12625  * TCL/TK lib and shell fixed to work with both tck7.4/tk4.0 and tcl7.5/tk4.1
12626
12627 Bug Fixes (almost too numerous to mention)
12628  * indexes
12629  * storage management
12630  * check for NULL pointer before dereferencing
12631  * Makefile fixes
12632
12633 New Ports
12634  * added SolarisX86 port
12635  * added BSD/OS 2.1 port
12636  * added DG/UX port
12637 </programlisting>
12638 </para>
12639 <!--
12640 Contributors (appologies to any missed)
12641  * Kurt J. Lidl &lt;lidl@va.pubnix.com&gt; 
12642         (missed in first run, but no less important)
12643  * Erich Stamberger &lt;eberger@gewi.kfunigraz.ac.at&gt;
12644  * Jason Wright &lt;jason@shiloh.vnet.net&gt;
12645  * Cees de Groot &lt;C.deGroot@inter.NL.net&gt;
12646  * ernst.molitor@uni-bonn.de
12647  * michael.siebenborn@ae3.Hypo.DE (Michael Siebenborn (6929))
12648  * Brian E. Gallew &lt;geek+@cmu.edu&gt;
12649  * Vadim B. Mikheev &lt;vadim@sable.krasnoyarsk.su&gt;
12650  * Adam Sussman &lt;myddryn@vidya.com&gt;
12651  * Chris Dunlop &lt;chris@onthe.net.au&gt;
12652  * Marc G. Fournier &lt;scrappy@ki.net&gt;
12653  * Dan McGuirk &lt;mcguirk@indirect.com&gt;
12654  * Dr_George_D_Detlefsen &lt;drgeorge@ilt.com&gt;
12655  * Erich Stamberger &lt;eberger@gewi.kfunigraz.ac.at&gt;
12656  * Massimo Dal Zotto &lt;dz@cs.unitn.it&gt;
12657  * Randy Kunkee &lt;kunkee@Starbase.NeoSoft.COM&gt;
12658  * Rick Weldon &lt;rick@wisetech.com&gt;
12659  * Thomas van Reimersdahl &lt;reimersd@dali.techinfo.rwth-aachen.de&gt;
12660  * david bennett &lt;dave@bensoft.com&gt;
12661  * ernst.molitor@uni-bonn.de
12662  * Julian Assange &lt;proff@suburbia.net&gt;
12663  * Bruce Momjian &lt;pgman@candle.pha.pa.us&gt;
12664  * Paul "Shag" Walmsley &lt;ccshag@cclabs.missouri.edu&gt;
12665  * "Alistair G. Crooks" &lt;azcb0@sde.uts.amdahl.com&gt;
12666 -->
12667 </sect2>
12668 </sect1>
12669
12670 <sect1 id="release-1-01">
12671 <title>Release 1.01</title>
12672
12673    <note>
12674    <title>Release date</title>
12675    <simpara>1996-02-23</simpara>
12676    </note>
12677
12678
12679 <sect2>
12680 <title>Migration from version 1.0 to version 1.01</title>
12681
12682 <para>
12683 The following notes are for the benefit of users who want to migrate
12684 databases from <productname>Postgres95</> 1.0 to <productname>Postgres95</> 1.01.  
12685 </para>
12686 <para>
12687 If you are starting afresh with <productname>Postgres95</> 1.01 and do not need
12688 to migrate old databases, you do not need to read any further.
12689 </para>
12690 <para>
12691 In order to <productname>Postgres95</> version 1.01 with databases created with
12692 <productname>Postgres95</> version 1.0, the following steps are required:  
12693 </para>
12694 <procedure>
12695 <step>
12696 <para>
12697 Set the definition of <symbol>NAMEDATALEN</symbol> in <filename>src/Makefile.global</filename> to 16
12698    and <symbol>OIDNAMELEN</symbol> to 20.
12699 </para>
12700 </step>
12701 <step>
12702 <para>
12703 Decide whether you want to use Host based authentication.  
12704 </para>
12705 <substeps>
12706 <step>
12707 <para>
12708 If you do, you must create a file name <literal>pg_hba</literal> in your top-level data
12709    directory (typically the value of your <envar>$PGDATA</envar>).  <filename>src/libpq/pg_hba</filename>
12710    shows an example syntax.
12711 </para>
12712 </step>
12713 <step>
12714 <para>
12715 If you do not want host-based authentication, you can comment out
12716    the line
12717 <programlisting>
12718         HBA = 1
12719 </programlisting>
12720    in <filename>src/Makefile.global</filename>
12721 </para>
12722 <para>
12723    Note that host-based authentication is turned on by default, and if
12724    you do not take steps A or B above, the out-of-the-box 1.01 will
12725    not allow you to connect to 1.0 databases.
12726 </para>
12727 </step>
12728 </substeps>
12729 </step>
12730
12731 <step>
12732 <para>
12733 Compile and install 1.01, but DO NOT do the <command>initdb</command> step.
12734 </para>
12735 </step>
12736 <step>
12737 <para>
12738 Before doing anything else, terminate your 1.0 postmaster, and
12739    backup your existing <envar>$PGDATA</envar> directory.   
12740 </para>
12741 </step>
12742 <step>
12743 <para>
12744 Set your <envar>PGDATA</envar> environment variable to your 1.0 databases, but set up
12745    path up so that 1.01 binaries are being used.
12746 </para>
12747 </step>
12748 <step>
12749 <para>
12750 Modify the file <filename><envar>$PGDATA</envar>/PG_VERSION</filename> from 5.0 to 5.1
12751 </para>
12752 </step>
12753 <step>
12754 <para>
12755 Start up a new 1.01 postmaster
12756 </para>
12757 </step>
12758 <step>
12759 <para>
12760 Add the new built-in functions and operators of 1.01 to 1.0
12761    databases.  This is done by running the new 1.01 server against
12762    your own 1.0 database and applying the queries attached and saving 
12763    in the file 1.0_to_1.01.sql.   This can be done easily through <command>psql</command>.
12764    If your 1.0 database is name <literal>testdb</literal>:
12765
12766 <programlisting>
12767         % psql testdb -f 1.0_to_1.01.sql
12768 </programlisting>
12769
12770 and then execute the following commands (cut and paste from here):
12771
12772 <programlisting>
12773 -- add builtin functions that are new to 1.01
12774
12775 create function int4eqoid (int4, oid) returns bool as 'foo'
12776 language 'internal';
12777 create function oideqint4 (oid, int4) returns bool as 'foo'
12778 language 'internal';
12779 create function char2icregexeq (char2, text) returns bool as 'foo'
12780 language 'internal';
12781 create function char2icregexne (char2, text) returns bool as 'foo'
12782 language 'internal';
12783 create function char4icregexeq (char4, text) returns bool as 'foo'
12784 language 'internal';
12785 create function char4icregexne (char4, text) returns bool as 'foo'
12786 language 'internal';
12787 create function char8icregexeq (char8, text) returns bool as 'foo'
12788 language 'internal';
12789 create function char8icregexne (char8, text) returns bool as 'foo'
12790 language 'internal';
12791 create function char16icregexeq (char16, text) returns bool as 'foo'
12792 language 'internal';
12793 create function char16icregexne (char16, text) returns bool as 'foo'
12794 language 'internal';
12795 create function texticregexeq (text, text) returns bool as 'foo'
12796 language 'internal';
12797 create function texticregexne (text, text) returns bool as 'foo'
12798 language 'internal';
12799
12800 -- add builtin functions that are new to 1.01
12801
12802 create operator = (leftarg = int4, rightarg = oid, procedure = int4eqoid);
12803 create operator = (leftarg = oid, rightarg = int4, procedure = oideqint4);
12804 create operator ~* (leftarg = char2, rightarg = text, procedure = char2icregexeq);
12805 create operator !~* (leftarg = char2, rightarg = text, procedure = char2icregexne);
12806 create operator ~* (leftarg = char4, rightarg = text, procedure = char4icregexeq);
12807 create operator !~* (leftarg = char4, rightarg = text, procedure = char4icregexne);
12808 create operator ~* (leftarg = char8, rightarg = text, procedure = char8icregexeq);
12809 create operator !~* (leftarg = char8, rightarg = text, procedure = char8icregexne);
12810 create operator ~* (leftarg = char16, rightarg = text, procedure = char16icregexeq);
12811 create operator !~* (leftarg = char16, rightarg = text, procedure = char16icregexne);
12812 create operator ~* (leftarg = text, rightarg = text, procedure = texticregexeq);
12813 create operator !~* (leftarg = text, rightarg = text, procedure = texticregexne);
12814 </programlisting>
12815 </para>
12816 </step>
12817 </procedure>
12818 </sect2>
12819
12820 <sect2>
12821 <title>Changes</title>
12822
12823 <para>
12824 <programlisting>
12825 Incompatibilities:
12826  * 1.01 is backwards compatible with 1.0 database provided the user
12827    follow the steps outlined in the MIGRATION_from_1.0_to_1.01 file.
12828    If those steps are not taken, 1.01 is not compatible with 1.0 database.
12829
12830 Enhancements:
12831  * added PQdisplayTuples() to libpq and changed monitor and psql to use it
12832  * added NeXT port (requires SysVIPC implementation)
12833  * added CAST .. AS ... syntax
12834  * added ASC and DESC key words
12835  * added 'internal' as a possible language for CREATE FUNCTION
12836    internal functions are C functions which have been statically linked
12837    into the postgres backend.
12838  * a new type "name" has been added for system identifiers (table names,
12839    attribute names, etc.)  This replaces the old char16 type.   The
12840    of name is set by the NAMEDATALEN #define in src/Makefile.global
12841  * a readable reference manual that describes the query language.
12842  * added host-based access control.  A configuration file ($PGDATA/pg_hba)
12843    is used to hold the configuration data.  If host-based access control
12844    is not desired, comment out HBA=1 in src/Makefile.global.
12845  * changed regex handling to be uniform use of Henry Spencer's regex code
12846    regardless of platform.  The regex code is included in the distribution
12847  * added functions and operators for case-insensitive regular expressions. 
12848    The operators are ~* and !~*.
12849  * pg_dump uses COPY instead of SELECT loop for better performance
12850
12851 Bug fixes:
12852  * fixed an optimizer bug that was causing core dumps when 
12853    functions calls were used in comparisons in the WHERE clause
12854  * changed all uses of getuid to geteuid so that effective uids are used
12855  * psql now returns non-zero status on errors when using -c
12856  * applied public patches 1-14
12857 </programlisting>
12858 </para>
12859 </sect2>
12860 </sect1>
12861
12862 <sect1 id="release-1-0">
12863 <title>Release 1.0</title>
12864
12865    <note>
12866    <title>Release date</title>
12867    <simpara>1995-09-05</simpara>
12868    </note>
12869
12870 <sect2>
12871 <title>Changes</title>
12872
12873 <para>
12874 <programlisting>
12875 Copyright change:
12876  * The copyright of <productname>Postgres</productname> 1.0 has been loosened to be freely modifiable
12877    and modifiable for any purpose.  Please read the COPYRIGHT file.
12878    Thanks to Professor Michael Stonebraker for making this possible.
12879
12880 Incompatibilities:
12881  *  date formats have to be MM-DD-YYYY (or DD-MM-YYYY if you're using
12882    EUROPEAN STYLE).  This follows SQL-92 specs.
12883  *  "delimiters" is now a key word
12884
12885 Enhancements:
12886  *  sql LIKE syntax has been added
12887  *  copy command now takes an optional USING DELIMITER specification.
12888    delimiters can be any single-character string. 
12889  *  IRIX 5.3 port has been added.
12890    Thanks to Paul Walmsley and others.
12891  *  updated pg_dump to work with new libpq
12892  *  \d has been added psql 
12893    Thanks to Keith Parks
12894  *  regexp performance for architectures that use POSIX regex has been
12895    improved due to caching of precompiled patterns.
12896    Thanks to Alistair Crooks
12897  *  a new version of libpq++
12898    Thanks to William Wanders
12899
12900 Bug fixes:
12901  *  arbitrary userids can be specified in the createuser script
12902  *  \c to connect to other databases in psql now works.
12903  *  bad pg_proc entry for float4inc() is fixed
12904  *  users with usecreatedb field set can now create databases without
12905    having to be usesuper
12906  *  remove access control entries when the entry no longer has any
12907    privileges
12908  *  fixed non-portable datetimes implementation
12909  *  added kerberos flags to the src/backend/Makefile
12910  *  libpq now works with kerberos
12911  *  typographic errors in the user manual have been corrected.
12912  *  btrees with multiple index never worked, now we tell you they don't
12913    work when you try to use them
12914 </programlisting>
12915 </para>
12916 </sect2>
12917 </sect1>
12918
12919 <sect1 id="release-0-03">
12920 <title><productname>Postgres95</productname> Release 0.03</title>
12921
12922    <note>
12923    <title>Release date</title>
12924    <simpara>1995-07-21</simpara>
12925    </note>
12926
12927 <sect2>
12928 <title>Changes</title>
12929 <para>
12930 <programlisting>
12931 Incompatible changes:
12932  * BETA-0.3 IS INCOMPATIBLE WITH DATABASES CREATED WITH PREVIOUS VERSIONS
12933    (due to system catalog changes and indexing structure changes).
12934  * double-quote (") is deprecated as a quoting character for string literals;
12935    you need to convert them to single quotes ('). <!-- " -->
12936  * name of aggregates (eg. int4sum) are renamed in accordance with the
12937    SQL standard (eg. sum).
12938  * CHANGE ACL syntax is replaced by GRANT/REVOKE syntax.
12939  * float literals (eg. 3.14) are now of type float4 (instead of float8 in
12940    previous releases); you might have to do typecasting if you depend on it
12941    being of type float8.  If you neglect to do the typecasting and you assign
12942    a float literal to a field of type float8, you may get incorrect values
12943    stored!
12944  * LIBPQ has been totally revamped so that frontend applications
12945    can connect to multiple backends
12946  * the usesysid field in pg_user has been changed from int2 to int4 to
12947    allow wider range of Unix user ids.
12948  * the netbsd/freebsd/bsd o/s ports have been consolidated into a
12949    single BSD44_derived port.  (thanks to Alistair Crooks)
12950
12951 SQL standard-compliance (the following details changes that makes postgres95
12952 more compliant to the SQL-92 standard):
12953  * the following SQL types are now built-in: smallint, int(eger), float, real,
12954    char(N), varchar(N), date and time.
12955
12956    The following are aliases to existing postgres types:
12957                 smallint -&gt; int2
12958                 integer, int -&gt; int4
12959                 float, real  -&gt; float4
12960    char(N) and varchar(N) are implemented as truncated text types. In
12961    addition, char(N) does blank-padding. 
12962  * single-quote (') is used for quoting string literals; '' (in addition to
12963    \') is supported as means of inserting a single quote in a string
12964  * SQL standard aggregate names (MAX, MIN, AVG, SUM, COUNT) are used
12965    (Also, aggregates can now be overloaded, i.e. you can define your
12966    own MAX aggregate to take in a user-defined type.)
12967  * CHANGE ACL removed. GRANT/REVOKE syntax added.  
12968    - Privileges can be given to a group using the "GROUP" key word.
12969         For example:
12970                 GRANT SELECT ON foobar TO GROUP my_group;
12971         The key word 'PUBLIC' is also supported to mean all users.      
12972
12973         Privileges can only be granted or revoked to one user or group
12974         at a time.  
12975
12976         "WITH GRANT OPTION" is not supported.  Only class owners can change
12977         access control
12978    - The default access control is to to grant users readonly access.
12979      You must explicitly grant insert/update access to users.  To change
12980      this, modify the line in 
12981                 src/backend/utils/acl.h 
12982      that defines ACL_WORLD_DEFAULT 
12983
12984 Bug fixes:
12985  * the bug where aggregates of empty tables were not run has been fixed. Now,
12986    aggregates run on empty tables will return the initial conditions of the
12987    aggregates. Thus, COUNT of an empty  table will now properly return 0.
12988    MAX/MIN of an empty table will return a row of value NULL. 
12989  * allow the use of \; inside the monitor
12990  * the LISTEN/NOTIFY asynchronous notification mechanism now work
12991  * NOTIFY in rule action bodies now work
12992  * hash indexes work, and access methods in general should perform better.
12993    creation of large btree indexes should be much faster.  (thanks to Paul
12994    Aoki)
12995
12996 Other changes and enhancements:
12997  * addition of an EXPLAIN statement used for explaining the query execution
12998    plan (eg. "EXPLAIN SELECT * FROM EMP" prints out the execution plan for
12999    the query).
13000  * WARN and NOTICE messages no longer have timestamps on them. To turn on
13001    timestamps of error messages, uncomment the line in
13002    src/backend/utils/elog.h:
13003         /* define ELOG_TIMESTAMPS */ 
13004  * On an access control violation, the message
13005         "Either no such class or insufficient privilege"
13006    will be given.  This is the same message that is returned when
13007    a class is not found.  This dissuades non-privileged users from
13008    guessing the existence of privileged classes.
13009  * some additional system catalog changes have been made that are not
13010    visible to the user.
13011
13012 libpgtcl changes:
13013  * The -oid option has been added to the "pg_result" tcl command.
13014    pg_result -oid returns oid of the last row inserted.   If the
13015    last command was not an INSERT, then pg_result -oid returns "".
13016  * the large object interface is available as pg_lo* tcl commands:
13017    pg_lo_open, pg_lo_close, pg_lo_creat, etc.
13018
13019 Portability enhancements and New Ports:
13020  * flex/lex problems have been cleared up.  Now, you should be able to use
13021    flex instead of lex on any platforms.  We no longer make assumptions of
13022    what lexer you use based on the platform you use. 
13023  * The Linux-ELF port is now supported.  Various configuration have been 
13024    tested:  The following configuration is known to work:
13025         kernel 1.2.10, gcc 2.6.3, libc 4.7.2, flex 2.5.2, bison 1.24
13026    with everything in ELF format,
13027
13028 New utilities:
13029  * ipcclean added to the distribution
13030    ipcclean usually does not need to be run, but if your backend crashes
13031    and leaves shared memory segments hanging around, ipcclean will
13032    clean them up for you.
13033
13034 New documentation:
13035  * the user manual has been revised and libpq documentation added.
13036 </programlisting>
13037 </para>
13038 </sect2>
13039 </sect1>
13040
13041 <sect1 id="release-0-02">
13042 <title><productname>Postgres95</productname> Release 0.02</title>
13043
13044    <note>
13045    <title>Release date</title>
13046    <simpara>1995-05-25</simpara>
13047    </note>
13048
13049 <sect2>
13050 <title>Changes</title>
13051
13052 <para>
13053 <programlisting>
13054 Incompatible changes:
13055  * The SQL statement for creating a database is 'CREATE DATABASE' instead
13056    of 'CREATEDB'. Similarly, dropping a database is 'DROP DATABASE' instead
13057    of 'DESTROYDB'. However, the names of the executables 'createdb' and 
13058    'destroydb' remain the same.
13059  
13060 New tools:
13061  * pgperl - a Perl (4.036) interface to Postgres95
13062  * pg_dump - a utility for dumping out a postgres database into a
13063         script file containing query commands. The script files are in a ASCII
13064         format and can be used to reconstruct the database, even on other
13065         machines and other architectures. (Also good for converting
13066         a Postgres 4.2 database to Postgres95 database.)
13067
13068 The following ports have been incorporated into postgres95-beta-0.02:
13069  * the NetBSD port by Alistair Crooks
13070  * the AIX port by Mike Tung
13071  * the Windows NT port by Jon Forrest (more stuff but not done yet)
13072  * the Linux ELF port by Brian Gallew
13073
13074 The following bugs have been fixed in postgres95-beta-0.02:
13075  * new lines not escaped in COPY OUT and problem with COPY OUT when first
13076    attribute is a '.' 
13077  * cannot type return to use the default user id in createuser
13078  * SELECT DISTINCT on big tables crashes
13079  * Linux installation problems
13080  * monitor doesn't allow use of 'localhost' as PGHOST
13081  * psql core dumps when doing \c or \l
13082  * the "pgtclsh" target missing from src/bin/pgtclsh/Makefile
13083  * libpgtcl has a hard-wired default port number
13084  * SELECT DISTINCT INTO TABLE hangs
13085  * CREATE TYPE doesn't accept 'variable' as the internallength
13086  * wrong result using more than 1 aggregate in a SELECT
13087 </programlisting>
13088 </para>
13089 </sect2>
13090 </sect1>
13091
13092 <sect1 id="release-0-01">
13093 <title><productname>Postgres95</productname> Release 0.01</title>
13094
13095    <note>
13096    <title>Release date</title>
13097    <simpara>1995-05-01</simpara>
13098    </note>
13099
13100 <para>
13101 Initial release.
13102 </para>
13103 </sect1>
13104
13105 <![IGNORE[
13106   <sect1 id="timing-results">
13107    <title>Timing Results</title>
13108
13109    <para>
13110     These timing results are from running the regression test with the commands
13111
13112     <programlisting>
13113 % cd src/test/regress
13114 % make all
13115 % time make runtest
13116     </programlisting>
13117    </para>
13118    <para>
13119     Timing under Linux 2.0.27 seems to have a roughly 5% variation from run
13120     to run, presumably due to the scheduling vagaries of multitasking systems.
13121    </para>
13122
13123    <sect2>
13124     <title>Version 6.5</title>
13125
13126     <para>
13127      As has been the case for previous releases, timing between
13128      releases is not directly comparable since new regression tests
13129      have been added. In general, 6.5 is faster than previous
13130      releases.
13131     </para>
13132
13133     <para>
13134      Timing with <function>fsync()</function> disabled:
13135
13136      <programlisting>
13137   Time   System
13138   02:00  Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 -O2 -m486
13139   04:38  Sparc Ultra 1 143MHz, 64MB, Solaris 2.6
13140      </programlisting>
13141     </para>
13142
13143     <para>
13144      Timing with <function>fsync()</function> enabled:
13145
13146      <programlisting>
13147   Time   System
13148   04:21  Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 -O2 -m486
13149      </programlisting>
13150
13151      For the <systemitem class="osname">Linux</systemitem> system above, using <acronym>UW-SCSI</acronym> disks rather than (older) <acronym>IDE</acronym>
13152      disks leads to a 50% improvement in speed on the regression test.
13153     </para>
13154    </sect2>
13155
13156 <sect2>
13157 <title>Version 6.4beta</title>
13158
13159 <para>
13160 The times for this release are not directly comparable to those for previous releases
13161 since some additional regression tests have been included.
13162 In general, however, 6.4 should be slightly faster than the previous release (thanks, Bruce!).
13163 </para>
13164 <para>
13165 <programlisting>
13166   Time   System
13167   02:26  Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
13168 </programlisting>
13169 </para>
13170 </sect2>
13171
13172 <sect2>
13173 <title>Version 6.3</title>
13174
13175 <para>
13176 The times for this release are not directly comparable to those for previous releases
13177 since some additional regression tests have been included and some obsolete tests involving
13178 time travel have been removed.
13179 In general, however, 6.3 is substantially faster than previous releases (thanks, Bruce!).
13180 </para>
13181 <para>
13182 <programlisting>
13183   Time   System
13184   02:30  Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
13185   04:12  Dual Pentium Pro 180, 96MB, EIDE, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
13186 </programlisting>
13187 </para>
13188 </sect2>
13189
13190 <sect2>
13191 <title>Version 6.1</title>
13192
13193 <para>
13194 <programlisting>
13195   Time   System
13196   06:12  Pentium Pro 180, 32MB, EIDE, Linux 2.0.30, gcc 2.7.2 -O2 -m486
13197   12:06  P-100, 48MB, Linux 2.0.29, gcc
13198   39:58  Sparc IPC 32MB, Solaris 2.5, gcc 2.7.2.1 -O -g
13199 </programlisting>
13200 </para>
13201 </sect2>
13202 </sect1>
13203 ]]>
13204 </appendix>
13205
13206 <!-- Keep this comment at the end of the file
13207 Local variables:
13208 mode:sgml
13209 sgml-omittag:nil
13210 sgml-shorttag:t
13211 sgml-minimize-attributes:nil
13212 sgml-always-quote-attributes:t
13213 sgml-indent-step:1
13214 sgml-indent-data:t
13215 sgml-parent-document:nil
13216 sgml-default-dtd-file:"./reference.ced"
13217 sgml-exposed-tags:nil
13218 sgml-local-catalogs:("/usr/lib/sgml/catalog")
13219 sgml-local-ecat-files:nil
13220 End:
13221 -->