Draft release notes for upcoming back-branch updates.
[PostgreSQL.git] / doc / src / sgml / release.sgml
blob01a77c11472e56f41886e74196b3ae7d5c610fe9
1 <!-- $PostgreSQL$ -->
2 <!--
4 Typical markup:
6 &<> use & escapes
7 [A-Z][A-Z ]+[A-Z] <command>
8 [A-Za-z_][A-Za-z0-9_]+() <function>
9 [A-Za-z_]/[A-Za-z_]+ <filename>
10 PostgreSQL <productname>
11 pg_[A-Za-z0-9_] <application>
12 [A-Z][A-Z] <type>, <envar>, <literal>
14 non-ASCII characters convert to HTML4 entity (&) escapes
16 official: http://www.w3.org/TR/html4/sgml/entities.html
17 one page: http://www.zipcon.net/~swhite/docs/computers/browsers/entities_page.html
18 other lists: http://www.zipcon.net/~swhite/docs/computers/browsers/entities.html
19 http://www.zipcon.net/~swhite/docs/computers/browsers/entities_page.html
20 http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
22 we cannot use UTF8 because SGML Docbook
23 does not support it
24 http://www.pemberley.com/janeinfo/latin1.html#latexta
26 wrap long lines
28 For new features, add links to the documentation sections. Use </link>
29 so that Perl can remove it so HISTORY.html can be created with no
30 links to the main documentation. This was added only in 8.2, so don't
31 do it for earlier branch release files.
33 -->
35 <appendix id="release">
36 <title>Release Notes</title>
38 <para>
39 The release notes contain the significant changes in each
40 <productname>PostgreSQL</> release, with major features and migration
41 issues listed at the top. The release notes do not contain changes
42 that affect only a few users or changes that are internal and therefore not
43 user-visible. For example, the optimizer is improved in almost every
44 release, but the improvements are usually observed by users as simply
45 faster queries.
46 </para>
48 <para>
49 A complete list of changes for each release can be obtained by
50 viewing the <link linkend="cvs">CVS</link> logs for each release.
51 The <ulink
52 url="http://archives.postgresql.org/pgsql-committers/">pgsql-committers
53 email list</ulink> contains all source code changes as well. There is also
54 a <ulink url="http://developer.postgresql.org/cvsweb.cgi/pgsql/">web
55 interface</ulink> that shows changes to specific files.
56 <!-- we need a file containing the CVS logs for each release, and something
57 like the SVN web interface that groups commits but has branches -->
58 </para>
60 <para>
61 The name appearing next to each item represents the major developer for
62 that item. Of course all changes involve community discussion and patch
63 review, so each item is truly a community effort.
64 </para>
66 <sect1 id="release-8-3-2">
67 <title>Release 8.3.2</title>
69 <note>
70 <title>Release date</title>
71 <simpara>2008-06-09</simpara>
72 </note>
74 <para>
75 This release contains a variety of fixes from 8.3.1.
76 For information about new features in the 8.3 major release, see
77 <xref linkend="release-8-3">.
78 </para>
80 <sect2>
81 <title>Migration to Version 8.3.2</title>
83 <para>
84 A dump/restore is not required for those running 8.3.X.
85 However, if you are upgrading from a version earlier than 8.3.1,
86 see the release notes for 8.3.1.
87 </para>
89 </sect2>
91 <sect2>
92 <title>Changes</title>
94 <itemizedlist>
96 <listitem>
97 <para>
98 Fix <literal>ERRORDATA_STACK_SIZE exceeded</literal> crash that
99 occurred on Windows when using UTF-8 database encoding and a different
100 client encoding (Tom)
101 </para>
102 </listitem>
104 <listitem>
105 <para>
106 Fix incorrect archive truncation point calculation for the
107 <literal>%r</> macro in <varname>recovery_command</> parameters
108 (Simon)
109 </para>
111 <para>
112 This could lead to data loss if a warm-standby script relied on
113 <literal>%r</> to decide when to throw away WAL segment files.
114 </para>
115 </listitem>
117 <listitem>
118 <para>
119 Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
120 column is correctly checked to see if it's been initialized to all
121 non-nulls (Brendan Jurd)
122 </para>
124 <para>
125 Previous versions neglected to check this requirement at all.
126 </para>
127 </listitem>
129 <listitem>
130 <para>
131 Fix <command>REASSIGN OWNED</> so that it works on procedural
132 languages too (Alvaro)
133 </para>
134 </listitem>
136 <listitem>
137 <para>
138 Fix problems with <command>SELECT FOR UPDATE/SHARE</> occurring as a
139 subquery in a query with a non-<command>SELECT</> top-level operation
140 (Tom)
141 </para>
142 </listitem>
144 <listitem>
145 <para>
146 Fix possible <command>CREATE TABLE</> failure when inheriting the
147 <quote>same</> constraint from multiple parent relations that
148 inherited that constraint from a common ancestor (Tom)
149 </para>
150 </listitem>
152 <listitem>
153 <para>
154 Fix <function>pg_get_ruledef()</> to show the alias, if any, attached
155 to the target table of an <command>UPDATE</> or <command>DELETE</>
156 (Tom)
157 </para>
158 </listitem>
160 <listitem>
161 <para>
162 Restore the pre-8.3 behavior that an out-of-range block number in a
163 TID being used in a TidScan plan results in silently not matching any
164 rows (Tom)
165 </para>
167 <para>
168 8.3.0 and 8.3.1 threw an error instead.
169 </para>
170 </listitem>
172 <listitem>
173 <para>
174 Fix GIN bug that could result in a <literal>too many LWLocks
175 taken</literal> failure (Teodor)
176 </para>
177 </listitem>
179 <listitem>
180 <para>
181 Fix broken GiST comparison function for <type>tsquery</> (Teodor)
182 </para>
183 </listitem>
185 <listitem>
186 <para>
187 Fix <function>tsvector_update_trigger()</> and <function>ts_stat()</>
188 to accept domains over the types they expect to work with (Tom)
189 </para>
190 </listitem>
192 <listitem>
193 <para>
194 Fix failure to support enum data types as foreign keys (Tom)
195 </para>
196 </listitem>
198 <listitem>
199 <para>
200 Avoid possible crash when decompressing corrupted data
201 (Zdenek Kotala)
202 </para>
203 </listitem>
205 <listitem>
206 <para>
207 Fix race conditions between delayed unlinks and <command>DROP
208 DATABASE</> (Heikki)
209 </para>
211 <para>
212 In the worst case this could result in deleting a newly created table
213 in a new database that happened to get the same OID as the
214 recently-dropped one; but of course that is an extremely
215 low-probability scenario.
216 </para>
217 </listitem>
219 <listitem>
220 <para>
221 Repair two places where SIGTERM exit of a backend could leave corrupted
222 state in shared memory (Tom)
223 </para>
225 <para>
226 Neither case is very important if SIGTERM is used to shut down the
227 whole database cluster together, but there was a problem if someone
228 tried to SIGTERM individual backends.
229 </para>
230 </listitem>
232 <listitem>
233 <para>
234 Fix possible crash due to incorrect plan generated for an
235 <literal><replaceable>x</> IN (SELECT <replaceable>y</>
236 FROM ...)</literal> clause when <replaceable>x</> and <replaceable>y</>
237 have different data types; and make sure the behavior is semantically
238 correct when the conversion from <replaceable>y</>'s type to
239 <replaceable>x</>'s type is lossy (Tom)
240 </para>
241 </listitem>
243 <listitem>
244 <para>
245 Fix oversight that prevented the planner from substituting known Param
246 values as if they were constants (Tom)
247 </para>
249 <para>
250 This mistake partially disabled optimization of unnamed
251 extended-Query statements in 8.3.0 and 8.3.1: in particular the
252 LIKE-to-indexscan optimization would never be applied if the LIKE
253 pattern was passed as a parameter, and constraint exclusion
254 depending on a parameter value didn't work either.
255 </para>
256 </listitem>
258 <listitem>
259 <para>
260 Fix planner failure when an indexable <function>MIN</> or
261 <function>MAX</> aggregate is used with <literal>DISTINCT</> or
262 <literal>ORDER BY</> (Tom)
263 </para>
264 </listitem>
266 <listitem>
267 <para>
268 Fix planner to ensure it never uses a <quote>physical tlist</> for a
269 plan node that is feeding a Sort node (Tom)
270 </para>
272 <para>
273 This led to the sort having to push around more data than it really
274 needed to, since unused column values were included in the sorted
275 data.
276 </para>
277 </listitem>
279 <listitem>
280 <para>
281 Avoid unnecessary copying of query strings (Tom)
282 </para>
284 <para>
285 This fixes a performance problem introduced in 8.3.0 when a very large
286 number of commands are submitted as a single query string.
287 </para>
288 </listitem>
290 <listitem>
291 <para>
292 Make <function>TransactionIdIsCurrentTransactionId()</> use binary
293 search instead of linear search when checking child-transaction XIDs
294 (Heikki)
295 </para>
297 <para>
298 This fixes some cases in which 8.3.0 was significantly
299 slower than earlier releases.
300 </para>
301 </listitem>
303 <listitem>
304 <para>
305 Fix conversions between ISO-8859-5 and other encodings to handle
306 Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
307 two dots) (Sergey Burladyan)
308 </para>
309 </listitem>
311 <listitem>
312 <para>
313 Fix several datatype input functions, notably <function>array_in()</>,
314 that were allowing unused bytes in their results to contain
315 uninitialized, unpredictable values (Tom)
316 </para>
318 <para>
319 This could lead to failures in which two apparently identical literal
320 values were not seen as equal, resulting in the parser complaining
321 about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
322 expressions.
323 </para>
324 </listitem>
326 <listitem>
327 <para>
328 Fix a corner case in regular-expression substring matching
329 (<literal>substring(<replaceable>string</> from
330 <replaceable>pattern</>)</literal>) (Tom)
331 </para>
333 <para>
334 The problem occurs when there is a match to the pattern overall but
335 the user has specified a parenthesized subexpression and that
336 subexpression hasn't got a match. An example is
337 <literal>substring('foo' from 'foo(bar)?')</>.
338 This should return NULL, since <literal>(bar)</> isn't matched, but
339 it was mistakenly returning the whole-pattern match instead (ie,
340 <literal>foo</>).
341 </para>
342 </listitem>
344 <listitem>
345 <para>
346 Prevent cancellation of an auto-vacuum that was launched to prevent
347 XID wraparound (Alvaro)
348 </para>
349 </listitem>
351 <listitem>
352 <para>
353 Improve <command>ANALYZE</>'s handling of in-doubt tuples (those
354 inserted or deleted by a not-yet-committed transaction) so that the
355 counts it reports to the stats collector are more likely to be correct
356 (Pavan Deolasee)
357 </para>
358 </listitem>
360 <listitem>
361 <para>
362 Fix <application>initdb</> to reject a relative path for its
363 <literal>--xlogdir</> (<literal>-X</>) option (Tom)
364 </para>
365 </listitem>
367 <listitem>
368 <para>
369 Make <application>psql</> print tab characters as an appropriate
370 number of spaces, rather than <literal>\x09</literal> as was done in
371 8.3.0 and 8.3.1 (Bruce)
372 </para>
373 </listitem>
375 <listitem>
376 <para>
377 Update time zone data files to <application>tzdata</> release 2008c (for
378 DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba, and
379 Argentina/San_Luis)
380 </para>
381 </listitem>
383 <listitem>
384 <para>
385 Add <function>ECPGget_PGconn()</> function to
386 <application>ecpglib</> (Michael)
387 </para>
388 </listitem>
390 <listitem>
391 <para>
392 Fix incorrect result from <application>ecpg</>'s
393 <function>PGTYPEStimestamp_sub()</> function (Michael)
394 </para>
395 </listitem>
397 <listitem>
398 <para>
399 Fix handling of continuation line markers in <application>ecpg</>
400 (Michael)
401 </para>
402 </listitem>
404 <listitem>
405 <para>
406 Fix possible crashes in <filename>contrib/cube</> functions (Tom)
407 </para>
408 </listitem>
410 <listitem>
411 <para>
412 Fix core dump in <filename>contrib/xml2</>'s
413 <function>xpath_table()</> function when the input query returns a
414 NULL value (Tom)
415 </para>
416 </listitem>
418 <listitem>
419 <para>
420 Fix <filename>contrib/xml2</>'s makefile to not override
421 <literal>CFLAGS</>, and make it auto-configure properly for
422 <application>libxslt</> present or not (Tom)
423 </para>
424 </listitem>
426 </itemizedlist>
428 </sect2>
429 </sect1>
431 <sect1 id="release-8-3-1">
432 <title>Release 8.3.1</title>
434 <note>
435 <title>Release date</title>
436 <simpara>2008-03-17</simpara>
437 </note>
439 <para>
440 This release contains a variety of fixes from 8.3.0.
441 For information about new features in the 8.3 major release, see
442 <xref linkend="release-8-3">.
443 </para>
445 <sect2>
446 <title>Migration to Version 8.3.1</title>
448 <para>
449 A dump/restore is not required for those running 8.3.X.
450 However, you might need to <command>REINDEX</> indexes on textual
451 columns after updating, if you are affected by the Windows locale
452 issue described below.
453 </para>
455 </sect2>
457 <sect2>
458 <title>Changes</title>
460 <itemizedlist>
462 <listitem>
463 <para>
464 Fix character string comparison for Windows locales that consider
465 different character combinations as equal (Tom)
466 </para>
468 <para>
469 This fix applies only on Windows and only when using UTF-8
470 database encoding. The same fix was made for all other cases
471 over two years ago, but Windows with UTF-8 uses a separate code
472 path that was not updated. If you are using a locale that
473 considers some non-identical strings as equal, you may need to
474 <command>REINDEX</> to fix existing indexes on textual columns.
475 </para>
476 </listitem>
478 <listitem>
479 <para>
480 Repair corner-case bugs in <command>VACUUM FULL</> (Tom)
481 </para>
483 <para>
484 A potential deadlock between concurrent <command>VACUUM FULL</>
485 operations on different system catalogs was introduced in 8.2.
486 This has now been corrected. 8.3 made this worse because the
487 deadlock could occur within a critical code section, making it
488 a PANIC rather than just ERROR condition.
489 </para>
491 <para>
492 Also, a <command>VACUUM FULL</> that failed partway through
493 vacuuming a system catalog could result in cache corruption in
494 concurrent database sessions.
495 </para>
497 <para>
498 Another <command>VACUUM FULL</> bug introduced in 8.3 could
499 result in a crash or out-of-memory report when dealing with
500 pages containing no live tuples.
501 </para>
502 </listitem>
504 <listitem>
505 <para>
506 Fix misbehavior of foreign key checks involving <type>character</>
507 or <type>bit</> columns (Tom)
508 </para>
510 <para>
511 If the referencing column were of a different but compatible type
512 (for instance <type>varchar</>), the constraint was enforced incorrectly.
513 </para>
514 </listitem>
516 <listitem>
517 <para>
518 Avoid needless deadlock failures in no-op foreign-key checks (Stephan
519 Szabo, Tom)
520 </para>
521 </listitem>
523 <listitem>
524 <para>
525 Fix possible core dump when re-planning a prepared query (Tom)
526 </para>
528 <para>
529 This bug affected only protocol-level prepare operations, not
530 SQL <command>PREPARE</>, and so tended to be seen only with
531 JDBC, DBI, and other client-side drivers that use prepared
532 statements heavily.
533 </para>
534 </listitem>
536 <listitem>
537 <para>
538 Fix possible failure when re-planning a query that calls an SPI-using
539 function (Tom)
540 </para>
541 </listitem>
543 <listitem>
544 <para>
545 Fix failure in row-wise comparisons involving columns of different
546 datatypes (Tom)
547 </para>
548 </listitem>
550 <listitem>
551 <para>
552 Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
553 race condition (Tom)
554 </para>
556 <para>
557 In rare cases a session that had just executed a
558 <command>LISTEN</> might not get a notification, even though
559 one would be expected because the concurrent transaction executing
560 <command>NOTIFY</> was observed to commit later.
561 </para>
563 <para>
564 A side effect of the fix is that a transaction that has executed
565 a not-yet-committed <command>LISTEN</> command will not see any
566 row in <structname>pg_listener</> for the <command>LISTEN</>,
567 should it choose to look; formerly it would have. This behavior
568 was never documented one way or the other, but it is possible that
569 some applications depend on the old behavior.
570 </para>
571 </listitem>
573 <listitem>
574 <para>
575 Disallow <command>LISTEN</> and <command>UNLISTEN</> within a
576 prepared transaction (Tom)
577 </para>
579 <para>
580 This was formerly allowed but trying to do it had various unpleasant
581 consequences, notably that the originating backend could not exit
582 as long as an <command>UNLISTEN</> remained uncommitted.
583 </para>
584 </listitem>
586 <listitem>
587 <para>
588 Disallow dropping a temporary table within a
589 prepared transaction (Heikki)
590 </para>
592 <para>
593 This was correctly disallowed by 8.1, but the check was inadvertently
594 broken in 8.2 and 8.3.
595 </para>
596 </listitem>
598 <listitem>
599 <para>
600 Fix rare crash when an error occurs during a query using a hash index
601 (Heikki)
602 </para>
603 </listitem>
605 <listitem>
606 <para>
607 Fix incorrect comparison of <type>tsquery</> values (Teodor)
608 </para>
609 </listitem>
611 <listitem>
612 <para>
613 Fix incorrect behavior of <literal>LIKE</> with non-ASCII characters
614 in single-byte encodings (Rolf Jentsch)
615 </para>
616 </listitem>
618 <listitem>
619 <para>
620 Disable <function>xmlvalidate</> (Tom)
621 </para>
623 <para>
624 This function should have been removed before 8.3 release, but
625 was inadvertently left in the source code. It poses a small
626 security risk since unprivileged users could use it to read the
627 first few characters of any file accessible to the server.
628 </para>
629 </listitem>
631 <listitem>
632 <para>
633 Fix memory leaks in certain usages of set-returning functions (Neil)
634 </para>
635 </listitem>
637 <listitem>
638 <para>
639 Make <function>encode(<replaceable>bytea</>, 'escape')</> convert all
640 high-bit-set byte values into <literal>\</><replaceable>nnn</> octal
641 escape sequences (Tom)
642 </para>
644 <para>
645 This is necessary to avoid encoding problems when the database
646 encoding is multi-byte. This change could pose compatibility issues
647 for applications that are expecting specific results from
648 <function>encode</>.
649 </para>
650 </listitem>
652 <listitem>
653 <para>
654 Fix input of datetime values for February 29 in years BC (Tom)
655 </para>
657 <para>
658 The former coding was mistaken about which years were leap years.
659 </para>
660 </listitem>
662 <listitem>
663 <para>
664 Fix <quote>unrecognized node type</> error in some variants of
665 <command>ALTER OWNER</> (Tom)
666 </para>
667 </listitem>
669 <listitem>
670 <para>
671 Avoid tablespace permissions errors in <command>CREATE TABLE LIKE
672 INCLUDING INDEXES</> (Tom)
673 </para>
674 </listitem>
676 <listitem>
677 <para>
678 Ensure <structname>pg_stat_activity</>.<structfield>waiting</> flag
679 is cleared when a lock wait is aborted (Tom)
680 </para>
681 </listitem>
683 <listitem>
684 <para>
685 Fix handling of process permissions on Windows Vista (Dave, Magnus)
686 </para>
688 <para>
689 In particular, this fix allows starting the server as the Administrator
690 user.
691 </para>
692 </listitem>
694 <listitem>
695 <para>
696 Update time zone data files to <application>tzdata</> release 2008a
697 (in particular, recent Chile changes); adjust timezone abbreviation
698 <literal>VET</> (Venezuela) to mean UTC-4:30, not UTC-4:00 (Tom)
699 </para>
700 </listitem>
702 <listitem>
703 <para>
704 Fix <application>ecpg</> problems with arrays (Michael)
705 </para>
706 </listitem>
708 <listitem>
709 <para>
710 Fix <application>pg_ctl</> to correctly extract the postmaster's port
711 number from command-line options (Itagaki Takahiro, Tom)
712 </para>
714 <para>
715 Previously, <literal>pg_ctl start -w</> could try to contact the
716 postmaster on the wrong port, leading to bogus reports of startup
717 failure.
718 </para>
719 </listitem>
721 <listitem>
722 <para>
723 Use <option>-fwrapv</> to defend against possible misoptimization
724 in recent <application>gcc</> versions (Tom)
725 </para>
727 <para>
728 This is known to be necessary when building <productname>PostgreSQL</>
729 with <application>gcc</> 4.3 or later.
730 </para>
731 </listitem>
733 <listitem>
734 <para>
735 Enable building <filename>contrib/uuid-ossp</> with MSVC (Hiroshi Saito)
736 </para>
737 </listitem>
739 </itemizedlist>
741 </sect2>
742 </sect1>
744 <sect1 id="release-8-3">
745 <title>Release 8.3</title>
747 <note>
748 <title>Release date</title>
749 <simpara>2008-02-04</simpara>
750 </note>
752 <sect2>
753 <title>Overview</title>
755 <para>
756 With significant new functionality and performance enhancements,
757 this release represents a major leap forward for
758 <productname>PostgreSQL</>. This was made possible by a growing
759 community that has dramatically accelerated the pace of
760 development. This release adds the following major features:
761 </para>
763 <itemizedlist>
765 <listitem>
766 <para>
767 Full text search is integrated into the core database system
768 </para>
769 </listitem>
771 <listitem>
772 <para>
773 Support for the SQL/XML standard, including new operators and an
774 <type>XML</type> data type
775 </para>
776 </listitem>
778 <listitem>
779 <para>
780 Enumerated data types (<type>ENUM</type>)
781 </para>
782 </listitem>
784 <listitem>
785 <para>
786 Arrays of composite types
787 </para>
788 </listitem>
790 <listitem>
791 <para>
792 Universally Unique Identifier (<type>UUID</>) data type
793 </para>
794 </listitem>
796 <listitem>
797 <para>
798 Add control over whether <literal>NULL</>s sort first or last
799 </para>
800 </listitem>
802 <listitem>
803 <para>
804 Updatable cursors
805 </para>
806 </listitem>
808 <listitem>
809 <para>
810 Server configuration parameters can now be set on a per-function
811 basis
812 </para>
813 </listitem>
815 <listitem>
816 <para>
817 User-defined types can now have type modifiers
818 </para>
819 </listitem>
821 <listitem>
822 <para>
823 Automatically re-plan cached queries when table
824 definitions change or statistics are updated
825 </para>
826 </listitem>
828 <listitem>
829 <para>
830 Numerous improvements in logging and statistics collection
831 </para>
832 </listitem>
834 <listitem>
835 <para>
836 Support Security Service Provider Interface (<acronym>SSPI</>) for
837 authentication on Windows
838 </para>
839 </listitem>
841 <listitem>
842 <para>
843 Support multiple concurrent autovacuum processes, and other
844 autovacuum improvements
845 </para>
846 </listitem>
848 <listitem>
849 <para>
850 Allow the whole <productname>PostgreSQL</> distribution to be compiled
851 with <productname>Microsoft Visual C++</>
852 </para>
853 </listitem>
855 </itemizedlist>
857 <para>
858 Major performance improvements are listed below. Most of
859 these enhancements are automatic and do not require user changes or
860 tuning:
861 </para>
863 <itemizedlist>
865 <listitem>
866 <para>
867 Asynchronous commit delays writes to WAL during transaction commit
868 </para>
869 </listitem>
871 <listitem>
872 <para>
873 Checkpoint writes can be spread over a longer time period to smooth
874 the I/O spike during each checkpoint
875 </para>
876 </listitem>
878 <listitem>
879 <para>
880 Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for
881 most <command>UPDATE</>s and <command>DELETE</>s
882 </para>
883 </listitem>
885 <listitem>
886 <para>
887 Just-in-time background writer strategy improves disk write
888 efficiency
889 </para>
890 </listitem>
892 <listitem>
893 <para>
894 Using non-persistent transaction IDs for read-only transactions
895 reduces overhead and <command>VACUUM</> requirements
896 </para>
897 </listitem>
899 <listitem>
900 <para>
901 Per-field and per-row storage overhead has been reduced
902 </para>
903 </listitem>
905 <listitem>
906 <para>
907 Large sequential scans no longer force out frequently used
908 cached pages
909 </para>
910 </listitem>
912 <listitem>
913 <para>
914 Concurrent large sequential scans can now share disk reads
915 </para>
916 </listitem>
918 <listitem>
919 <para>
920 <literal>ORDER BY ... LIMIT</> can be done without sorting
921 </para>
922 </listitem>
924 </itemizedlist>
926 <para>
927 The above items are explained in more detail in the sections below.
928 </para>
930 </sect2>
932 <sect2>
933 <title>Migration to Version 8.3</title>
935 <para>
936 A dump/restore using <application>pg_dump</application> is
937 required for those wishing to migrate data from any previous
938 release.
939 </para>
941 <para>
942 Observe the following incompatibilities:
943 </para>
945 <sect3>
946 <title>General</title>
947 <itemizedlist>
949 <listitem>
950 <para>
951 Non-character data types are no longer automatically cast to
952 <type>TEXT</> (Peter, Tom)
953 </para>
955 <para>
956 Previously, if a non-character value was supplied to an operator or
957 function that requires <type>text</> input, it was automatically
958 cast to <type>text</>, for most (though not all) built-in data types.
959 This no longer happens: an explicit cast to <type>text</> is now
960 required for all non-character-string types. For example, these
961 expressions formerly worked:
963 <programlisting>
964 substr(current_date, 1, 4)
965 23 LIKE '2%'
966 </programlisting>
968 but will now draw <quote>function does not exist</> and <quote>operator
969 does not exist</> errors respectively. Use an explicit cast instead:
971 <programlisting>
972 substr(current_date::text, 1, 4)
973 23::text LIKE '2%'
974 </programlisting>
976 (Of course, you can use the more verbose <literal>CAST()</> syntax too.)
977 The reason for the change is that these automatic casts too often caused
978 surprising behavior. An example is that in previous releases, this
979 expression was accepted but did not do what was expected:
981 <programlisting>
982 current_date &lt; 2017-11-17
983 </programlisting>
985 This is actually comparing a date to an integer, which should be
986 (and now is) rejected &mdash; but in the presence of automatic
987 casts both sides were cast to <type>text</> and a textual comparison
988 was done, because the <literal>text &lt; text</> operator was able
989 to match the expression when no other <literal>&lt;</> operator could.
990 </para>
992 <para>
993 Types <type>char(<replaceable>n</>)</type> and
994 <type>varchar(<replaceable>n</>)</type> still cast to <type>text</>
995 automatically. Also, automatic casting to <type>text</> still works for
996 inputs to the concatenation (<literal>||</>) operator, so long as least
997 one input is a character-string type.
998 </para>
999 </listitem>
1001 <listitem>
1002 <para>
1003 Full text search features from <filename>contrib/tsearch2</> have
1004 been moved into the core server, with some minor syntax changes
1005 </para>
1007 <para>
1008 <filename>contrib/tsearch2</> now contains a compatibility
1009 interface.
1010 </para>
1011 </listitem>
1013 <listitem>
1014 <para>
1015 <literal>ARRAY(SELECT ...)</literal>, where the <command>SELECT</>
1016 returns no rows, now returns an empty array, rather than NULL
1017 (Tom)
1018 </para>
1019 </listitem>
1021 <listitem>
1022 <para>
1023 The array type name for a base data type is no longer always the base
1024 type's name with an underscore prefix
1025 </para>
1027 <para>
1028 The old naming convention is still honored when possible, but
1029 application code should no longer depend on it. Instead
1030 use the new <literal>pg_type.typarray</literal> column to
1031 identify the array data type associated with a given type.
1032 </para>
1033 </listitem>
1035 <listitem>
1036 <para>
1037 <literal>ORDER BY ... USING</> <replaceable>operator</> must now
1038 use a less-than or greater-than <replaceable>operator</> that is
1039 defined in a btree operator class
1040 </para>
1042 <para>
1043 This restriction was added to prevent inconsistent results.
1044 </para>
1045 </listitem>
1047 <listitem>
1048 <para>
1049 <command>SET LOCAL</command> changes now persist until
1050 the end of the outermost transaction, unless rolled back (Tom)
1051 </para>
1053 <para>
1054 Previously <command>SET LOCAL</command>'s effects were lost
1055 after subtransaction commit (<command>RELEASE SAVEPOINT</>
1056 or exit from a PL/pgSQL exception block).
1057 </para>
1058 </listitem>
1060 <listitem>
1061 <para>
1062 Commands rejected in transaction blocks are now also rejected in
1063 multiple-statement query strings (Tom)
1064 </para>
1066 <para>
1067 For example, <literal>"BEGIN; DROP DATABASE; COMMIT"</> will now be
1068 rejected even if submitted as a single query message.
1069 </para>
1070 </listitem>
1072 <listitem>
1073 <para>
1074 <command>ROLLBACK</> outside a transaction block now
1075 issues <literal>NOTICE</> instead of <literal>WARNING</> (Bruce)
1076 </para>
1077 </listitem>
1079 <listitem>
1080 <para>
1081 Prevent <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command>
1082 from accepting schema-qualified names (Bruce)
1083 </para>
1085 <para>
1086 Formerly, these commands accepted <literal>schema.relation</> but
1087 ignored the schema part, which was confusing.
1088 </para>
1089 </listitem>
1091 <listitem>
1092 <para>
1093 <command>ALTER SEQUENCE</> no longer affects the sequence's
1094 <function>currval()</> state (Tom)
1095 </para>
1096 </listitem>
1098 <listitem>
1099 <para>
1100 Foreign keys now must match indexable conditions for
1101 cross-data-type references (Tom)
1102 </para>
1104 <para>
1105 This improves semantic consistency and helps avoid
1106 performance problems.
1107 </para>
1108 </listitem>
1110 <listitem>
1111 <para>
1112 Restrict object size functions to users who have reasonable
1113 permissions to view such information (Tom)
1114 </para>
1116 <para>
1117 For example, <function>pg_database_size()</function> now requires
1118 <literal>CONNECT</> permission, which is granted to everyone by
1119 default. <function>pg_tablespace_size()</function> requires
1120 <literal>CREATE</> permission in the tablespace, or is allowed if
1121 the tablespace is the default tablespace for the database.
1122 </para>
1123 </listitem>
1125 <listitem>
1126 <para>
1127 Remove the undocumented <literal>!!=</> (not in) operator (Tom)
1128 </para>
1130 <para>
1131 <literal>NOT IN (SELECT ...)</literal> is the proper way to
1132 perform this operation.
1133 </para>
1134 </listitem>
1136 <listitem>
1137 <para>
1138 Internal hashing functions are now more uniformly-distributed (Tom)
1139 </para>
1141 <para>
1142 If application code was computing and storing hash values using
1143 internal <productname>PostgreSQL</> hashing functions, the hash
1144 values must be regenerated.
1145 </para>
1146 </listitem>
1148 <listitem>
1149 <para>
1150 C-code conventions for handling variable-length data values
1151 have changed (Greg Stark, Tom)
1152 </para>
1154 <para>
1155 The new <function>SET_VARSIZE()</> macro <emphasis>must</> be used
1156 to set the length of generated <type>varlena</> values. Also, it
1157 might be necessary to expand (<quote>de-TOAST</quote>) input values
1158 in more cases.
1159 </para>
1160 </listitem>
1162 <listitem>
1163 <para>
1164 Continuous archiving no longer reports each successful archive
1165 operation to the server logs unless <literal>DEBUG</> level is used
1166 (Simon)
1167 </para>
1168 </listitem>
1170 </itemizedlist>
1172 </sect3>
1174 <sect3>
1175 <title>Configuration Parameters</title>
1177 <itemizedlist>
1179 <listitem>
1180 <para>
1181 Numerous changes in administrative server parameters
1182 </para>
1184 <para>
1185 <varname>bgwriter_lru_percent</>,
1186 <varname>bgwriter_all_percent</>,
1187 <varname>bgwriter_all_maxpages</>,
1188 <varname>stats_start_collector</>, and
1189 <varname>stats_reset_on_server_start</> are removed.
1190 <varname>redirect_stderr</> is renamed to
1191 <varname>logging_collector</>.
1192 <varname>stats_command_string</> is renamed to
1193 <varname>track_activities</>.
1194 <varname>stats_block_level</> and <varname>stats_row_level</>
1195 are merged into <varname>track_counts</>.
1196 A new boolean configuration parameter, <varname>archive_mode</>,
1197 controls archiving. Autovacuum's default settings have changed.
1198 </para>
1199 </listitem>
1201 <listitem>
1202 <para>
1203 Remove <varname>stats_start_collector</varname> parameter (Tom)
1204 </para>
1206 <para>
1207 We now always start the collector process, unless <acronym>UDP</>
1208 socket creation fails.
1209 </para>
1210 </listitem>
1212 <listitem>
1213 <para>
1214 Remove <varname>stats_reset_on_server_start</varname> parameter (Tom)
1215 </para>
1217 <para>
1218 This was removed because <function>pg_stat_reset()</function>
1219 can be used for this purpose.
1220 </para>
1221 </listitem>
1223 <listitem>
1224 <para>
1225 Commenting out a parameter in <filename>postgresql.conf</> now
1226 causes it to revert to its default value (Joachim Wieland)
1227 </para>
1229 <para>
1230 Previously, commenting out an entry left the parameter's value unchanged
1231 until the next server restart.
1232 </para>
1233 </listitem>
1235 </itemizedlist>
1237 </sect3>
1240 <sect3>
1241 <title>Character Encodings</title>
1243 <itemizedlist>
1245 <listitem>
1246 <para>
1247 Add more checks for invalidly-encoded data (Andrew)
1248 </para>
1250 <para>
1251 This change plugs some holes that existed in literal backslash
1252 escape string processing and <command>COPY</command> escape
1253 processing. Now the de-escaped string is rechecked to see if the
1254 result created an invalid multi-byte character.
1255 </para>
1256 </listitem>
1258 <listitem>
1259 <para>
1260 Disallow database encodings that are inconsistent with the server's
1261 locale setting (Tom)
1262 </para>
1264 <para>
1265 On most platforms, <literal>C</> locale is the only locale that
1266 will work with any database encoding. Other locale settings imply
1267 a specific encoding and will misbehave if the database encoding
1268 is something different. (Typical symptoms include bogus textual
1269 sort order and wrong results from <function>upper()</> or
1270 <function>lower()</>.) The server now rejects attempts to create
1271 databases that have an incompatible encoding.
1272 </para>
1273 </listitem>
1275 <listitem>
1276 <para>
1277 Ensure that <function>chr()</function> cannot create
1278 invalidly-encoded values (Andrew)
1279 </para>
1281 <para>
1282 In UTF8-encoded databases the argument of <function>chr()</function> is
1283 now treated as a Unicode code point. In other multi-byte encodings
1284 <function>chr()</function>'s argument must designate a 7-bit ASCII
1285 character. Zero is no longer accepted.
1286 <function>ascii()</function> has been adjusted to match.
1287 </para>
1288 </listitem>
1290 <listitem>
1291 <para>
1292 Adjust <function>convert()</function> behavior to ensure encoding
1293 validity (Andrew)
1294 </para>
1296 <para>
1297 The two argument form of <function>convert()</function> has been
1298 removed. The three argument form now takes a <type>bytea</type>
1299 first argument and returns a <type>bytea</type>. To cover the
1300 loss of functionality, three new functions have been added:
1301 </para>
1303 <itemizedlist>
1304 <listitem>
1305 <para>
1306 <function>convert_from(bytea, name)</function> returns
1307 <type>text</> &mdash; converts the first argument from the named
1308 encoding to the database encoding
1309 </para>
1310 </listitem>
1312 <listitem>
1313 <para>
1314 <function>convert_to(text, name)</function> returns
1315 <type>bytea</> &mdash; converts the first argument from the
1316 database encoding to the named encoding
1317 </para>
1318 </listitem>
1320 <listitem>
1321 <para>
1322 <function>length(bytea, name)</function> returns
1323 <type>integer</> &mdash; gives the length of the first
1324 argument in characters in the named encoding
1325 </para>
1326 </listitem>
1327 </itemizedlist>
1328 </listitem>
1330 <listitem>
1331 <para>
1332 Remove <literal>convert(argument USING conversion_name)</literal>
1333 (Andrew)
1334 </para>
1336 <para>
1337 Its behavior did not match the SQL standard.
1338 </para>
1339 </listitem>
1341 <listitem>
1342 <para>
1343 Make JOHAB encoding client-only (Tatsuo)
1344 </para>
1346 <para>
1347 JOHAB is not safe as a server-side encoding.
1348 </para>
1349 </listitem>
1351 </itemizedlist>
1353 </sect3>
1355 </sect2>
1357 <sect2>
1358 <title>Changes</title>
1360 <para>
1361 Below you will find a detailed account of the
1362 changes between <productname>PostgreSQL</productname> 8.3 and
1363 the previous major release.
1364 </para>
1366 <sect3>
1367 <title>Performance</title>
1368 <itemizedlist>
1370 <listitem>
1371 <para>
1372 Asynchronous commit delays writes to WAL during transaction commit
1373 (Simon)
1374 </para>
1376 <para>
1377 This feature dramatically increases performance for short data-modifying
1378 transactions. The disadvantage is that because disk writes are delayed,
1379 if the database or operating system crashes before data is written to
1380 the disk, committed data will be lost. This feature is useful for
1381 applications that can accept some data loss. Unlike turning off
1382 <varname>fsync</varname>, using asynchronous commit does not put
1383 database consistency at risk; the worst case is that after a crash the
1384 last few reportedly-committed transactions might not be committed after
1385 all.
1386 This feature is enabled by turning off <varname>synchronous_commit</>
1387 (which can be done per-session or per-transaction, if some transactions
1388 are critical and others are not).
1389 <varname>wal_writer_delay</> can be adjusted to control the maximum
1390 delay before transactions actually reach disk.
1391 </para>
1392 </listitem>
1394 <listitem>
1395 <para>
1396 Checkpoint writes can be spread over a longer time period to smooth
1397 the I/O spike during each checkpoint (Itagaki Takahiro and Heikki
1398 Linnakangas)
1399 </para>
1401 <para>
1402 Previously all modified buffers were forced to disk as quickly as
1403 possible during a
1404 checkpoint, causing an I/O spike that decreased server performance.
1405 This new approach spreads out disk writes during checkpoints,
1406 reducing peak I/O usage. (User-requested and shutdown checkpoints
1407 are still written as quickly as possible.)
1408 </para>
1409 </listitem>
1411 <listitem>
1412 <para>
1413 Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for most
1414 <command>UPDATE</>s and <command>DELETE</>s (Pavan Deolasee, with
1415 ideas from many others)
1416 </para>
1418 <para>
1419 <command>UPDATE</>s and <command>DELETE</>s leave dead tuples
1420 behind, as do failed <command>INSERT</>s. Previously only
1421 <command>VACUUM</> could reclaim space taken by dead tuples. With
1422 <acronym>HOT</> dead tuple space can be automatically reclaimed at
1423 the time of <command>INSERT</> or <command>UPDATE</> if no changes
1424 are made to indexed columns. This allows for more consistent
1425 performance. Also, <acronym>HOT</> avoids adding duplicate index
1426 entries.
1427 </para>
1428 </listitem>
1430 <listitem>
1431 <para>
1432 Just-in-time background writer strategy improves disk write
1433 efficiency (Greg Smith, Itagaki Takahiro)
1434 </para>
1436 <para>
1437 This greatly reduces the need for manual tuning of the background
1438 writer.
1439 </para>
1440 </listitem>
1442 <listitem>
1443 <para>
1444 Per-field and per-row storage overhead have been reduced
1445 (Greg Stark, Heikki Linnakangas)
1446 </para>
1448 <para>
1449 Variable-length data types with data values less than 128 bytes long
1450 will see a storage decrease of 3 to 6 bytes. For example, two adjacent
1451 <type>char(1)</type> fields now use 4 bytes instead of 16. Row headers
1452 are also 4 bytes shorter than before.
1453 </para>
1454 </listitem>
1456 <listitem>
1457 <para>
1458 Using non-persistent transaction IDs for read-only transactions
1459 reduces overhead and <command>VACUUM</> requirements (Florian Pflug)
1460 </para>
1462 <para>
1463 Non-persistent transaction IDs do not increment the global
1464 transaction counter. Therefore, they reduce the load on
1465 <structname>pg_clog</> and increase the time between forced
1466 vacuums to prevent transaction ID wraparound.
1467 Other performance
1468 improvements were also made that should improve concurrency.
1469 </para>
1470 </listitem>
1472 <listitem>
1473 <para>
1474 Avoid incrementing the command counter after a read-only command (Tom)
1475 </para>
1477 <para>
1478 There was formerly a hard limit of 2<superscript>32</>
1479 (4 billion) commands per transaction. Now only commands that
1480 actually changed the database count, so while this limit still
1481 exists, it should be significantly less annoying.
1482 </para>
1483 </listitem>
1485 <listitem>
1486 <para>
1487 Create a dedicated <acronym>WAL</> writer process to off-load
1488 work from backends (Simon)
1489 </para>
1490 </listitem>
1492 <listitem>
1493 <para>
1494 Skip unnecessary WAL writes for <command>CLUSTER</command> and
1495 <command>COPY</command> (Simon)
1496 </para>
1498 <para>
1499 Unless WAL archiving is enabled, the system now avoids WAL writes
1500 for <command>CLUSTER</command> and just <function>fsync()</>s the
1501 table at the end of the command. It also does the same for
1502 <command>COPY</command> if the table was created in the same
1503 transaction.
1504 </para>
1505 </listitem>
1507 <listitem>
1508 <para>
1509 Large sequential scans no longer force out frequently used
1510 cached pages (Simon, Heikki, Tom)
1511 </para>
1512 </listitem>
1514 <listitem>
1515 <para>
1516 Concurrent large sequential scans can now share disk reads (Jeff Davis)
1517 </para>
1519 <para>
1520 This is accomplished by starting the new sequential scan in the
1521 middle of the table (where another sequential scan is already
1522 in-progress) and wrapping around to the beginning to finish. This
1523 can affect the order of returned rows in a query that does not
1524 specify <literal>ORDER BY</>. The <varname>synchronize_seqscans</>
1525 configuration parameter can be used to disable this if necessary.
1526 </para>
1527 </listitem>
1529 <listitem>
1530 <para>
1531 <literal>ORDER BY ... LIMIT</> can be done without sorting
1532 (Greg Stark)
1533 </para>
1535 <para>
1536 This is done by sequentially scanning the table and tracking just
1537 the <quote>top N</> candidate rows, rather than performing a
1538 full sort of the entire table. This is useful when there is no
1539 matching index and the <literal>LIMIT</> is not large.
1540 </para>
1541 </listitem>
1543 <listitem>
1544 <para>
1545 Put a rate limit on messages sent to the statistics
1546 collector by backends
1547 (Tom)
1548 </para>
1550 <para>
1551 This reduces overhead for short transactions, but might sometimes
1552 increase the delay before statistics are tallied.
1553 </para>
1554 </listitem>
1556 <listitem>
1557 <para>
1558 Improve hash join performance for cases with many NULLs (Tom)
1559 </para>
1560 </listitem>
1562 <listitem>
1563 <para>
1564 Speed up operator lookup for cases with non-exact datatype matches (Tom)
1565 </para>
1566 </listitem>
1568 </itemizedlist>
1570 </sect3>
1572 <sect3>
1573 <title>Server</title>
1574 <itemizedlist>
1576 <listitem>
1577 <para>
1578 Autovacuum is now enabled by default (Alvaro)
1579 </para>
1581 <para>
1582 Several changes were made to eliminate disadvantages of having
1583 autovacuum enabled, thereby justifying the change in default.
1584 Several other autovacuum parameter defaults were also modified.
1585 </para>
1586 </listitem>
1588 <listitem>
1589 <para>
1590 Support multiple concurrent autovacuum processes (Alvaro, Itagaki
1591 Takahiro)
1592 </para>
1594 <para>
1595 This allows multiple vacuums to run concurrently. This prevents
1596 vacuuming of a large table from delaying vacuuming of smaller tables.
1597 </para>
1598 </listitem>
1600 <listitem>
1601 <para>
1602 Automatically re-plan cached queries when table
1603 definitions change or statistics are updated (Tom)
1604 </para>
1606 <para>
1607 Previously PL/PgSQL functions that referenced temporary tables
1608 would fail if the temporary table was dropped and recreated
1609 between function invocations, unless <literal>EXECUTE</> was
1610 used. This improvement fixes that problem and many related issues.
1611 </para>
1612 </listitem>
1614 <listitem>
1615 <para>
1616 Add a <varname>temp_tablespaces</varname> parameter to control
1617 the tablespaces for temporary tables and files (Jaime Casanova,
1618 Albert Cervera, Bernd Helmle)
1619 </para>
1621 <para>
1622 This parameter defines a list of tablespaces to be used. This
1623 enables spreading the I/O load across multiple tablespaces. A random
1624 tablespace is chosen each time a temporary object is created.
1625 Temporary files are no longer stored in per-database
1626 <filename>pgsql_tmp/</filename> directories but in per-tablespace
1627 directories.
1628 </para>
1629 </listitem>
1631 <listitem>
1632 <para>
1633 Place temporary tables' TOAST tables in special schemas named
1634 <literal>pg_toast_temp_<replaceable>nnn</></literal> (Tom)
1635 </para>
1637 <para>
1638 This allows low-level code to recognize these tables as temporary,
1639 which enables various optimizations such as not WAL-logging changes
1640 and using local rather than shared buffers for access. This also
1641 fixes a bug wherein backends unexpectedly held open file references
1642 to temporary TOAST tables.
1643 </para>
1644 </listitem>
1646 <listitem>
1647 <para>
1648 Fix problem that a constant flow of new connection requests could
1649 indefinitely delay the postmaster from completing a shutdown or
1650 a crash restart (Tom)
1651 </para>
1652 </listitem>
1654 <listitem>
1655 <para>
1656 Guard against a very-low-probability data loss scenario by preventing
1657 re-use of a deleted table's relfilenode until after the next
1658 checkpoint (Heikki)
1659 </para>
1660 </listitem>
1662 <listitem>
1663 <para>
1664 Fix <command>CREATE CONSTRAINT TRIGGER</>
1665 to convert old-style foreign key trigger definitions into regular
1666 foreign key constraints (Tom)
1667 </para>
1669 <para>
1670 This will ease porting of foreign key constraints carried forward from
1671 pre-7.3 databases, if they were never converted using
1672 <filename>contrib/adddepend</>.
1673 </para>
1674 </listitem>
1676 <listitem>
1677 <para>
1678 Fix <literal>DEFAULT NULL</> to override inherited defaults (Tom)
1679 </para>
1681 <para>
1682 <literal>DEFAULT NULL</> was formerly considered a noise phrase, but it
1683 should (and now does) override non-null defaults that would otherwise
1684 be inherited from a parent table or domain.
1685 </para>
1686 </listitem>
1688 <listitem>
1689 <para>
1690 Add new encodings EUC_JIS_2004 and SHIFT_JIS_2004 (Tatsuo)
1691 </para>
1693 <para>
1694 These new encodings can be converted to and from UTF-8.
1695 </para>
1696 </listitem>
1698 <listitem>
1699 <para>
1700 Change server startup log message from <quote>database system is
1701 ready</quote> to <quote>database system is ready to accept
1702 connections</quote>, and adjust its timing
1703 </para>
1705 <para>
1706 The message now appears only when the postmaster is really ready
1707 to accept connections.
1708 </para>
1709 </listitem>
1711 </itemizedlist>
1713 </sect3>
1715 <sect3>
1716 <title>Monitoring</title>
1717 <itemizedlist>
1719 <listitem>
1720 <para>
1721 Add <varname>log_autovacuum_min_duration</varname> parameter to
1722 support configurable logging of autovacuum activity (Simon, Alvaro)
1723 </para>
1724 </listitem>
1726 <listitem>
1727 <para>
1728 Add <varname>log_lock_waits</varname> parameter to log lock waiting
1729 (Simon)
1730 </para>
1731 </listitem>
1733 <listitem>
1734 <para>
1735 Add <varname>log_temp_files</varname> parameter to log temporary
1736 file usage (Bill Moran)
1737 </para>
1738 </listitem>
1740 <listitem>
1741 <para>
1742 Add <varname>log_checkpoints</varname> parameter to improve logging
1743 of checkpoints (Greg Smith, Heikki)
1744 </para>
1745 </listitem>
1747 <listitem>
1748 <para>
1749 <varname>log_line_prefix</varname> now supports
1750 <literal>%s</literal> and <literal>%c</literal> escapes in all
1751 processes (Andrew)
1752 </para>
1754 <para>
1755 Previously these escapes worked only for user sessions, not for
1756 background database processes.
1757 </para>
1758 </listitem>
1760 <listitem>
1761 <para>
1762 Add <varname>log_restartpoints</varname> to control logging of
1763 point-in-time recovery restart points (Simon)
1764 </para>
1765 </listitem>
1767 <listitem>
1768 <para>
1769 Last transaction end time is now logged at end of recovery and at
1770 each logged restart point (Simon)
1771 </para>
1772 </listitem>
1774 <listitem>
1775 <para>
1776 Autovacuum now reports its activity start time in
1777 <literal>pg_stat_activity</literal> (Tom)
1778 </para>
1779 </listitem>
1781 <listitem>
1782 <para>
1783 Allow server log output in comma-separated value (CSV) format (Arul
1784 Shaji, Greg Smith, Andrew Dunstan)
1785 </para>
1787 <para>
1788 CSV-format log files can easily be loaded into a database table for
1789 subsequent analysis.
1790 </para>
1791 </listitem>
1793 <listitem>
1794 <para>
1795 Use PostgreSQL-supplied timezone support for formatting timestamps
1796 displayed in the server log (Tom)
1797 </para>
1799 <para>
1800 This avoids Windows-specific problems with localized time zone
1801 names that are in the wrong encoding. There is a new
1802 <varname>log_timezone</> parameter that controls the timezone
1803 used in log messages, independently of the client-visible
1804 <varname>timezone</> parameter.
1805 </para>
1806 </listitem>
1808 <listitem>
1809 <para>
1810 New system view <literal>pg_stat_bgwriter</literal> displays
1811 statistics about background writer activity (Magnus)
1812 </para>
1813 </listitem>
1815 <listitem>
1816 <para>
1817 Add new columns for database-wide tuple statistics to
1818 <literal>pg_stat_database</literal> (Magnus)
1819 </para>
1820 </listitem>
1822 <listitem>
1823 <para>
1824 Add an <literal>xact_start</literal> (transaction start time) column to
1825 <literal>pg_stat_activity</literal> (Neil)
1826 </para>
1828 <para>
1829 This makes it easier to identify long-running transactions.
1830 </para>
1831 </listitem>
1833 <listitem>
1834 <para>
1835 Add <literal>n_live_tuples</> and <literal>n_dead_tuples</> columns
1836 to <literal>pg_stat_all_tables</literal> and related views (Glen
1837 Parker)
1838 </para>
1839 </listitem>
1841 <listitem>
1842 <para>
1843 Merge <varname>stats_block_level</> and <varname>stats_row_level</>
1844 parameters into a single parameter <varname>track_counts</>, which
1845 controls all messages sent to the statistics collector process
1846 (Tom)
1847 </para>
1848 </listitem>
1850 <listitem>
1851 <para>
1852 Rename <varname>stats_command_string</varname> parameter to
1853 <varname>track_activities</varname> (Tom)
1854 </para>
1855 </listitem>
1857 <listitem>
1858 <para>
1859 Fix statistical counting of live and dead tuples to recognize that
1860 committed and aborted transactions have different effects (Tom)
1861 </para>
1862 </listitem>
1864 </itemizedlist>
1866 </sect3>
1868 <sect3>
1869 <title>Authentication</title>
1870 <itemizedlist>
1872 <listitem>
1873 <para>
1874 Support Security Service Provider Interface (<acronym>SSPI</>) for
1875 authentication on Windows (Magnus)
1876 </para>
1877 </listitem>
1879 <listitem>
1880 <para>
1881 Support GSSAPI authentication (Henry Hotz, Magnus)
1882 </para>
1884 <para>
1885 This should be preferred to native Kerberos authentication because
1886 GSSAPI is an industry standard.
1887 </para>
1888 </listitem>
1890 <listitem>
1891 <para>
1892 Support a global SSL configuration file (Victor Wagner)
1893 </para>
1894 </listitem>
1896 <listitem>
1897 <para>
1898 Add <varname>ssl_ciphers</> parameter to control accepted SSL ciphers
1899 (Victor Wagner)
1900 </para>
1901 </listitem>
1903 <listitem>
1904 <para>
1905 Add a Kerberos realm parameter, <varname>krb_realm</> (Magnus)
1906 </para>
1907 </listitem>
1909 </itemizedlist>
1911 </sect3>
1913 <sect3>
1914 <title>Write-Ahead Log (<acronym>WAL</>) and Continuous Archiving</title>
1915 <itemizedlist>
1917 <listitem>
1918 <para>
1919 Change the timestamps recorded in transaction WAL records from
1920 time_t to TimestampTz representation (Tom)
1921 </para>
1923 <para>
1924 This provides sub-second resolution in WAL, which can be useful for
1925 point-in-time recovery.
1926 </para>
1927 </listitem>
1929 <listitem>
1930 <para>
1931 Reduce WAL disk space needed by warm standby servers (Simon)
1932 </para>
1934 <para>
1935 This change allows a warm standby server to pass the name of the earliest
1936 still-needed WAL file to the recovery script, allowing automatic removal
1937 of no-longer-needed WAL files. This is done using <literal>%r</> in
1938 the <varname>restore_command</varname> parameter of
1939 <filename>recovery.conf</filename>.
1940 </para>
1941 </listitem>
1943 <listitem>
1944 <para>
1945 New boolean configuration parameter, <varname>archive_mode</>,
1946 controls archiving (Simon)
1947 </para>
1949 <para>
1950 Previously setting <varname>archive_command</> to an empty string
1951 turned off archiving. Now <varname>archive_mode</> turns archiving
1952 on and off, independently of <varname>archive_command</>. This is
1953 useful for stopping archiving temporarily.
1954 </para>
1955 </listitem>
1957 </itemizedlist>
1959 </sect3>
1961 <sect3>
1962 <title>Queries</title>
1963 <itemizedlist>
1965 <listitem>
1966 <para>
1967 Full text search is integrated into the core database
1968 system (Teodor, Oleg)
1969 </para>
1971 <para>
1972 Text search has been improved, moved into the core code, and is now
1973 installed by default. <filename>contrib/tsearch2</> now contains
1974 a compatibility interface.
1975 </para>
1976 </listitem>
1978 <listitem>
1979 <para>
1980 Add control over whether <literal>NULL</>s sort first or last (Teodor, Tom)
1981 </para>
1983 <para>
1984 The syntax is <literal>ORDER BY ... NULLS FIRST/LAST</>.
1985 </para>
1986 </listitem>
1988 <listitem>
1989 <para>
1990 Allow per-column ascending/descending (<literal>ASC</>/<literal>DESC</>)
1991 ordering options for indexes (Teodor, Tom)
1992 </para>
1994 <para>
1995 Previously a query using <literal>ORDER BY</> with mixed
1996 <literal>ASC</>/<literal>DESC</> specifiers could not fully use
1997 an index. Now an index can be fully used in such cases if the
1998 index was created with matching
1999 <literal>ASC</>/<literal>DESC</> specifications.
2000 <literal>NULL</> sort order within an index can be controlled, too.
2001 </para>
2002 </listitem>
2004 <listitem>
2005 <para>
2006 Allow <literal>col IS NULL</> to use an index (Teodor)
2007 </para>
2008 </listitem>
2010 <listitem>
2011 <para>
2012 Updatable cursors (Arul Shaji, Tom)
2013 </para>
2015 <para>
2016 This eliminates the need to reference a primary key to
2017 <command>UPDATE</> or <command>DELETE</> rows returned by a cursor.
2018 The syntax is <literal>UPDATE/DELETE WHERE CURRENT OF</>.
2019 </para>
2020 </listitem>
2022 <listitem>
2023 <para>
2024 Allow <literal>FOR UPDATE</literal> in cursors (Arul Shaji, Tom)
2025 </para>
2026 </listitem>
2028 <listitem>
2029 <para>
2030 Create a general mechanism that supports casts to and from the
2031 standard string types (<type>TEXT</type>, <type>VARCHAR</type>,
2032 <type>CHAR</type>) for <emphasis>every</emphasis> datatype, by
2033 invoking the datatype's I/O functions (Tom)
2034 </para>
2036 <para>
2037 Previously, such casts were available only for types that had
2038 specialized function(s) for the purpose.
2039 These new casts are assignment-only in the to-string direction,
2040 explicit-only in the other direction, and therefore should create no
2041 surprising behavior.
2042 </para>
2043 </listitem>
2045 <listitem>
2046 <para>
2047 Allow <literal>UNION</> and related constructs to return a domain
2048 type, when all inputs are of that domain type (Tom)
2049 </para>
2051 <para>
2052 Formerly, the output would be considered to be of the domain's base
2053 type.
2054 </para>
2055 </listitem>
2057 <listitem>
2058 <para>
2059 Allow limited hashing when using two different data types (Tom)
2060 </para>
2062 <para>
2063 This allows hash joins, hash indexes, hashed subplans, and hash
2064 aggregation to be used in situations involving cross-data-type
2065 comparisons, if the data types have compatible hash functions.
2066 Currently, cross-data-type hashing support exists for
2067 <type>smallint</type>/<type>integer</type>/<type>bigint</type>,
2068 and for <type>float4</type>/<type>float8</type>.
2069 </para>
2070 </listitem>
2072 <listitem>
2073 <para>
2074 Improve optimizer logic for detecting when variables are equal
2075 in a <literal>WHERE</> clause (Tom)
2076 </para>
2078 <para>
2079 This allows mergejoins to work with descending sort orders, and
2080 improves recognition of redundant sort columns.
2081 </para>
2082 </listitem>
2084 <listitem>
2085 <para>
2086 Improve performance when planning large inheritance trees in
2087 cases where most tables are excluded by constraints (Tom)
2088 </para>
2089 </listitem>
2091 </itemizedlist>
2093 </sect3>
2095 <sect3>
2096 <title>Object Manipulation</title>
2097 <itemizedlist>
2099 <listitem>
2101 <para>
2102 Arrays of composite types (David Fetter, Andrew, Tom)
2103 </para>
2105 <para>
2106 In addition to arrays of explicitly-declared composite types,
2107 arrays of the rowtypes of regular tables and views are now
2108 supported, except for rowtypes of system catalogs, sequences, and TOAST
2109 tables.
2110 </para>
2112 </listitem>
2114 <listitem>
2115 <para>
2116 Server configuration parameters can now be set on a per-function
2117 basis (Tom)
2118 </para>
2120 <para>
2121 For example, functions can now set their own
2122 <varname>search_path</> to prevent unexpected behavior if a
2123 different <varname>search_path</> exists at run-time. Security
2124 definer functions should set <varname>search_path</varname> to
2125 avoid security loopholes.
2126 </para>
2127 </listitem>
2129 <listitem>
2130 <para>
2131 <command>CREATE/ALTER FUNCTION</command> now supports
2132 <literal>COST</literal> and <literal>ROWS</literal> options (Tom)
2133 </para>
2135 <para>
2136 <literal>COST</literal> allows specification of the cost of a
2137 function call. <literal>ROWS</literal> allows specification of
2138 the average number or rows returned by a set-returning function.
2139 These values are used by the optimizer in choosing the best plan.
2140 </para>
2141 </listitem>
2143 <listitem>
2144 <para>
2145 Implement <command>CREATE TABLE LIKE ... INCLUDING
2146 INDEXES</command> (Trevor Hardcastle, Nikhil Sontakke, Neil)
2147 </para>
2148 </listitem>
2150 <listitem>
2151 <para>
2152 Allow <command>CREATE INDEX CONCURRENTLY</command> to ignore
2153 transactions in other databases (Simon)
2154 </para>
2155 </listitem>
2157 <listitem>
2158 <para>
2159 Add <command>ALTER VIEW ... RENAME TO</command> and <command>ALTER
2160 SEQUENCE ... RENAME TO</command> (David Fetter, Neil)
2161 </para>
2163 <para>
2164 Previously this could only be done via <command>ALTER TABLE ...
2165 RENAME TO</command>.
2166 </para>
2167 </listitem>
2169 <listitem>
2170 <para>
2171 Make <command>CREATE/DROP/RENAME DATABASE</> wait briefly for
2172 conflicting backends to exit before failing (Tom)
2173 </para>
2175 <para>
2176 This increases the likelihood that these commands will succeed.
2177 </para>
2178 </listitem>
2180 <listitem>
2181 <para>
2182 Allow triggers and rules to be deactivated in groups using a
2183 configuration parameter, for replication purposes (Jan)
2184 </para>
2186 <para>
2187 This allows replication systems to disable triggers and rewrite
2188 rules as a group without modifying the system catalogs directly.
2189 The behavior is controlled by <command>ALTER TABLE</> and a new
2190 parameter <varname>session_replication_role</varname>.
2191 </para>
2192 </listitem>
2194 <listitem>
2195 <para>
2196 User-defined types can now have type modifiers (Teodor, Tom)
2197 </para>
2199 <para>
2200 This allows a user-defined type to take a modifier, like
2201 <type>ssnum(7)</>. Previously only built-in
2202 data types could have modifiers.
2203 </para>
2204 </listitem>
2206 </itemizedlist>
2208 </sect3>
2210 <sect3>
2211 <title>Utility Commands</title>
2212 <itemizedlist>
2214 <listitem>
2215 <para>
2216 Non-superuser database owners now are able to add trusted procedural
2217 languages to their databases by default (Jeremy Drake)
2218 </para>
2220 <para>
2221 While this is reasonably safe, some administrators might wish to
2222 revoke the privilege. It is controlled by
2223 <structname>pg_pltemplate</>.<structfield>tmpldbacreate</>.
2224 </para>
2225 </listitem>
2227 <listitem>
2228 <para>
2229 Allow a session's current parameter setting to be used as the
2230 default for future sessions (Tom)
2231 </para>
2233 <para>
2234 This is done with <literal>SET ... FROM CURRENT</literal> in
2235 <command>CREATE/ALTER FUNCTION</command>, <command>ALTER
2236 DATABASE</command>, or <command>ALTER ROLE</command>.
2237 </para>
2238 </listitem>
2240 <listitem>
2241 <para>
2242 Implement new commands <command>DISCARD ALL</command>,
2243 <command>DISCARD PLANS</command>, <command>DISCARD
2244 TEMPORARY</command>, <command>CLOSE ALL</command>, and
2245 <command>DEALLOCATE ALL</command> (Marko Kreen, Neil)
2246 </para>
2248 <para>
2249 These commands simplify resetting a database session to its initial
2250 state, and are particularly useful for connection-pooling software.
2251 </para>
2252 </listitem>
2254 <listitem>
2255 <para>
2256 Make <command>CLUSTER</command> MVCC-safe (Heikki Linnakangas)
2257 </para>
2259 <para>
2260 Formerly, <command>CLUSTER</command> would discard all tuples
2261 that were committed dead, even if there were still transactions
2262 that should be able to see them under MVCC visibility rules.
2263 </para>
2264 </listitem>
2266 <listitem>
2267 <para>
2268 Add new <command>CLUSTER</command> syntax: <literal>CLUSTER
2269 <replaceable>table</> USING <replaceable>index</></literal>
2270 (Holger Schurig)
2271 </para>
2273 <para>
2274 The old <command>CLUSTER</command> syntax is still supported, but
2275 the new form is considered more logical.
2276 </para>
2277 </listitem>
2279 <listitem>
2280 <para>
2281 Fix <command>EXPLAIN</command> so it can show complex plans
2282 more accurately (Tom)
2283 </para>
2285 <para>
2286 References to subplan outputs are now always shown correctly,
2287 instead of using <literal>?column<replaceable>N</>?</literal>
2288 for complicated cases.
2289 </para>
2290 </listitem>
2292 <listitem>
2293 <para>
2294 Limit the amount of information reported when a user is dropped
2295 (Alvaro)
2296 </para>
2298 <para>
2299 Previously, dropping (or attempting to drop) a user who owned many
2300 objects could result in large <literal>NOTICE</literal> or
2301 <literal>ERROR</literal> messages listing all these objects; this
2302 caused problems for some client applications. The length of the
2303 message is now limited, although a full list is still sent to the
2304 server log.
2305 </para>
2306 </listitem>
2308 </itemizedlist>
2310 </sect3>
2312 <sect3>
2313 <title>Data Types</title>
2314 <itemizedlist>
2316 <listitem>
2317 <para>
2318 Support for the SQL/XML standard, including new operators and an
2319 <type>XML</type> data type (Nikolay Samokhvalov, Pavel Stehule, Peter)
2320 </para>
2321 </listitem>
2323 <listitem>
2324 <para>
2325 Enumerated data types (<type>ENUM</type>) (Tom Dunstan)
2326 </para>
2328 <para>
2329 This feature provides convenient support for fields that have a
2330 small, fixed set of allowed values. An example of creating an
2331 <literal>ENUM</> type is
2332 <literal>CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy')</>.
2333 </para>
2334 </listitem>
2336 <listitem>
2337 <para>
2338 Universally Unique Identifier (<type>UUID</>) data type (Gevik
2339 Babakhani, Neil)
2340 </para>
2342 <para>
2343 This closely matches <acronym>RFC</> 4122.
2344 </para>
2345 </listitem>
2347 <listitem>
2348 <para>
2349 Widen the <type>MONEY</type> data type to 64 bits (D'Arcy Cain)
2350 </para>
2352 <para>
2353 This greatly increases the range of supported <type>MONEY</>
2354 values.
2355 </para>
2356 </listitem>
2358 <listitem>
2359 <para>
2360 Fix <type>float4</type>/<type>float8</type> to handle
2361 <literal>Infinity</> and <literal>NAN</> (Not A Number)
2362 consistently (Bruce)
2363 </para>
2365 <para>
2366 The code formerly was not consistent about distinguishing
2367 <literal>Infinity</> from overflow conditions.
2368 </para>
2369 </listitem>
2371 <listitem>
2372 <para>
2373 Allow leading and trailing whitespace during input of
2374 <type>boolean</type> values (Neil)
2375 </para>
2376 </listitem>
2378 <listitem>
2379 <para>
2380 Prevent <command>COPY</> from using digits and lowercase letters as
2381 delimiters (Tom)
2382 </para>
2383 </listitem>
2385 </itemizedlist>
2387 </sect3>
2389 <sect3>
2390 <title>Functions</title>
2391 <itemizedlist>
2393 <listitem>
2394 <para>
2395 Add new regular expression functions
2396 <function>regexp_matches()</function>,
2397 <function>regexp_split_to_array()</function>, and
2398 <function>regexp_split_to_table()</function> (Jeremy Drake, Neil)
2399 </para>
2401 <para>
2402 These functions provide extraction of regular expression
2403 subexpressions and allow splitting a string using a POSIX regular
2404 expression.
2405 </para>
2406 </listitem>
2408 <listitem>
2409 <para>
2410 Add <function>lo_truncate()</function> for large object truncation
2411 (Kris Jurka)
2412 </para>
2413 </listitem>
2415 <listitem>
2416 <para>
2417 Implement <function>width_bucket()</function> for the <type>float8</>
2418 data type (Neil)
2419 </para>
2420 </listitem>
2422 <listitem>
2423 <para>
2424 Add <function>pg_stat_clear_snapshot()</function> to discard
2425 statistics snapshots collected during the current transaction
2426 (Tom)
2427 </para>
2429 <para>
2430 The first request for statistics in a transaction takes a statistics
2431 snapshot that does not change during the transaction. This function
2432 allows the snapshot to be discarded and a new snapshot loaded during
2433 the next statistics query. This is particularly useful for PL/PgSQL
2434 functions, which are confined to a single transaction.
2435 </para>
2436 </listitem>
2438 <listitem>
2439 <para>
2440 Add <literal>isodow</> option to <function>EXTRACT()</> and
2441 <function>date_part()</> (Bruce)
2442 </para>
2444 <para>
2445 This returns the day of the week, with Sunday as seven.
2446 (<literal>dow</> returns Sunday as zero.)
2447 </para>
2448 </listitem>
2450 <listitem>
2451 <para>
2452 Add <literal>ID</> (ISO day of week) and <literal>IDDD</> (ISO
2453 day of year) format codes for <function>to_char()</>,
2454 <function>to_date()</>, and <function>to_timestamp()</> (Brendan
2455 Jurd)
2456 </para>
2457 </listitem>
2459 <listitem>
2460 <para>
2461 Make <function>to_timestamp()</> and <function>to_date()</>
2462 assume <literal>TM</literal> (trim) option for potentially
2463 variable-width fields (Bruce)
2464 </para>
2466 <para>
2467 This matches <productname>Oracle</>'s behavior.
2468 </para>
2469 </listitem>
2471 <listitem>
2472 <para>
2473 Fix off-by-one conversion error in
2474 <function>to_date()</function>/<function>to_timestamp()</function>
2475 <literal>D</> (non-ISO day of week) fields (Bruce)
2476 </para>
2477 </listitem>
2479 <listitem>
2480 <para>
2481 Make <function>setseed()</function> return void, rather than a
2482 useless integer value (Neil)
2483 </para>
2484 </listitem>
2486 <listitem>
2487 <para>
2488 Add a hash function for <type>NUMERIC</type> (Neil)
2489 </para>
2491 <para>
2492 This allows hash indexes and hash-based plans to be used with
2493 <type>NUMERIC</type> columns.
2494 </para>
2495 </listitem>
2497 <listitem>
2498 <para>
2499 Improve efficiency of
2500 <literal>LIKE</literal>/<literal>ILIKE</literal>, especially for
2501 multi-byte character sets like UTF-8 (Andrew, Itagaki Takahiro)
2502 </para>
2503 </listitem>
2505 <listitem>
2506 <para>
2507 Make <function>currtid()</function> functions require
2508 <literal>SELECT</literal> privileges on the target table (Tom)
2509 </para>
2510 </listitem>
2512 <listitem>
2513 <para>
2514 Add several <function>txid_*()</function> functions to query
2515 active transaction IDs (Jan)
2516 </para>
2518 <para>
2519 This is useful for various replication solutions.
2520 </para>
2521 </listitem>
2523 </itemizedlist>
2525 </sect3>
2527 <sect3>
2528 <title>PL/PgSQL Server-Side Language</title>
2529 <itemizedlist>
2531 <listitem>
2532 <para>
2533 Add scrollable cursor support, including directional control in
2534 <command>FETCH</command> (Pavel Stehule)
2535 </para>
2536 </listitem>
2538 <listitem>
2539 <para>
2540 Allow <literal>IN</literal> as an alternative to
2541 <literal>FROM</literal> in PL/PgSQL's <command>FETCH</command>
2542 statement, for consistency with the backend's
2543 <command>FETCH</command> command (Pavel Stehule)
2544 </para>
2545 </listitem>
2547 <listitem>
2548 <para>
2549 Add <command>MOVE</command> to PL/PgSQL (Magnus, Pavel Stehule,
2550 Neil)
2551 </para>
2552 </listitem>
2554 <listitem>
2555 <para>
2556 Implement <command>RETURN QUERY</command> (Pavel Stehule, Neil)
2557 </para>
2559 <para>
2560 This adds convenient syntax for PL/PgSQL set-returning functions
2561 that want to return the result of a query. <command>RETURN QUERY</>
2562 is easier and more efficient than a loop
2563 around <command>RETURN NEXT</command>.
2564 </para>
2565 </listitem>
2567 <listitem>
2568 <para>
2569 Allow function parameter names to be qualified with the
2570 function's name (Tom)
2571 </para>
2573 <para>
2574 For example, <literal>myfunc.myvar</>. This is particularly
2575 useful for specifying variables in a query where the variable
2576 name might match a column name.
2577 </para>
2578 </listitem>
2580 <listitem>
2581 <para>
2582 Make qualification of variables with block labels work properly (Tom)
2583 </para>
2585 <para>
2586 Formerly, outer-level block labels could unexpectedly interfere with
2587 recognition of inner-level record or row references.
2588 </para>
2589 </listitem>
2591 <listitem>
2592 <para>
2593 Tighten requirements for <literal>FOR</literal> loop
2594 <literal>STEP</> values (Tom)
2595 </para>
2597 <para>
2598 Prevent non-positive <literal>STEP</> values, and handle
2599 loop overflows.
2600 </para>
2601 </listitem>
2603 <listitem>
2604 <para>
2605 Improve accuracy when reporting syntax error locations (Tom)
2606 </para>
2607 </listitem>
2609 </itemizedlist>
2611 </sect3>
2613 <sect3>
2614 <title>Other Server-Side Languages</title>
2615 <itemizedlist>
2617 <listitem>
2618 <para>
2619 Allow type-name arguments to PL/Perl
2620 <function>spi_prepare()</function> to be data type aliases in
2621 addition to names found in <literal>pg_type</literal> (Andrew)
2622 </para>
2623 </listitem>
2625 <listitem>
2626 <para>
2627 Allow type-name arguments to PL/Python
2628 <function>plpy.prepare()</function> to be data type aliases in
2629 addition to names found in <literal>pg_type</literal> (Andrew)
2630 </para>
2631 </listitem>
2633 <listitem>
2634 <para>
2635 Allow type-name arguments to PL/Tcl <function>spi_prepare</> to
2636 be data type aliases in addition to names found in
2637 <literal>pg_type</literal> (Andrew)
2638 </para>
2639 </listitem>
2641 <listitem>
2642 <para>
2643 Enable PL/PythonU to compile on Python 2.5 (Marko Kreen)
2644 </para>
2645 </listitem>
2647 <listitem>
2648 <para>
2649 Support a true PL/Python boolean type in compatible Python versions
2650 (Python 2.3 and later) (Marko Kreen)
2651 </para>
2652 </listitem>
2654 <listitem>
2655 <para>
2656 Fix PL/Tcl problems with thread-enabled <filename>libtcl</> spawning
2657 multiple threads within the backend (Steve Marshall, Paul Bayer,
2658 Doug Knight)
2659 </para>
2661 <para>
2662 This caused all sorts of unpleasantness.
2663 </para>
2664 </listitem>
2666 </itemizedlist>
2668 </sect3>
2670 <sect3>
2671 <title><link linkend="APP-PSQL"><application>psql</></link></title>
2672 <itemizedlist>
2674 <listitem>
2675 <para>
2676 List disabled triggers separately in <literal>\d</literal> output
2677 (Brendan Jurd)
2678 </para>
2679 </listitem>
2681 <listitem>
2682 <para>
2683 In <literal>\d</literal> patterns, always match <literal>$</literal>
2684 literally (Tom)
2685 </para>
2686 </listitem>
2688 <listitem>
2689 <para>
2690 Show aggregate return types in <literal>\da</literal> output
2691 (Greg Sabino Mullane)
2692 </para>
2693 </listitem>
2695 <listitem>
2696 <para>
2697 Add the function's volatility status to the output of
2698 <literal>\df+</literal> (Neil)
2699 </para>
2700 </listitem>
2702 <listitem>
2703 <para>
2704 Add <literal>\prompt</literal> capability (Chad Wagner)
2705 </para>
2706 </listitem>
2708 <listitem>
2709 <para>
2710 Allow <literal>\pset</literal>, <literal>\t</literal>, and
2711 <literal>\x</literal> to specify <literal>on</> or <literal>off</>,
2712 rather than just toggling (Chad Wagner)
2713 </para>
2714 </listitem>
2716 <listitem>
2717 <para>
2718 Add <literal>\sleep</> capability (Jan)
2719 </para>
2720 </listitem>
2722 <listitem>
2723 <para>
2724 Enable <literal>\timing</> output for <literal>\copy</> (Andrew)
2725 </para>
2726 </listitem>
2728 <listitem>
2729 <para>
2730 Improve <literal>\timing</literal> resolution on Windows
2731 (Itagaki Takahiro)
2732 </para>
2733 </listitem>
2735 <listitem>
2736 <para>
2737 Flush <literal>\o</> output after each backslash command (Tom)
2738 </para>
2739 </listitem>
2741 <listitem>
2742 <para>
2743 Correctly detect and report errors while reading a <literal>-f</>
2744 input file (Peter)
2745 </para>
2746 </listitem>
2748 <listitem>
2749 <para>
2750 Remove <literal>-u</> option (this option has long been deprecated)
2751 (Tom)
2752 </para>
2753 </listitem>
2755 </itemizedlist>
2757 </sect3>
2759 <sect3>
2760 <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
2761 <itemizedlist>
2763 <listitem>
2764 <para>
2765 Add <literal>--tablespaces-only</> and <literal>--roles-only</>
2766 options to <application>pg_dumpall</application> (Dave Page)
2767 </para>
2768 </listitem>
2770 <listitem>
2771 <para>
2772 Add an output file option to
2773 <application>pg_dumpall</application> (Dave Page)
2774 </para>
2776 <para>
2777 This is primarily useful on Windows, where output redirection of
2778 child <application>pg_dump</application> processes does not work.
2779 </para>
2780 </listitem>
2782 <listitem>
2783 <para>
2784 Allow <application>pg_dumpall</> to accept an initial-connection
2785 database name rather than the default
2786 <literal>template1</literal> (Dave Page)
2787 </para>
2788 </listitem>
2790 <listitem>
2791 <para>
2792 In <literal>-n</> and <literal>-t</> switches, always match
2793 <literal>$</literal> literally (Tom)
2794 </para>
2795 </listitem>
2797 <listitem>
2798 <para>
2799 Improve performance when a database has thousands of objects (Tom)
2800 </para>
2801 </listitem>
2803 <listitem>
2804 <para>
2805 Remove <literal>-u</> option (this option has long been deprecated)
2806 (Tom)
2807 </para>
2808 </listitem>
2810 </itemizedlist>
2812 </sect3>
2814 <sect3>
2815 <title>Other Client Applications</title>
2816 <itemizedlist>
2818 <listitem>
2819 <para>
2820 In <application>initdb</>, allow the location of the
2821 <filename>pg_xlog</filename> directory to be specified
2822 (Euler Taveira de Oliveira)
2823 </para>
2824 </listitem>
2826 <listitem>
2827 <para>
2828 Enable server core dump generation in <application>pg_regress</>
2829 on supported operating systems (Andrew)
2830 </para>
2831 </listitem>
2833 <listitem>
2834 <para>
2835 Add a <literal>-t</> (timeout) parameter to <application>pg_ctl</>
2836 (Bruce)
2837 </para>
2839 <para>
2840 This controls how long <application>pg_ctl</> will wait when waiting
2841 for server startup or shutdown. Formerly the timeout was hard-wired
2842 as 60 seconds.
2843 </para>
2844 </listitem>
2846 <listitem>
2847 <para>
2848 Add a <application>pg_ctl</> option to control generation
2849 of server core dumps (Andrew)
2850 </para>
2851 </listitem>
2853 <listitem>
2854 <para>
2855 Allow Control-C to cancel <application>clusterdb</>,
2856 <application>reindexdb</>, and <application>vacuumdb</> (Itagaki
2857 Takahiro, Magnus)
2858 </para>
2859 </listitem>
2861 <listitem>
2862 <para>
2863 Suppress command tag output for <application>createdb</>,
2864 <application>createuser</>, <application>dropdb</>, and
2865 <application>dropuser</> (Peter)
2866 </para>
2868 <para>
2869 The <literal>--quiet</> option is ignored and will be removed in 8.4.
2870 Progress messages when acting on all databases now go to stdout
2871 instead of stderr because they are not actually errors.
2872 </para>
2873 </listitem>
2875 </itemizedlist>
2877 </sect3>
2879 <sect3>
2880 <title><link linkend="libpq"><application>libpq</></link></title>
2881 <itemizedlist>
2883 <listitem>
2884 <para>
2885 Interpret the <literal>dbName</> parameter of
2886 <function>PQsetdbLogin()</> as a <literal>conninfo</> string if
2887 it contains an equals sign (Andrew)
2888 </para>
2890 <para>
2891 This allows use of <literal>conninfo</> strings in client
2892 programs that still use <literal>PQsetdbLogin()</>.
2893 </para>
2894 </listitem>
2896 <listitem>
2897 <para>
2898 Support a global <acronym>SSL</> configuration file (Victor
2899 Wagner)
2900 </para>
2901 </listitem>
2903 <listitem>
2904 <para>
2905 Add environment variable <varname>PGSSLKEY</> to control
2906 <acronym>SSL</> hardware keys (Victor Wagner)
2907 </para>
2908 </listitem>
2910 <listitem>
2911 <para>
2912 Add <function>lo_truncate()</function> for large object
2913 truncation (Kris Jurka)
2914 </para>
2915 </listitem>
2917 <listitem>
2918 <para>
2919 Add <function>PQconnectionNeedsPassword()</function> that returns
2920 true if the server required a password but none was supplied
2921 (Joe Conway, Tom)
2922 </para>
2924 <para>
2925 If this returns true after a failed connection attempt, a client
2926 application should prompt the user for a password. In the past
2927 applications have had to check for a specific error message string to
2928 decide whether a password is needed; that approach is now
2929 deprecated.
2930 </para>
2931 </listitem>
2933 <listitem>
2934 <para>
2935 Add <function>PQconnectionUsedPassword()</function> that returns
2936 true if the supplied password was actually used
2937 (Joe Conway, Tom)
2938 </para>
2940 <para>
2941 This is useful in some security contexts where it is important
2942 to know whether a user-supplied password is actually valid.
2943 </para>
2944 </listitem>
2946 </itemizedlist>
2948 </sect3>
2950 <sect3>
2951 <title><link linkend="ecpg"><application>ecpg</></link></title>
2952 <itemizedlist>
2954 <listitem>
2955 <para>
2956 Use V3 frontend/backend protocol (Michael)
2957 </para>
2959 <para>
2960 This adds support for server-side prepared statements.
2961 </para>
2962 </listitem>
2964 <listitem>
2965 <para>
2966 Use native threads, instead of pthreads, on Windows (Magnus)
2967 </para>
2968 </listitem>
2970 <listitem>
2971 <para>
2972 Improve thread-safety of ecpglib (Itagaki Takahiro)
2973 </para>
2974 </listitem>
2976 <listitem>
2977 <para>
2978 Make the ecpg libraries export only necessary API symbols (Michael)
2979 </para>
2980 </listitem>
2982 </itemizedlist>
2984 </sect3>
2986 <sect3>
2987 <title><application>Windows</> Port</title>
2988 <itemizedlist>
2990 <listitem>
2991 <para>
2992 Allow the whole <productname>PostgreSQL</> distribution to be compiled
2993 with <productname>Microsoft Visual C++</> (Magnus and others)
2994 </para>
2996 <para>
2997 This allows Windows-based developers to use familiar development
2998 and debugging tools.
2999 Windows executables made with Visual C++ might also have better
3000 stability and performance than those made with other tool sets.
3001 The client-only Visual C++ build scripts have been removed.
3002 </para>
3003 </listitem>
3005 <listitem>
3006 <para>
3007 Drastically reduce postmaster's memory usage when it has many child
3008 processes (Magnus)
3009 </para>
3010 </listitem>
3012 <listitem>
3013 <para>
3014 Allow regression tests to be started by an administrative
3015 user (Magnus)
3016 </para>
3017 </listitem>
3019 <listitem>
3020 <para>
3021 Add native shared memory implementation (Magnus)
3022 </para>
3023 </listitem>
3025 </itemizedlist>
3027 </sect3>
3029 <sect3>
3030 <title>Server Programming Interface (<acronym>SPI</>)</title>
3031 <itemizedlist>
3033 <listitem>
3034 <para>
3035 Add cursor-related functionality in SPI (Pavel Stehule)
3036 </para>
3038 <para>
3039 Allow access to the cursor-related planning options, and add
3040 <command>FETCH</>/<command>MOVE</> routines.
3041 </para>
3042 </listitem>
3044 <listitem>
3045 <para>
3046 Allow execution of cursor commands through
3047 <function>SPI_execute</function> (Tom)
3048 </para>
3050 <para>
3051 The macro <literal>SPI_ERROR_CURSOR</> still exists but will
3052 never be returned.
3053 </para>
3054 </listitem>
3056 <listitem>
3057 <para>
3058 SPI plan pointers are now declared as <literal>SPIPlanPtr</> instead of
3059 <literal>void *</> (Tom)
3060 </para>
3062 <para>
3063 This does not break application code, but switching is
3064 recommended to help catch simple programming mistakes.
3065 </para>
3066 </listitem>
3068 </itemizedlist>
3070 </sect3>
3072 <sect3>
3073 <title>Build Options</title>
3074 <itemizedlist>
3076 <listitem>
3077 <para>
3078 Add <application>configure</> option <literal>--enable-profiling</>
3079 to enable code profiling (works only with <application>gcc</>)
3080 (Korry Douglas and Nikhil Sontakke)
3081 </para>
3082 </listitem>
3084 <listitem>
3085 <para>
3086 Add <application>configure</> option <literal>--with-system-tzdata</>
3087 to use the operating system's time zone database (Peter)
3088 </para>
3089 </listitem>
3091 <listitem>
3092 <para>
3093 Fix <acronym>PGXS</> so extensions can be built against PostgreSQL
3094 installations whose <application>pg_config</> program does not
3095 appear first in the <varname>PATH</> (Tom)
3096 </para>
3097 </listitem>
3099 <listitem>
3100 <para>
3101 Support <command>gmake draft</command> when building the
3102 <acronym>SGML</> documentation (Bruce)
3103 </para>
3105 <para>
3106 Unless <literal>draft</> is used, the documentation build will
3107 now be repeated if necessary to ensure the index is up-to-date.
3108 </para>
3109 </listitem>
3111 </itemizedlist>
3113 </sect3>
3115 <sect3>
3116 <title>Source Code</title>
3117 <itemizedlist>
3119 <listitem>
3120 <para>
3121 Rename macro <literal>DLLIMPORT</> to <literal>PGDLLIMPORT</> to
3122 avoid conflicting with third party includes (like Tcl) that
3123 define <literal>DLLIMPORT</> (Magnus)
3124 </para>
3125 </listitem>
3127 <listitem>
3128 <para>
3129 Create <quote>operator families</quote> to improve planning of
3130 queries involving cross-data-type comparisons (Tom)
3131 </para>
3132 </listitem>
3134 <listitem>
3135 <para>
3136 Update GIN <function>extractQuery()</> API to allow signalling
3137 that nothing can satisfy the query (Teodor)
3138 </para>
3139 </listitem>
3141 <listitem>
3142 <para>
3143 Move <literal>NAMEDATALEN</> definition from
3144 <filename>postgres_ext.h</> to <filename>pg_config_manual.h</>
3145 (Peter)
3146 </para>
3147 </listitem>
3149 <listitem>
3150 <para>
3151 Provide <function>strlcpy()</function> and
3152 <function>strlcat()</function> on all platforms, and replace
3153 error-prone uses of <function>strncpy()</function>,
3154 <function>strncat()</function>, etc (Peter)
3155 </para>
3156 </listitem>
3158 <listitem>
3159 <para>
3160 Create hooks to let an external plugin monitor (or even replace) the
3161 planner and create plans for hypothetical situations (Gurjeet
3162 Singh, Tom)
3163 </para>
3164 </listitem>
3166 <listitem>
3167 <para>
3168 Create a function variable <literal>join_search_hook</> to let plugins
3169 override the join search order portion of the planner (Julius
3170 Stroffek)
3171 </para>
3172 </listitem>
3174 <listitem>
3175 <para>
3176 Add <function>tas()</> support for Renesas' M32R processor
3177 (Kazuhiro Inaoka)
3178 </para>
3179 </listitem>
3181 <listitem>
3182 <para>
3183 <function>quote_identifier()</function> and
3184 <application>pg_dump</application> no longer quote keywords that are
3185 unreserved according to the grammar (Tom)
3186 </para>
3187 </listitem>
3189 <listitem>
3190 <para>
3191 Change the on-disk representation of the <type>NUMERIC</type>
3192 data type so that the <structfield>sign_dscale</> word comes
3193 before the weight (Tom)
3194 </para>
3195 </listitem>
3197 <listitem>
3198 <para>
3199 Use <acronym>SYSV</> semaphores rather than POSIX on Darwin
3200 &gt;= 6.0, i.e., OS X 10.2 and up (Chris Marcellino)
3201 </para>
3202 </listitem>
3204 <listitem>
3205 <para>
3206 Add <link linkend="acronyms">acronym</link> and <link
3207 linkend="creating-cluster-nfs">NFS</link> documentation
3208 sections (Bruce)
3209 </para>
3210 </listitem>
3212 <listitem>
3213 <para>
3214 "Postgres" is now documented as an accepted alias for
3215 "PostgreSQL" (Peter)
3216 </para>
3217 </listitem>
3219 <listitem>
3220 <para>
3221 Add documentation about preventing database server spoofing when
3222 the server is down (Bruce)
3223 </para>
3224 </listitem>
3226 </itemizedlist>
3228 </sect3>
3230 <sect3>
3231 <title>Contrib</title>
3232 <itemizedlist>
3234 <listitem>
3235 <para>
3236 Move <filename>contrib</> <filename>README</> content into the
3237 main <productname>PostgreSQL</> documentation (Albert Cervera i
3238 Areny)
3239 </para>
3240 </listitem>
3242 <listitem>
3243 <para>
3244 Add <filename>contrib/pageinspect</filename> module for low-level
3245 page inspection (Simon, Heikki)
3246 </para>
3247 </listitem>
3249 <listitem>
3250 <para>
3251 Add <filename>contrib/pg_standby</filename> module for controlling
3252 warm standby operation (Simon)
3253 </para>
3254 </listitem>
3256 <listitem>
3257 <para>
3258 Add <filename>contrib/uuid-ossp</filename> module for generating
3259 <type>UUID</> values using the OSSP UUID library (Peter)
3260 </para>
3262 <para>
3263 Use <application>configure</>
3264 <literal>--with-ossp-uuid</literal> to activate. This takes
3265 advantage of the new <type>UUID</type> builtin type.
3266 </para>
3267 </listitem>
3269 <listitem>
3270 <para>
3271 Add <filename>contrib/dict_int</filename>,
3272 <filename>contrib/dict_xsyn</filename>, and
3273 <filename>contrib/test_parser</filename> modules to provide
3274 sample add-on text search dictionary templates and parsers
3275 (Sergey Karpov)
3276 </para>
3277 </listitem>
3279 <listitem>
3280 <para>
3281 Allow <application>contrib/pgbench</> to set the fillfactor (Pavan
3282 Deolasee)
3283 </para>
3284 </listitem>
3286 <listitem>
3287 <para>
3288 Add timestamps to <application>contrib/pgbench</> <literal>-l</>
3289 (Greg Smith)
3290 </para>
3291 </listitem>
3293 <listitem>
3294 <para>
3295 Add usage count statistics to
3296 <filename>contrib/pgbuffercache</filename> (Greg Smith)
3297 </para>
3298 </listitem>
3300 <listitem>
3301 <para>
3302 Add GIN support for <filename>contrib/hstore</> (Teodor)
3303 </para>
3304 </listitem>
3306 <listitem>
3307 <para>
3308 Add GIN support for <filename>contrib/pg_trgm</> (Guillaume Smet, Teodor)
3309 </para>
3310 </listitem>
3312 <listitem>
3313 <para>
3314 Update OS/X startup scripts in
3315 <filename>contrib/start-scripts</filename> (Mark Cotner, David
3316 Fetter)
3317 </para>
3318 </listitem>
3320 <listitem>
3321 <para>
3322 Restrict <function>pgrowlocks()</function> and
3323 <function>dblink_get_pkey()</function> to users who have
3324 <literal>SELECT</literal> privilege on the target table (Tom)
3325 </para>
3326 </listitem>
3328 <listitem>
3329 <para>
3330 Restrict <filename>contrib/pgstattuple</filename> functions to
3331 superusers (Tom)
3332 </para>
3333 </listitem>
3335 <listitem>
3336 <para>
3337 <filename>contrib/xml2</filename> is deprecated and planned for
3338 removal in 8.4 (Peter)
3339 </para>
3341 <para>
3342 The new XML support in core PostgreSQL supersedes this module.
3343 </para>
3344 </listitem>
3346 </itemizedlist>
3348 </sect3>
3349 </sect2>
3350 </sect1>
3352 <sect1 id="release-8-2-8">
3353 <title>Release 8.2.8</title>
3355 <note>
3356 <title>Release date</title>
3357 <simpara>2008-06-09</simpara>
3358 </note>
3360 <para>
3361 This release contains a variety of fixes from 8.2.7.
3362 For information about new features in the 8.2 major release, see
3363 <xref linkend="release-8-2">.
3364 </para>
3366 <sect2>
3367 <title>Migration to Version 8.2.8</title>
3369 <para>
3370 A dump/restore is not required for those running 8.2.X.
3371 However, if you are upgrading from a version earlier than 8.2.7,
3372 see the release notes for 8.2.7.
3373 </para>
3375 </sect2>
3377 <sect2>
3378 <title>Changes</title>
3380 <itemizedlist>
3382 <listitem>
3383 <para>
3384 Fix <literal>ERRORDATA_STACK_SIZE exceeded</literal> crash that
3385 occurred on Windows when using UTF-8 database encoding and a different
3386 client encoding (Tom)
3387 </para>
3388 </listitem>
3390 <listitem>
3391 <para>
3392 Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
3393 column is correctly checked to see if it's been initialized to all
3394 non-nulls (Brendan Jurd)
3395 </para>
3397 <para>
3398 Previous versions neglected to check this requirement at all.
3399 </para>
3400 </listitem>
3402 <listitem>
3403 <para>
3404 Fix possible <command>CREATE TABLE</> failure when inheriting the
3405 <quote>same</> constraint from multiple parent relations that
3406 inherited that constraint from a common ancestor (Tom)
3407 </para>
3408 </listitem>
3410 <listitem>
3411 <para>
3412 Fix <function>pg_get_ruledef()</> to show the alias, if any, attached
3413 to the target table of an <command>UPDATE</> or <command>DELETE</>
3414 (Tom)
3415 </para>
3416 </listitem>
3418 <listitem>
3419 <para>
3420 Fix GIN bug that could result in a <literal>too many LWLocks
3421 taken</literal> failure (Teodor)
3422 </para>
3423 </listitem>
3425 <listitem>
3426 <para>
3427 Avoid possible crash when decompressing corrupted data
3428 (Zdenek Kotala)
3429 </para>
3430 </listitem>
3432 <listitem>
3433 <para>
3434 Repair two places where SIGTERM exit of a backend could leave corrupted
3435 state in shared memory (Tom)
3436 </para>
3438 <para>
3439 Neither case is very important if SIGTERM is used to shut down the
3440 whole database cluster together, but there was a problem if someone
3441 tried to SIGTERM individual backends.
3442 </para>
3443 </listitem>
3445 <listitem>
3446 <para>
3447 Fix conversions between ISO-8859-5 and other encodings to handle
3448 Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
3449 two dots) (Sergey Burladyan)
3450 </para>
3451 </listitem>
3453 <listitem>
3454 <para>
3455 Fix several datatype input functions, notably <function>array_in()</>,
3456 that were allowing unused bytes in their results to contain
3457 uninitialized, unpredictable values (Tom)
3458 </para>
3460 <para>
3461 This could lead to failures in which two apparently identical literal
3462 values were not seen as equal, resulting in the parser complaining
3463 about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
3464 expressions.
3465 </para>
3466 </listitem>
3468 <listitem>
3469 <para>
3470 Fix a corner case in regular-expression substring matching
3471 (<literal>substring(<replaceable>string</> from
3472 <replaceable>pattern</>)</literal>) (Tom)
3473 </para>
3475 <para>
3476 The problem occurs when there is a match to the pattern overall but
3477 the user has specified a parenthesized subexpression and that
3478 subexpression hasn't got a match. An example is
3479 <literal>substring('foo' from 'foo(bar)?')</>.
3480 This should return NULL, since <literal>(bar)</> isn't matched, but
3481 it was mistakenly returning the whole-pattern match instead (ie,
3482 <literal>foo</>).
3483 </para>
3484 </listitem>
3486 <listitem>
3487 <para>
3488 Update time zone data files to <application>tzdata</> release 2008c (for
3489 DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba, and
3490 Argentina/San_Luis)
3491 </para>
3492 </listitem>
3494 <listitem>
3495 <para>
3496 Fix incorrect result from <application>ecpg</>'s
3497 <function>PGTYPEStimestamp_sub()</> function (Michael)
3498 </para>
3499 </listitem>
3501 <listitem>
3502 <para>
3503 Fix broken GiST comparison function for <filename>contrib/tsearch2</>'s
3504 <type>tsquery</> type (Teodor)
3505 </para>
3506 </listitem>
3508 <listitem>
3509 <para>
3510 Fix possible crashes in <filename>contrib/cube</> functions (Tom)
3511 </para>
3512 </listitem>
3514 <listitem>
3515 <para>
3516 Fix core dump in <filename>contrib/xml2</>'s
3517 <function>xpath_table()</> function when the input query returns a
3518 NULL value (Tom)
3519 </para>
3520 </listitem>
3522 <listitem>
3523 <para>
3524 Fix <filename>contrib/xml2</>'s makefile to not override
3525 <literal>CFLAGS</> (Tom)
3526 </para>
3527 </listitem>
3529 <listitem>
3530 <para>
3531 Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
3532 4.3 (Tom)
3533 </para>
3535 <para>
3536 This problem affects <quote>old style</> (V0) C functions that
3537 return boolean. The fix is already in 8.3, but the need to
3538 back-patch it was not realized at the time.
3539 </para>
3540 </listitem>
3542 </itemizedlist>
3544 </sect2>
3545 </sect1>
3547 <sect1 id="release-8-2-7">
3548 <title>Release 8.2.7</title>
3550 <note>
3551 <title>Release date</title>
3552 <simpara>2008-03-17</simpara>
3553 </note>
3555 <para>
3556 This release contains a variety of fixes from 8.2.6.
3557 For information about new features in the 8.2 major release, see
3558 <xref linkend="release-8-2">.
3559 </para>
3561 <sect2>
3562 <title>Migration to Version 8.2.7</title>
3564 <para>
3565 A dump/restore is not required for those running 8.2.X.
3566 However, you might need to <command>REINDEX</> indexes on textual
3567 columns after updating, if you are affected by the Windows locale
3568 issue described below.
3569 </para>
3571 </sect2>
3573 <sect2>
3574 <title>Changes</title>
3576 <itemizedlist>
3578 <listitem>
3579 <para>
3580 Fix character string comparison for Windows locales that consider
3581 different character combinations as equal (Tom)
3582 </para>
3584 <para>
3585 This fix applies only on Windows and only when using UTF-8
3586 database encoding. The same fix was made for all other cases
3587 over two years ago, but Windows with UTF-8 uses a separate code
3588 path that was not updated. If you are using a locale that
3589 considers some non-identical strings as equal, you may need to
3590 <command>REINDEX</> to fix existing indexes on textual columns.
3591 </para>
3592 </listitem>
3594 <listitem>
3595 <para>
3596 Repair potential deadlock between concurrent <command>VACUUM FULL</>
3597 operations on different system catalogs (Tom)
3598 </para>
3599 </listitem>
3601 <listitem>
3602 <para>
3603 Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
3604 race condition (Tom)
3605 </para>
3607 <para>
3608 In rare cases a session that had just executed a
3609 <command>LISTEN</> might not get a notification, even though
3610 one would be expected because the concurrent transaction executing
3611 <command>NOTIFY</> was observed to commit later.
3612 </para>
3614 <para>
3615 A side effect of the fix is that a transaction that has executed
3616 a not-yet-committed <command>LISTEN</> command will not see any
3617 row in <structname>pg_listener</> for the <command>LISTEN</>,
3618 should it choose to look; formerly it would have. This behavior
3619 was never documented one way or the other, but it is possible that
3620 some applications depend on the old behavior.
3621 </para>
3622 </listitem>
3624 <listitem>
3625 <para>
3626 Disallow <command>LISTEN</> and <command>UNLISTEN</> within a
3627 prepared transaction (Tom)
3628 </para>
3630 <para>
3631 This was formerly allowed but trying to do it had various unpleasant
3632 consequences, notably that the originating backend could not exit
3633 as long as an <command>UNLISTEN</> remained uncommitted.
3634 </para>
3635 </listitem>
3637 <listitem>
3638 <para>
3639 Disallow dropping a temporary table within a
3640 prepared transaction (Heikki)
3641 </para>
3643 <para>
3644 This was correctly disallowed by 8.1, but the check was inadvertently
3645 broken in 8.2.
3646 </para>
3647 </listitem>
3649 <listitem>
3650 <para>
3651 Fix rare crash when an error occurs during a query using a hash index
3652 (Heikki)
3653 </para>
3654 </listitem>
3656 <listitem>
3657 <para>
3658 Fix memory leaks in certain usages of set-returning functions (Neil)
3659 </para>
3660 </listitem>
3662 <listitem>
3663 <para>
3664 Fix input of datetime values for February 29 in years BC (Tom)
3665 </para>
3667 <para>
3668 The former coding was mistaken about which years were leap years.
3669 </para>
3670 </listitem>
3672 <listitem>
3673 <para>
3674 Fix <quote>unrecognized node type</> error in some variants of
3675 <command>ALTER OWNER</> (Tom)
3676 </para>
3677 </listitem>
3679 <listitem>
3680 <para>
3681 Ensure <structname>pg_stat_activity</>.<structfield>waiting</> flag
3682 is cleared when a lock wait is aborted (Tom)
3683 </para>
3684 </listitem>
3686 <listitem>
3687 <para>
3688 Fix handling of process permissions on Windows Vista (Dave, Magnus)
3689 </para>
3691 <para>
3692 In particular, this fix allows starting the server as the Administrator
3693 user.
3694 </para>
3695 </listitem>
3697 <listitem>
3698 <para>
3699 Update time zone data files to <application>tzdata</> release 2008a
3700 (in particular, recent Chile changes); adjust timezone abbreviation
3701 <literal>VET</> (Venezuela) to mean UTC-4:30, not UTC-4:00 (Tom)
3702 </para>
3703 </listitem>
3705 <listitem>
3706 <para>
3707 Fix <application>pg_ctl</> to correctly extract the postmaster's port
3708 number from command-line options (Itagaki Takahiro, Tom)
3709 </para>
3711 <para>
3712 Previously, <literal>pg_ctl start -w</> could try to contact the
3713 postmaster on the wrong port, leading to bogus reports of startup
3714 failure.
3715 </para>
3716 </listitem>
3718 <listitem>
3719 <para>
3720 Use <option>-fwrapv</> to defend against possible misoptimization
3721 in recent <application>gcc</> versions (Tom)
3722 </para>
3724 <para>
3725 This is known to be necessary when building <productname>PostgreSQL</>
3726 with <application>gcc</> 4.3 or later.
3727 </para>
3728 </listitem>
3731 <listitem>
3732 <para>
3733 Correctly enforce <varname>statement_timeout</> values longer
3734 than <literal>INT_MAX</> microseconds (about 35 minutes) (Tom)
3735 </para>
3737 <para>
3738 This bug affects only builds with <option>--enable-integer-datetimes</>.
3739 </para>
3740 </listitem>
3742 <listitem>
3743 <para>
3744 Fix <quote>unexpected PARAM_SUBLINK ID</> planner error when
3745 constant-folding simplifies a sub-select (Tom)
3746 </para>
3747 </listitem>
3749 <listitem>
3750 <para>
3751 Fix logical errors in constraint-exclusion handling of <literal>IS
3752 NULL</> and <literal>NOT</> expressions (Tom)
3753 </para>
3755 <para>
3756 The planner would sometimes exclude partitions that should not
3757 have been excluded because of the possibility of NULL results.
3758 </para>
3759 </listitem>
3761 <listitem>
3762 <para>
3763 Fix another cause of <quote>failed to build any N-way joins</>
3764 planner errors (Tom)
3765 </para>
3767 <para>
3768 This could happen in cases where a clauseless join needed to be
3769 forced before a join clause could be exploited.
3770 </para>
3771 </listitem>
3773 <listitem>
3774 <para>
3775 Fix incorrect constant propagation in outer-join planning (Tom)
3776 </para>
3778 <para>
3779 The planner could sometimes incorrectly conclude that a variable
3780 could be constrained to be equal to a constant, leading
3781 to wrong query results.
3782 </para>
3783 </listitem>
3785 <listitem>
3786 <para>
3787 Fix display of constant expressions in <literal>ORDER BY</>
3788 and <literal>GROUP BY</> (Tom)
3789 </para>
3791 <para>
3792 An explictly casted constant would be shown incorrectly. This could
3793 for example lead to corruption of a view definition during
3794 dump and reload.
3795 </para>
3796 </listitem>
3798 <listitem>
3799 <para>
3800 Fix <application>libpq</> to handle NOTICE messages correctly
3801 during COPY OUT (Tom)
3802 </para>
3804 <para>
3805 This failure has only been observed to occur when a user-defined
3806 datatype's output routine issues a NOTICE, but there is no
3807 guarantee it couldn't happen due to other causes.
3808 </para>
3809 </listitem>
3811 </itemizedlist>
3813 </sect2>
3814 </sect1>
3816 <sect1 id="release-8-2-6">
3817 <title>Release 8.2.6</title>
3819 <note>
3820 <title>Release date</title>
3821 <simpara>2008-01-07</simpara>
3822 </note>
3824 <para>
3825 This release contains a variety of fixes from 8.2.5,
3826 including fixes for significant security issues.
3827 For information about new features in the 8.2 major release, see
3828 <xref linkend="release-8-2">.
3829 </para>
3831 <sect2>
3832 <title>Migration to Version 8.2.6</title>
3834 <para>
3835 A dump/restore is not required for those running 8.2.X.
3836 </para>
3838 </sect2>
3840 <sect2>
3841 <title>Changes</title>
3843 <itemizedlist>
3845 <listitem>
3846 <para>
3847 Prevent functions in indexes from executing with the privileges of
3848 the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
3849 </para>
3851 <para>
3852 Functions used in index expressions and partial-index
3853 predicates are evaluated whenever a new table entry is made. It has
3854 long been understood that this poses a risk of trojan-horse code
3855 execution if one modifies a table owned by an untrustworthy user.
3856 (Note that triggers, defaults, check constraints, etc. pose the
3857 same type of risk.) But functions in indexes pose extra danger
3858 because they will be executed by routine maintenance operations
3859 such as <command>VACUUM FULL</>, which are commonly performed
3860 automatically under a superuser account. For example, a nefarious user
3861 can execute code with superuser privileges by setting up a
3862 trojan-horse index definition and waiting for the next routine vacuum.
3863 The fix arranges for standard maintenance operations
3864 (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
3865 and <command>CLUSTER</>) to execute as the table owner rather than
3866 the calling user, using the same privilege-switching mechanism already
3867 used for <literal>SECURITY DEFINER</> functions. To prevent bypassing
3868 this security measure, execution of <command>SET SESSION
3869 AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
3870 <literal>SECURITY DEFINER</> context. (CVE-2007-6600)
3871 </para>
3872 </listitem>
3874 <listitem>
3875 <para>
3876 Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
3877 </para>
3879 <para>
3880 Suitably crafted regular-expression patterns could cause crashes,
3881 infinite or near-infinite looping, and/or massive memory consumption,
3882 all of which pose denial-of-service hazards for applications that
3883 accept regex search patterns from untrustworthy sources.
3884 (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
3885 </para>
3886 </listitem>
3888 <listitem>
3889 <para>
3890 Require non-superusers who use <filename>/contrib/dblink</> to use only
3891 password authentication, as a security measure (Joe)
3892 </para>
3894 <para>
3895 The fix that appeared for this in 8.2.5 was incomplete, as it plugged
3896 the hole for only some <filename>dblink</> functions. (CVE-2007-6601,
3897 CVE-2007-3278)
3898 </para>
3899 </listitem>
3901 <listitem>
3902 <para>
3903 Fix bugs in WAL replay for GIN indexes (Teodor)
3904 </para>
3905 </listitem>
3907 <listitem>
3908 <para>
3909 Fix GIN index build to work properly when
3910 <varname>maintenance_work_mem</> is 4GB or more (Tom)
3911 </para>
3912 </listitem>
3914 <listitem>
3915 <para>
3916 Update time zone data files to <application>tzdata</> release 2007k
3917 (in particular, recent Argentina changes) (Tom)
3918 </para>
3919 </listitem>
3921 <listitem>
3922 <para>
3923 Improve planner's handling of LIKE/regex estimation in non-C locales
3924 (Tom)
3925 </para>
3926 </listitem>
3928 <listitem>
3929 <para>
3930 Fix planning-speed problem for deep outer-join nests, as well as
3931 possible poor choice of join order (Tom)
3932 </para>
3933 </listitem>
3935 <listitem>
3936 <para>
3937 Fix planner failure in some cases of <literal>WHERE false AND var IN
3938 (SELECT ...)</> (Tom)
3939 </para>
3940 </listitem>
3942 <listitem>
3943 <para>
3944 Make <command>CREATE TABLE ... SERIAL</> and
3945 <command>ALTER SEQUENCE ... OWNED BY</> not change the
3946 <function>currval()</> state of the sequence (Tom)
3947 </para>
3948 </listitem>
3950 <listitem>
3951 <para>
3952 Preserve the tablespace and storage parameters of indexes that are
3953 rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</> (Tom)
3954 </para>
3955 </listitem>
3957 <listitem>
3958 <para>
3959 Make archive recovery always start a new WAL timeline, rather than only
3960 when a recovery stop time was used (Simon)
3961 </para>
3963 <para>
3964 This avoids a corner-case risk of trying to overwrite an existing
3965 archived copy of the last WAL segment, and seems simpler and cleaner
3966 than the original definition.
3967 </para>
3968 </listitem>
3970 <listitem>
3971 <para>
3972 Make <command>VACUUM</> not use all of <varname>maintenance_work_mem</>
3973 when the table is too small for it to be useful (Alvaro)
3974 </para>
3975 </listitem>
3977 <listitem>
3978 <para>
3979 Fix potential crash in <function>translate()</> when using a multibyte
3980 database encoding (Tom)
3981 </para>
3982 </listitem>
3984 <listitem>
3985 <para>
3986 Make <function>corr()</> return the correct result for negative
3987 correlation values (Neil)
3988 </para>
3989 </listitem>
3991 <listitem>
3992 <para>
3993 Fix overflow in <literal>extract(epoch from interval)</> for intervals
3994 exceeding 68 years (Tom)
3995 </para>
3996 </listitem>
3998 <listitem>
3999 <para>
4000 Fix PL/Perl to not fail when a UTF-8 regular expression is used
4001 in a trusted function (Andrew)
4002 </para>
4003 </listitem>
4005 <listitem>
4006 <para>
4007 Fix PL/Perl to cope when platform's Perl defines type <literal>bool</>
4008 as <literal>int</> rather than <literal>char</> (Tom)
4009 </para>
4011 <para>
4012 While this could theoretically happen anywhere, no standard build of
4013 Perl did things this way ... until <productname>Mac OS X</> 10.5.
4014 </para>
4015 </listitem>
4017 <listitem>
4018 <para>
4019 Fix PL/Python to work correctly with Python 2.5 on 64-bit machines
4020 (Marko Kreen)
4021 </para>
4022 </listitem>
4024 <listitem>
4025 <para>
4026 Fix PL/Python to not crash on long exception messages (Alvaro)
4027 </para>
4028 </listitem>
4030 <listitem>
4031 <para>
4032 Fix <application>pg_dump</> to correctly handle inheritance child tables
4033 that have default expressions different from their parent's (Tom)
4034 </para>
4035 </listitem>
4037 <listitem>
4038 <para>
4039 Fix <application>libpq</> crash when <varname>PGPASSFILE</> refers
4040 to a file that is not a plain file (Martin Pitt)
4041 </para>
4042 </listitem>
4044 <listitem>
4045 <para>
4046 <application>ecpg</> parser fixes (Michael)
4047 </para>
4048 </listitem>
4050 <listitem>
4051 <para>
4052 Make <filename>contrib/pgcrypto</> defend against
4053 <application>OpenSSL</> libraries that fail on keys longer than 128
4054 bits; which is the case at least on some Solaris versions (Marko Kreen)
4055 </para>
4056 </listitem>
4058 <listitem>
4059 <para>
4060 Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
4061 NULL rowid as a category in its own right, rather than crashing (Joe)
4062 </para>
4063 </listitem>
4065 <listitem>
4066 <para>
4067 Fix <type>tsvector</> and <type>tsquery</> output routines to
4068 escape backslashes correctly (Teodor, Bruce)
4069 </para>
4070 </listitem>
4072 <listitem>
4073 <para>
4074 Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
4075 </para>
4076 </listitem>
4078 <listitem>
4079 <para>
4080 Require a specific version of <productname>Autoconf</> to be used
4081 when re-generating the <command>configure</> script (Peter)
4082 </para>
4084 <para>
4085 This affects developers and packagers only. The change was made
4086 to prevent accidental use of untested combinations of
4087 <productname>Autoconf</> and <productname>PostgreSQL</> versions.
4088 You can remove the version check if you really want to use a
4089 different <productname>Autoconf</> version, but it's
4090 your responsibility whether the result works or not.
4091 </para>
4092 </listitem>
4094 <listitem>
4095 <para>
4096 Update <function>gettimeofday</> configuration check so that
4097 <productname>PostgreSQL</> can be built on newer versions of
4098 <productname>MinGW</> (Magnus)
4099 </para>
4100 </listitem>
4102 </itemizedlist>
4104 </sect2>
4105 </sect1>
4107 <sect1 id="release-8-2-5">
4108 <title>Release 8.2.5</title>
4110 <note>
4111 <title>Release date</title>
4112 <simpara>2007-09-17</simpara>
4113 </note>
4115 <para>
4116 This release contains a variety of fixes from 8.2.4.
4117 For information about new features in the 8.2 major release, see
4118 <xref linkend="release-8-2">.
4119 </para>
4121 <sect2>
4122 <title>Migration to Version 8.2.5</title>
4124 <para>
4125 A dump/restore is not required for those running 8.2.X.
4126 </para>
4128 </sect2>
4130 <sect2>
4131 <title>Changes</title>
4133 <itemizedlist>
4135 <listitem>
4136 <para>
4137 Prevent index corruption when a transaction inserts rows and
4138 then aborts close to the end of a concurrent <command>VACUUM</>
4139 on the same table (Tom)
4140 </para>
4141 </listitem>
4143 <listitem>
4144 <para>
4145 Fix <literal>ALTER DOMAIN ADD CONSTRAINT</> for cases involving
4146 domains over domains (Tom)
4147 </para>
4148 </listitem>
4150 <listitem>
4151 <para>
4152 Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
4153 </para>
4154 </listitem>
4156 <listitem>
4157 <para>
4158 Fix some planner problems with outer joins, notably poor
4159 size estimation for <literal>t1 LEFT JOIN t2 WHERE t2.col IS NULL</>
4160 (Tom)
4161 </para>
4162 </listitem>
4164 <listitem>
4165 <para>
4166 Allow the <type>interval</> data type to accept input consisting only of
4167 milliseconds or microseconds (Neil)
4168 </para>
4169 </listitem>
4171 <listitem>
4172 <para>
4173 Allow timezone name to appear before the year in <type>timestamp</> input (Tom)
4174 </para>
4175 </listitem>
4177 <listitem>
4178 <para>
4179 Fixes for <acronym>GIN</> indexes used by <filename>/contrib/tsearch2</> (Teodor)
4180 </para>
4181 </listitem>
4183 <listitem>
4184 <para>
4185 Speed up rtree index insertion (Teodor)
4186 </para>
4187 </listitem>
4189 <listitem>
4190 <para>
4191 Fix excessive logging of <acronym>SSL</> error messages (Tom)
4192 </para>
4193 </listitem>
4195 <listitem>
4196 <para>
4197 Fix logging so that log messages are never interleaved when using
4198 the syslogger process (Andrew)
4199 </para>
4200 </listitem>
4202 <listitem>
4203 <para>
4204 Fix crash when <varname>log_min_error_statement</> logging runs out
4205 of memory (Tom)
4206 </para>
4207 </listitem>
4209 <listitem>
4210 <para>
4211 Fix incorrect handling of some foreign-key corner cases (Tom)
4212 </para>
4213 </listitem>
4215 <listitem>
4216 <para>
4217 Fix <function>stddev_pop(numeric)</> and <function>var_pop(numeric)</> (Tom)
4218 </para>
4219 </listitem>
4221 <listitem>
4222 <para>
4223 Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
4224 due to attempting to process temporary tables of other sessions (Alvaro)
4225 </para>
4226 </listitem>
4228 <listitem>
4229 <para>
4230 Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
4231 </para>
4232 </listitem>
4234 <listitem>
4235 <para>
4236 Windows socket and semaphore improvements (Magnus)
4237 </para>
4238 </listitem>
4240 <listitem>
4241 <para>
4242 Make <command>pg_ctl -w</> work properly in Windows service mode (Dave Page)
4243 </para>
4244 </listitem>
4246 <listitem>
4247 <para>
4248 Fix memory allocation bug when using <application>MIT Kerberos</> on Windows (Magnus)
4249 </para>
4250 </listitem>
4252 <listitem>
4253 <para>
4254 Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
4255 because of possible encoding mismatches (Tom)
4256 </para>
4257 </listitem>
4259 <listitem>
4260 <para>
4261 Require non-superusers who use <filename>/contrib/dblink</> to use only
4262 password authentication, as a security measure (Joe)
4263 </para>
4264 </listitem>
4266 <listitem>
4267 <para>
4268 Restrict <filename>/contrib/pgstattuple</> functions to superusers, for security reasons (Tom)
4269 </para>
4270 </listitem>
4272 <listitem>
4273 <para>
4274 Do not let <filename>/contrib/intarray</> try to make its GIN opclass
4275 the default (this caused problems at dump/restore) (Tom)
4276 </para>
4277 </listitem>
4279 </itemizedlist>
4281 </sect2>
4282 </sect1>
4284 <sect1 id="release-8-2-4">
4285 <title>Release 8.2.4</title>
4287 <note>
4288 <title>Release date</title>
4289 <simpara>2007-04-23</simpara>
4290 </note>
4292 <para>
4293 This release contains a variety of fixes from 8.2.3,
4294 including a security fix.
4295 For information about new features in the 8.2 major release, see
4296 <xref linkend="release-8-2">.
4297 </para>
4299 <sect2>
4300 <title>Migration to Version 8.2.4</title>
4302 <para>
4303 A dump/restore is not required for those running 8.2.X.
4304 </para>
4306 </sect2>
4308 <sect2>
4309 <title>Changes</title>
4311 <itemizedlist>
4313 <listitem>
4314 <para>
4315 Support explicit placement of the temporary-table schema within
4316 <varname>search_path</>, and disable searching it for functions
4317 and operators (Tom)
4318 </para>
4320 <para>
4321 This is needed to allow a security-definer function to set a
4322 truly secure value of <varname>search_path</>. Without it,
4323 an unprivileged SQL user can use temporary objects to execute code
4324 with the privileges of the security-definer function (CVE-2007-2138).
4325 See <command>CREATE FUNCTION</> for more information.
4326 </para>
4327 </listitem>
4329 <listitem>
4330 <para>
4331 Fix <varname>shared_preload_libraries</> for Windows
4332 by forcing reload in each backend (Korry Douglas)
4333 </para>
4334 </listitem>
4336 <listitem>
4337 <para>
4338 Fix <function>to_char()</> so it properly upper/lower cases localized day or month
4339 names (Pavel Stehule)
4340 </para>
4341 </listitem>
4343 <listitem>
4344 <para>
4345 <filename>/contrib/tsearch2</> crash fixes (Teodor)
4346 </para>
4347 </listitem>
4349 <listitem>
4350 <para>
4351 Require <command>COMMIT PREPARED</> to be executed in the same
4352 database as the transaction was prepared in (Heikki)
4353 </para>
4354 </listitem>
4356 <listitem>
4357 <para>
4358 Allow <command>pg_dump</> to do binary backups larger than two gigabytes
4359 on Windows (Magnus)
4360 </para>
4361 </listitem>
4363 <listitem>
4364 <para>
4365 New traditional (Taiwan) Chinese <acronym>FAQ</> (Zhou Daojing)
4366 </para>
4367 </listitem>
4369 <listitem>
4370 <para>
4371 Prevent the statistics collector from writing to disk too frequently (Tom)
4372 </para>
4373 </listitem>
4375 <listitem>
4376 <para>
4377 Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
4378 <command>UPDATE</> chains (Tom, Pavan Deolasee)
4379 </para>
4380 </listitem>
4382 <listitem>
4383 <para>
4384 Fix bug in domains that use array types (Tom)
4385 </para>
4386 </listitem>
4388 <listitem>
4389 <para>
4390 Fix <command>pg_dump</> so it can dump a serial column's sequence
4391 using <option>-t</> when not also dumping the owning table
4392 (Tom)
4393 </para>
4394 </listitem>
4396 <listitem>
4397 <para>
4398 Planner fixes, including improving outer join and bitmap scan
4399 selection logic (Tom)
4400 </para>
4401 </listitem>
4403 <listitem>
4404 <para>
4405 Fix possible wrong answers or crash when a PL/pgSQL function tries
4406 to <literal>RETURN</> from within an <literal>EXCEPTION</> block
4407 (Tom)
4408 </para>
4409 </listitem>
4411 <listitem>
4412 <para>
4413 Fix PANIC during enlargement of a hash index (Tom)
4414 </para>
4415 </listitem>
4417 <listitem>
4418 <para>
4419 Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
4420 </para>
4421 </listitem>
4423 </itemizedlist>
4425 </sect2>
4426 </sect1>
4428 <sect1 id="release-8-2-3">
4429 <title>Release 8.2.3</title>
4431 <note>
4432 <title>Release date</title>
4433 <simpara>2007-02-07</simpara>
4434 </note>
4436 <para>
4437 This release contains two fixes from 8.2.2.
4438 For information about new features in the 8.2 major release, see
4439 <xref linkend="release-8-2">.
4440 </para>
4442 <sect2>
4443 <title>Migration to Version 8.2.3</title>
4445 <para>
4446 A dump/restore is not required for those running 8.2.X.
4447 </para>
4449 </sect2>
4451 <sect2>
4452 <title>Changes</title>
4454 <itemizedlist>
4456 <listitem>
4457 <para>
4458 Remove overly-restrictive check for type length in constraints and
4459 functional indexes(Tom)
4460 </para>
4461 </listitem>
4463 <listitem>
4464 <para>
4465 Fix optimization so MIN/MAX in subqueries can again use indexes (Tom)
4466 </para>
4467 </listitem>
4469 </itemizedlist>
4471 </sect2>
4472 </sect1>
4474 <sect1 id="release-8-2-2">
4475 <title>Release 8.2.2</title>
4477 <note>
4478 <title>Release date</title>
4479 <simpara>2007-02-05</simpara>
4480 </note>
4482 <para>
4483 This release contains a variety of fixes from 8.2.1, including
4484 a security fix.
4485 For information about new features in the 8.2 major release, see
4486 <xref linkend="release-8-2">.
4487 </para>
4489 <sect2>
4490 <title>Migration to Version 8.2.2</title>
4492 <para>
4493 A dump/restore is not required for those running 8.2.X.
4494 </para>
4496 </sect2>
4498 <sect2>
4499 <title>Changes</title>
4501 <itemizedlist>
4503 <listitem>
4504 <para>
4505 Remove security vulnerabilities that allowed connected users
4506 to read backend memory (Tom)
4507 </para>
4509 <para>
4510 The vulnerabilities involve suppressing the normal check that a SQL
4511 function returns the data type it's declared to, and changing the
4512 data type of a table column (CVE-2007-0555, CVE-2007-0556). These
4513 errors can easily be exploited to cause a backend crash, and in
4514 principle might be used to read database content that the user
4515 should not be able to access.
4516 </para>
4517 </listitem>
4519 <listitem>
4520 <para>
4521 Fix not-so-rare-anymore bug wherein btree index page splits could fail
4522 due to choosing an infeasible split point (Heikki Linnakangas)
4523 </para>
4524 </listitem>
4526 <listitem>
4527 <para>
4528 Fix Borland C compile scripts (L Bayuk)
4529 </para>
4530 </listitem>
4532 <listitem>
4533 <para>
4534 Properly handle <function>to_char('CC')</> for years ending in
4535 <literal>00</> (Tom)
4536 </para>
4538 <para>
4539 Year 2000 is in the twentieth century, not the twenty-first.
4540 </para>
4541 </listitem>
4543 <listitem>
4544 <para>
4545 <filename>/contrib/tsearch2</> localization improvements (Tatsuo, Teodor)
4546 </para>
4547 </listitem>
4549 <listitem>
4550 <para>
4551 Fix incorrect permission check in
4552 <literal>information_schema.key_column_usage</> view (Tom)
4553 </para>
4555 <para>
4556 The symptom is <quote>relation with OID nnnnn does not exist</> errors.
4557 To get this fix without using <command>initdb</>, use <command>CREATE OR
4558 REPLACE VIEW</> to install the corrected definition found in
4559 <filename>share/information_schema.sql</>. Note you will need to do
4560 this in each database.
4561 </para>
4562 </listitem>
4564 <listitem>
4565 <para>
4566 Improve <command>VACUUM</> performance for databases with many tables (Tom)
4567 </para>
4568 </listitem>
4570 <listitem>
4571 <para>
4572 Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
4573 </para>
4574 </listitem>
4576 <listitem>
4577 <para>
4578 Fix potentially incorrect results from index searches using
4579 <literal>ROW</> inequality conditions (Tom)
4580 </para>
4581 </listitem>
4583 <listitem>
4584 <para>
4585 Tighten security of multi-byte character processing for UTF8 sequences
4586 over three bytes long (Tom)
4587 </para>
4588 </listitem>
4590 <listitem>
4591 <para>
4592 Fix bogus <quote>permission denied</> failures occurring on Windows
4593 due to attempts to fsync already-deleted files (Magnus, Tom)
4594 </para>
4595 </listitem>
4597 <listitem>
4598 <para>
4599 Fix bug that could cause the statistics collector
4600 to hang on Windows (Magnus)
4601 </para>
4603 <para>
4604 This would in turn lead to autovacuum not working.
4605 </para>
4606 </listitem>
4608 <listitem>
4609 <para>
4610 Fix possible crashes when an already-in-use PL/pgSQL function is
4611 updated (Tom)
4612 </para>
4613 </listitem>
4615 <listitem>
4616 <para>
4617 Improve PL/pgSQL handling of domain types (Sergiy Vyshnevetskiy, Tom)
4618 </para>
4619 </listitem>
4621 <listitem>
4622 <para>
4623 Fix possible errors in processing PL/pgSQL exception blocks (Tom)
4624 </para>
4625 </listitem>
4627 </itemizedlist>
4629 </sect2>
4630 </sect1>
4632 <sect1 id="release-8-2-1">
4633 <title>Release 8.2.1</title>
4635 <note>
4636 <title>Release date</title>
4637 <simpara>2007-01-08</simpara>
4638 </note>
4640 <para>
4641 This release contains a variety of fixes from 8.2.
4642 For information about new features in the 8.2 major release, see
4643 <xref linkend="release-8-2">.
4644 </para>
4646 <sect2>
4647 <title>Migration to Version 8.2.1</title>
4649 <para>
4650 A dump/restore is not required for those running 8.2.
4651 </para>
4653 </sect2>
4655 <sect2>
4656 <title>Changes</title>
4658 <itemizedlist>
4660 <listitem>
4661 <para>
4662 Fix crash with <literal>SELECT</> ... <literal>LIMIT ALL</> (also
4663 <literal>LIMIT NULL</>) (Tom)
4664 </para>
4665 </listitem>
4667 <listitem>
4668 <para>
4669 <filename>Several /contrib/tsearch2</> fixes (Teodor)
4670 </para>
4671 </listitem>
4673 <listitem>
4674 <para>
4675 On Windows, make log messages coming from the operating system use
4676 <acronym>ASCII</> encoding (Hiroshi Saito)
4677 </para>
4679 <para>
4680 This fixes a conversion problem when there is a mismatch between
4681 the encoding of the operating system and database server.
4682 </para>
4683 </listitem>
4685 <listitem>
4686 <para>
4687 Fix Windows linking of <application>pg_dump</> using
4688 <filename>win32.mak</>
4689 (Hiroshi Saito)
4690 </para>
4691 </listitem>
4693 <listitem>
4694 <para>
4695 Fix planner mistakes for outer join queries (Tom)
4696 </para>
4697 </listitem>
4699 <listitem>
4700 <para>
4701 Fix several problems in queries involving sub-SELECTs (Tom)
4702 </para>
4703 </listitem>
4705 <listitem>
4706 <para>
4707 Fix potential crash in SPI during subtransaction abort (Tom)
4708 </para>
4710 <para>
4711 This affects all PL functions since they all use SPI.
4712 </para>
4713 </listitem>
4715 <listitem>
4716 <para>
4717 Improve build speed of <acronym>PDF</> documentation (Peter)
4718 </para>
4719 </listitem>
4721 <listitem>
4722 <para>
4723 Re-add <acronym>JST</> (Japan) timezone abbreviation (Tom)
4724 </para>
4725 </listitem>
4727 <listitem>
4728 <para>
4729 Improve optimization decisions related to index scans (Tom)
4730 </para>
4731 </listitem>
4733 <listitem>
4734 <para>
4735 Have <application>psql</> print multi-byte combining characters as
4736 before, rather than output as <literal>\u</> (Tom)
4737 </para>
4738 </listitem>
4740 <listitem>
4741 <para>
4742 Improve index usage of regular expressions that use parentheses (Tom)
4743 </para>
4745 <para>
4746 This improves <application>psql</> <literal>\d</> performance also.
4747 </para>
4748 </listitem>
4750 <listitem>
4751 <para>
4752 Make <application>pg_dumpall</> assume that databases have public
4753 <literal>CONNECT</> privilege, when dumping from a pre-8.2 server (Tom)
4754 </para>
4756 <para>
4757 This preserves the previous behavior that anyone can connect to a
4758 database if allowed by <filename>pg_hba.conf</>.
4759 </para>
4760 </listitem>
4762 </itemizedlist>
4764 </sect2>
4765 </sect1>
4767 <sect1 id="release-8-2">
4768 <title>Release 8.2</title>
4770 <note>
4771 <title>Release date</title>
4772 <simpara>2006-12-05</simpara>
4773 </note>
4775 <sect2>
4776 <title>Overview</title>
4778 <para>
4779 This release adds many functionality and performance improvements that
4780 were requested by users, including:
4782 <itemizedlist>
4784 <listitem>
4785 <para>
4786 Query language enhancements including <command>INSERT/UPDATE/DELETE
4787 RETURNING</command>, multirow <literal>VALUES</literal> lists, and
4788 optional target-table alias in
4789 <command>UPDATE</>/<command>DELETE</command>
4790 </para>
4791 </listitem>
4793 <listitem>
4794 <para>
4795 Index creation without blocking concurrent
4796 <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
4797 operations
4798 </para>
4799 </listitem>
4801 <listitem>
4802 <para>
4803 Many query optimization improvements, including support for
4804 reordering outer joins
4805 </para>
4806 </listitem>
4808 <listitem>
4809 <para>
4810 Improved sorting performance with lower memory usage
4811 </para>
4812 </listitem>
4814 <listitem>
4815 <para>
4816 More efficient locking with better concurrency
4817 </para>
4818 </listitem>
4820 <listitem>
4821 <para>
4822 More efficient vacuuming
4823 </para>
4824 </listitem>
4826 <listitem>
4827 <para>
4828 Easier administration of warm standby servers
4829 </para>
4830 </listitem>
4832 <listitem>
4833 <para>
4834 New <literal>FILLFACTOR</literal> support for tables and indexes
4835 </para>
4836 </listitem>
4838 <listitem>
4839 <para>
4840 Monitoring, logging, and performance tuning additions
4841 </para>
4842 </listitem>
4844 <listitem>
4845 <para>
4846 More control over creating and dropping objects
4847 </para>
4848 </listitem>
4850 <listitem>
4851 <para>
4852 Table inheritance relationships can be defined
4853 for and removed from pre-existing tables
4854 </para>
4855 </listitem>
4857 <listitem>
4858 <para>
4859 <command>COPY TO</command> can copy the output of an arbitrary
4860 <command>SELECT</command> statement
4861 </para>
4862 </listitem>
4864 <listitem>
4865 <para>
4866 Array improvements, including nulls in arrays
4867 </para>
4868 </listitem>
4870 <listitem>
4871 <para>
4872 Aggregate-function improvements, including multiple-input
4873 aggregates and SQL:2003 statistical functions
4874 </para>
4875 </listitem>
4877 <listitem>
4878 <para>
4879 Many <filename>contrib/</filename> improvements
4880 </para>
4881 </listitem>
4883 </itemizedlist>
4885 </para>
4887 </sect2>
4889 <sect2>
4890 <title>Migration to Version 8.2</title>
4892 <para>
4893 A dump/restore using <application>pg_dump</application> is
4894 required for those wishing to migrate data from any previous
4895 release.
4896 </para>
4898 <para>
4899 Observe the following incompatibilities:
4900 </para>
4902 <itemizedlist>
4904 <listitem>
4905 <para>
4906 Set <link
4907 linkend="guc-escape-string-warning"><varname>escape_string_warning</></link>
4908 to <literal>on</> by default (Bruce)
4909 </para>
4911 <para>
4912 This issues a warning if backslash escapes are used in
4913 <link linkend="sql-syntax-strings">non-escape (non-<literal>E''</>)
4914 strings</link>.
4915 </para>
4916 </listitem>
4918 <listitem>
4919 <para>
4920 Change the <link linkend="sql-syntax-row-constructors">row
4921 constructor syntax</link> (<literal>ROW(...)</>) so that
4922 list elements <literal>foo.*</> will be expanded to a list
4923 of their member fields, rather than creating a nested
4924 row type field as formerly (Tom)
4925 </para>
4927 <para>
4928 The new behavior is substantially more useful since it
4929 allows, for example, triggers to check for data changes
4930 with <literal>IF row(new.*) IS DISTINCT FROM row(old.*)</>.
4931 The old behavior is still available by omitting <literal>.*</>.
4932 </para>
4933 </listitem>
4935 <listitem>
4936 <para>
4937 Make <link linkend="row-wise-comparison">row comparisons</link>
4938 follow <acronym>SQL</> standard semantics and allow them
4939 to be used in index scans (Tom)
4940 </para>
4942 <para>
4943 Previously, row = and &lt;&gt; comparisons followed the
4944 standard but &lt; &lt;= &gt; &gt;= did not. A row comparison
4945 can now be used as an index constraint for a multicolumn
4946 index matching the row value.
4947 </para>
4948 </listitem>
4950 <listitem>
4951 <para>
4952 Make <link linkend="functions-comparison">row <literal>IS <optional>NOT</> NULL</literal></link>
4953 tests follow <acronym>SQL</> standard semantics (Tom)
4954 </para>
4956 <para>
4957 The former behavior conformed to the standard for simple cases
4958 with <literal>IS NULL</>, but <literal>IS NOT NULL</> would return
4959 true if any row field was non-null, whereas the standard says it
4960 should return true only when all fields are non-null.
4961 </para>
4962 </listitem>
4964 <listitem>
4965 <para>
4966 Make <link linkend="SQL-SET-CONSTRAINTS"><command>SET
4967 CONSTRAINT</></link> affect only one constraint (Kris Jurka)
4968 </para>
4970 <para>
4971 In previous releases, <command>SET CONSTRAINT</> modified
4972 all constraints with a matching name. In this release,
4973 the schema search path is used to modify only the first
4974 matching constraint. A schema specification is also
4975 supported. This more nearly conforms to the SQL standard.
4976 </para>
4977 </listitem>
4979 <listitem>
4980 <para>
4981 Remove <literal>RULE</> permission for tables, for security reasons
4982 (Tom)
4983 </para>
4985 <para>
4986 As of this release, only a table's owner can create or modify
4987 rules for the table. For backwards compatibility,
4988 <command>GRANT</>/<command>REVOKE RULE</> is still accepted,
4989 but it does nothing.
4990 </para>
4991 </listitem>
4993 <listitem>
4994 <para>
4995 Array comparison improvements (Tom)
4996 </para>
4998 <para>
4999 Now array dimensions are also compared.
5000 </para>
5001 </listitem>
5003 <listitem>
5004 <para>
5005 Change <link linkend="functions-array">array concatenation</link>
5006 to match documented behavior (Tom)
5007 </para>
5009 <para>
5010 This changes the previous behavior where concatenation
5011 would modify the array lower bound.
5012 </para>
5013 </listitem>
5015 <listitem>
5016 <para>
5017 Make command-line options of <application>postmaster</>
5018 and <link linkend="app-postgres"><application>postgres</></link>
5019 identical (Peter)
5020 </para>
5022 <para>
5023 This allows the postmaster to pass arguments to each backend
5024 without using <literal>-o</>. Note that some options are now
5025 only available as long-form options, because there were conflicting
5026 single-letter options.
5027 </para>
5028 </listitem>
5030 <listitem>
5031 <para>
5032 Deprecate use of <application>postmaster</> symbolic link (Peter)
5033 </para>
5035 <para>
5036 <application>postmaster</> and <application>postgres</>
5037 commands now act identically, with the behavior determined
5038 by command-line options. The <application>postmaster</> symbolic link is
5039 kept for compatibility, but is not really needed.
5040 </para>
5041 </listitem>
5043 <listitem>
5044 <para>
5045 Change <link
5046 linkend="guc-log-duration"><varname>log_duration</></link>
5047 to output even if the query is not output (Tom)
5048 </para>
5050 <para>
5051 In prior releases, <varname>log_duration</> only printed if
5052 the query appeared earlier in the log.
5053 </para>
5054 </listitem>
5056 <listitem>
5057 <para>
5058 Make <link
5059 linkend="functions-formatting"><function>to_char(time)</></link>
5060 and <link
5061 linkend="functions-formatting"><function>to_char(interval)</></link>
5062 treat <literal>HH</> and <literal>HH12</> as 12-hour
5063 intervals
5064 </para>
5066 <para>
5067 Most applications should use <literal>HH24</> unless they
5068 want a 12-hour display.
5069 </para>
5070 </listitem>
5072 <listitem>
5073 <para>
5074 Zero unmasked bits in conversion from <link
5075 linkend="datatype-inet"><type>INET</></link> to <link
5076 linkend="datatype-inet"><type>CIDR</></link> (Tom)
5077 </para>
5079 <para>
5080 This ensures that the converted value is actually valid for
5081 <type>CIDR</>.
5082 </para>
5083 </listitem>
5085 <listitem>
5086 <para>
5087 Remove <varname>australian_timezones</> configuration variable
5088 (Joachim Wieland)
5089 </para>
5091 <para>
5092 This variable has been superseded by a more general facility
5093 for configuring timezone abbreviations.
5094 </para>
5095 </listitem>
5097 <listitem>
5098 <para>
5099 Improve cost estimation for nested-loop index scans (Tom)
5100 </para>
5102 <para>
5103 This might eliminate the need to set unrealistically small
5104 values of <link
5105 linkend="guc-random-page-cost"><varname>random_page_cost</></link>.
5106 If you have been using a very small <varname>random_page_cost</>,
5107 please recheck your test cases.
5108 </para>
5109 </listitem>
5111 <listitem>
5112 <para>
5113 Change behavior of <command>pg_dump</> <literal>-n</> and
5114 <literal>-t</> options. (Greg Sabino Mullane)
5115 </para>
5116 <para>
5117 See the <command>pg_dump</> manual page for details.
5118 </para>
5119 </listitem>
5121 <listitem>
5122 <para>
5123 Change <link linkend="libpq"><application>libpq</></link>
5124 <function>PQdsplen()</> to return a useful value (Martijn
5125 van Oosterhout)
5126 </para>
5127 </listitem>
5129 <listitem>
5130 <para>
5131 Declare <link linkend="libpq"><application>libpq</></link>
5132 <function>PQgetssl()</> as returning <literal>void *</>,
5133 rather than <literal>SSL *</> (Martijn van Oosterhout)
5134 </para>
5136 <para>
5137 This allows applications to use the function without including
5138 the OpenSSL headers.
5139 </para>
5140 </listitem>
5142 <listitem>
5143 <para>
5144 C-language loadable modules must now include a
5145 <link linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
5146 macro call for version compatibility checking
5147 (Martijn van Oosterhout)
5148 </para>
5149 </listitem>
5151 <listitem>
5152 <para>
5153 For security's sake, modules used by a PL/PerlU function are no
5154 longer available to PL/Perl functions (Andrew)
5155 </para>
5156 <note>
5157 <para>
5158 This also implies that data can no longer be shared between a PL/Perl
5159 function and a PL/PerlU function.
5160 Some Perl installations have not been compiled with the correct flags
5161 to allow multiple interpreters to exist within a single process.
5162 In this situation PL/Perl and PL/PerlU cannot both be used in a
5163 single backend. The solution is to get a Perl installation which
5164 supports multiple interpreters.
5165 </para>
5166 </note>
5167 </listitem>
5169 <listitem>
5170 <para>
5171 In <filename>contrib/xml2/</>, rename <function>xml_valid()</> to
5172 <function>xml_is_well_formed()</> (Tom)
5173 </para>
5175 <para>
5176 <function>xml_valid()</> will remain for backward compatibility,
5177 but its behavior will change to do schema checking in a future
5178 release.
5179 </para>
5180 </listitem>
5182 <listitem>
5183 <para>
5184 Remove <filename>contrib/ora2pg/</>, now at <ulink
5185 url="http://www.samse.fr/GPL/ora2pg"></ulink>
5186 </para>
5187 </listitem>
5189 <listitem>
5190 <para>
5191 Remove contrib modules that have been migrated to PgFoundry:
5192 <filename>adddepend</>, <filename>dbase</>, <filename>dbmirror</>,
5193 <filename>fulltextindex</>, <filename>mac</>, <filename>userlock</>
5194 </para>
5195 </listitem>
5197 <listitem>
5198 <para>
5199 Remove abandoned contrib modules:
5200 <filename>mSQL-interface</>, <filename>tips</>
5201 </para>
5202 </listitem>
5204 <listitem>
5205 <para>
5206 Remove <acronym>QNX</> and <acronym>BEOS</> ports (Bruce)
5207 </para>
5209 <para>
5210 These ports no longer had active maintainers.
5211 </para>
5212 </listitem>
5214 </itemizedlist>
5215 </sect2>
5217 <sect2>
5218 <title>Changes</title>
5220 <para>
5221 Below you will find a detailed account of the
5222 changes between <productname>PostgreSQL</productname> 8.2 and
5223 the previous major release.
5224 </para>
5226 <sect3>
5227 <title>Performance Improvements</title>
5228 <itemizedlist>
5230 <listitem>
5231 <para>
5232 Allow the planner to reorder <link linkend="queries-join">outer
5233 joins</link> in some circumstances (Tom)
5234 </para>
5236 <para>
5237 In previous releases, outer joins would always be evaluated in
5238 the order written in the query. This change allows the
5239 query optimizer to consider reordering outer joins, in cases where
5240 it can determine that the join order can be changed without
5241 altering the meaning of the query. This can make a
5242 considerable performance difference for queries involving
5243 multiple outer joins or mixed inner and outer joins.
5244 </para>
5245 </listitem>
5247 <listitem>
5248 <para>
5249 Improve efficiency of <link
5250 linkend="functions-comparisons"><literal>IN</>
5251 (list-of-expressions)</link> clauses (Tom)
5252 </para>
5253 </listitem>
5255 <listitem>
5256 <para>
5257 Improve sorting speed and reduce memory usage (Simon, Tom)
5258 </para>
5259 </listitem>
5261 <listitem>
5262 <para>
5263 Improve subtransaction performance (Alvaro, Itagaki Takahiro,
5264 Tom)
5265 </para>
5266 </listitem>
5268 <listitem>
5269 <para>
5270 Add <literal>FILLFACTOR</> to <link
5271 linkend="SQL-CREATETABLE">table</link> and <link
5272 linkend="SQL-CREATEINDEX">index</link> creation (ITAGAKI
5273 Takahiro)
5274 </para>
5276 <para>
5277 This leaves extra free space in each table or index page,
5278 allowing improved performance as the database grows. This
5279 is particularly valuable to maintain clustering.
5280 </para>
5281 </listitem>
5283 <listitem>
5284 <para>
5285 Increase default values for <link
5286 linkend="guc-shared-buffers"><varname>shared_buffers</></link>
5287 and <link
5288 linkend="guc-max-fsm-pages"><varname>max_fsm_pages</></link>
5289 (Andrew)
5290 </para>
5291 </listitem>
5293 <listitem>
5294 <para>
5295 Improve locking performance by breaking the lock manager tables into
5296 sections
5297 (Tom)
5298 </para>
5300 <para>
5301 This allows locking to be more fine-grained, reducing
5302 contention.
5303 </para>
5304 </listitem>
5306 <listitem>
5307 <para>
5308 Reduce locking requirements of sequential scans (Qingqing
5309 Zhou)
5310 </para>
5311 </listitem>
5313 <listitem>
5314 <para>
5315 Reduce locking required for database creation and destruction
5316 (Tom)
5317 </para>
5318 </listitem>
5320 <listitem>
5321 <para>
5322 Improve the optimizer's selectivity estimates for <link
5323 linkend="functions-like"><literal>LIKE</></link>, <link
5324 linkend="functions-like"><literal>ILIKE</></link>, and
5325 <link linkend="functions-posix-regexp">regular expression</link>
5326 operations (Tom)
5327 </para>
5328 </listitem>
5330 <listitem>
5331 <para>
5332 Improve planning of joins to <link linkend="ddl-inherit">inherited
5333 tables</link> and <link linkend="queries-union"><literal>UNION
5334 ALL</></link> views (Tom)
5335 </para>
5336 </listitem>
5338 <listitem>
5339 <para>
5340 Allow <link linkend="guc-constraint-exclusion">constraint
5341 exclusion</link> to be applied to <link
5342 linkend="ddl-inherit">inherited</link> <command>UPDATE</> and
5343 <command>DELETE</> queries (Tom)
5344 </para>
5346 <para>
5347 <command>SELECT</> already honored constraint exclusion.
5348 </para>
5349 </listitem>
5351 <listitem>
5352 <para>
5353 Improve planning of constant <literal>WHERE</> clauses, such as
5354 a condition that depends only on variables inherited from an
5355 outer query level (Tom)
5356 </para>
5357 </listitem>
5359 <listitem>
5360 <para>
5361 Protocol-level unnamed prepared statements are re-planned
5362 for each set of <literal>BIND</> values (Tom)
5363 </para>
5365 <para>
5366 This improves performance because the exact parameter values
5367 can be used in the plan.
5368 </para>
5369 </listitem>
5371 <listitem>
5372 <para>
5373 Speed up vacuuming of B-Tree indexes (Heikki Linnakangas,
5374 Tom)
5375 </para>
5376 </listitem>
5378 <listitem>
5379 <para>
5380 Avoid extra scan of tables without indexes during <link
5381 linkend="SQL-VACUUM"><command>VACUUM</></link> (Greg Stark)
5382 </para>
5383 </listitem>
5385 <listitem>
5386 <para>
5387 Improve multicolumn <link linkend="GiST"><acronym>GiST</></link>
5388 indexing (Oleg, Teodor)
5389 </para>
5390 </listitem>
5392 <listitem>
5393 <para>
5394 Remove dead index entries before B-Tree page split (Junji
5395 Teramoto)
5396 </para>
5397 </listitem>
5399 </itemizedlist>
5401 </sect3>
5403 <sect3>
5404 <title>Server Changes</title>
5405 <itemizedlist>
5407 <listitem>
5408 <para>
5409 Allow a forced switch to a new transaction log file (Simon, Tom)
5410 </para>
5412 <para>
5413 This is valuable for keeping warm standby slave servers
5414 in sync with the master. Transaction log file switching now also happens
5415 automatically during <link
5416 linkend="functions-admin"><function>pg_stop_backup()</></link>.
5417 This ensures that all
5418 transaction log files needed for recovery can be archived immediately.
5419 </para>
5420 </listitem>
5422 <listitem>
5423 <para>
5424 Add <acronym>WAL</> informational functions (Simon)
5425 </para>
5427 <para>
5428 Add functions for interrogating the current transaction log insertion
5429 point and determining <acronym>WAL</> filenames from the
5430 hex <acronym>WAL</> locations displayed by <link
5431 linkend="functions-admin"><function>pg_stop_backup()</></link>
5432 and related functions.
5433 </para>
5434 </listitem>
5436 <listitem>
5437 <para>
5438 Improve recovery from a crash during <acronym>WAL</> replay (Simon)
5439 </para>
5441 <para>
5442 The server now does periodic checkpoints during <acronym>WAL</>
5443 recovery, so if there is a crash, future <acronym>WAL</>
5444 recovery is shortened. This also eliminates the need for
5445 warm standby servers to replay the entire log since the
5446 base backup if they crash.
5447 </para>
5448 </listitem>
5450 <listitem>
5451 <para>
5452 Improve reliability of long-term <acronym>WAL</> replay
5453 (Heikki, Simon, Tom)
5454 </para>
5456 <para>
5457 Formerly, trying to roll forward through more than 2 billion
5458 transactions would not work due to XID wraparound. This meant
5459 warm standby servers had to be reloaded
5460 from fresh base backups periodically.
5461 </para>
5462 </listitem>
5464 <listitem>
5465 <para>
5466 Add <link
5467 linkend="guc-archive-timeout"><varname>archive_timeout</></link>
5468 to force transaction log file switches at a given interval (Simon)
5469 </para>
5471 <para>
5472 This enforces a maximum replication delay for warm standby servers.
5473 </para>
5474 </listitem>
5476 <listitem>
5477 <para>
5478 Add native <link linkend="auth-ldap"><acronym>LDAP</></link>
5479 authentication (Magnus Hagander)
5480 </para>
5482 <para>
5483 This is particularly useful for platforms that do not
5484 support <acronym>PAM</>, such as Windows.
5485 </para>
5486 </listitem>
5488 <listitem>
5489 <para>
5490 Add <link linkend="sql-grant-description-objects"><literal>GRANT
5491 CONNECT ON DATABASE</></link> (Gevik Babakhani)
5492 </para>
5494 <para>
5495 This gives SQL-level control over database access. It works as
5496 an additional filter on top of the existing
5497 <link linkend="auth-pg-hba-conf"><filename>pg_hba.conf</></link>
5498 controls.
5499 </para>
5500 </listitem>
5502 <listitem>
5503 <para>
5504 Add support for <link linkend="ssl-tcp"><acronym>SSL</>
5505 Certificate Revocation List</link> (<acronym>CRL</>) files
5506 (Libor Hoho&scaron;)
5507 </para>
5509 <para>
5510 The server and <application>libpq</> both recognize <acronym>CRL</>
5511 files now.
5512 </para>
5513 </listitem>
5515 <listitem>
5516 <para>
5517 <link linkend="GiST"><acronym>GiST</></link> indexes are
5518 now clusterable (Teodor)
5519 </para>
5520 </listitem>
5522 <listitem>
5523 <para>
5524 Remove routine autovacuum server log entries (Bruce)
5525 </para>
5527 <para>
5528 <link
5529 linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
5530 now shows autovacuum activity.
5531 </para>
5532 </listitem>
5534 <listitem>
5535 <para>
5536 Track maximum XID age within individual tables, instead of whole databases (Alvaro)
5537 </para>
5539 <para>
5540 This reduces the overhead involved in preventing transaction
5541 ID wraparound, by avoiding unnecessary VACUUMs.
5542 </para>
5543 </listitem>
5545 <listitem>
5546 <para>
5547 Add last vacuum and analyze timestamp columns to the stats
5548 collector (Larry Rosenman)
5549 </para>
5551 <para>
5552 These values now appear in the <link
5553 linkend="monitoring-stats-views-table"><literal>pg_stat_*_tables</></link>
5554 system views.
5555 </para>
5556 </listitem>
5558 <listitem>
5559 <para>
5560 Improve performance of statistics monitoring, especially
5561 <varname>stats_command_string</>
5562 (Tom, Bruce)
5563 </para>
5565 <para>
5566 This release enables <varname>stats_command_string</> by
5567 default, now that its overhead is minimal. This means
5568 <link
5569 linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
5570 will now show all active queries by default.
5571 </para>
5572 </listitem>
5574 <listitem>
5575 <para>
5576 Add a <literal>waiting</> column to <link
5577 linkend="monitoring-stats-views-table"><literal>pg_stat_activity</></link>
5578 (Tom)
5579 </para>
5581 <para>
5582 This allows <structname>pg_stat_activity</> to show all the
5583 information included in the <application>ps</> display.
5584 </para>
5585 </listitem>
5587 <listitem>
5588 <para>
5589 Add configuration parameter <link
5590 linkend="guc-update-process-title"><varname>update_process_title</></link>
5591 to control whether the <application>ps</> display is updated
5592 for every command (Bruce)
5593 </para>
5595 <para>
5596 On platforms where it is expensive to update the <application>ps</>
5597 display, it might be worthwhile to turn this off and rely solely on
5598 <structname>pg_stat_activity</> for status information.
5599 </para>
5600 </listitem>
5602 <listitem>
5603 <para>
5604 Allow units to be specified in configuration settings
5605 (Peter)
5606 </para>
5608 <para>
5609 For example, you can now set <link
5610 linkend="guc-shared-buffers"><varname>shared_buffers</></link>
5611 to <literal>32MB</> rather than mentally converting sizes.
5612 </para>
5613 </listitem>
5615 <listitem>
5616 <para>
5617 Add support for <link linkend="config-setting">include
5618 directives</link> in <filename>postgresql.conf</> (Joachim
5619 Wieland)
5620 </para>
5621 </listitem>
5623 <listitem>
5624 <para>
5625 Improve logging of protocol-level prepare/bind/execute
5626 messages (Bruce, Tom)
5627 </para>
5629 <para>
5630 Such logging now shows statement names, bind parameter
5631 values, and the text of the query being executed. Also,
5632 the query text is properly included in logged error messages
5633 when enabled by <varname>log_min_error_statement</>.
5634 </para>
5635 </listitem>
5637 <listitem>
5638 <para>
5639 Prevent <link
5640 linkend="guc-max-stack-depth"><varname>max_stack_depth</></link>
5641 from being set to unsafe values
5642 </para>
5644 <para>
5645 On platforms where we can determine the actual kernel stack depth
5646 limit (which is most), make sure that the initial default value of
5647 <varname>max_stack_depth</> is safe, and reject attempts to set it
5648 to unsafely large values.
5649 </para>
5650 </listitem>
5652 <listitem>
5653 <para>
5654 Enable highlighting of error location in query in more
5655 cases (Tom)
5656 </para>
5658 <para>
5659 The server is now able to report a specific error location for
5660 some semantic errors (such as unrecognized column name), rather
5661 than just for basic syntax errors as before.
5662 </para>
5663 </listitem>
5665 <listitem>
5666 <para>
5667 Fix <quote>failed to re-find parent key</> errors in
5668 <command>VACUUM</> (Tom)
5669 </para>
5670 </listitem>
5672 <listitem>
5673 <para>
5674 Clean out <filename>pg_internal.init</> cache files during server
5675 restart (Simon)
5676 </para>
5678 <para>
5679 This avoids a hazard that the cache files might contain stale
5680 data after PITR recovery.
5681 </para>
5682 </listitem>
5684 <listitem>
5685 <para>
5686 Fix race condition for truncation of a large relation across a
5687 gigabyte boundary by <command>VACUUM</> (Tom)
5688 </para>
5689 </listitem>
5691 <listitem>
5692 <para>
5693 Fix bug causing needless deadlock errors on row-level locks (Tom)
5694 </para>
5695 </listitem>
5697 <listitem>
5698 <para>
5699 Fix bugs affecting multi-gigabyte hash indexes (Tom)
5700 </para>
5701 </listitem>
5703 <listitem>
5704 <para>
5705 Each backend process is now its own process group leader (Tom)
5706 </para>
5708 <para>
5709 This allows query cancel to abort subprocesses invoked from a
5710 backend or archive/recovery process.
5711 </para>
5712 </listitem>
5714 </itemizedlist>
5716 </sect3>
5718 <sect3>
5719 <title>Query Changes</title>
5720 <itemizedlist>
5722 <listitem>
5723 <para>
5724 Add <link linkend="SQL-INSERT"><command>INSERT</></link>/<link
5725 linkend="SQL-UPDATE"><command>UPDATE</></link>/<link
5726 linkend="SQL-DELETE"><command>DELETE</></link>
5727 <literal>RETURNING</> (Jonah Harris, Tom)
5728 </para>
5730 <para>
5731 This allows these commands to return values, such as the
5732 computed serial key for a new row. In the <command>UPDATE</>
5733 case, values from the updated version of the row are returned.
5734 </para>
5735 </listitem>
5737 <listitem>
5738 <para>
5739 Add support for multiple-row <link
5740 linkend="queries-values"><literal>VALUES</></link> clauses,
5741 per SQL standard (Joe, Tom)
5742 </para>
5744 <para>
5745 This allows <command>INSERT</> to insert multiple rows of
5746 constants, or queries to generate result sets using constants.
5747 For example, <literal>INSERT ... VALUES (...), (...),
5748 ....</>, and <literal>SELECT * FROM (VALUES (...), (...),
5749 ....) AS alias(f1, ...)</>.
5750 </para>
5751 </listitem>
5753 <listitem>
5754 <para>
5755 Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
5756 and <link linkend="SQL-DELETE"><command>DELETE</></link>
5757 to use an alias for the target table (Atsushi Ogawa)
5758 </para>
5760 <para>
5761 The SQL standard does not permit an alias in these commands, but
5762 many database systems allow one anyway for notational convenience.
5763 </para>
5764 </listitem>
5766 <listitem>
5767 <para>
5768 Allow <link linkend="SQL-UPDATE"><command>UPDATE</></link>
5769 to set multiple columns with a list of values (Susanne
5770 Ebrecht)
5771 </para>
5773 <para>
5774 This is basically a short-hand for assigning the columns
5775 and values in pairs. The syntax is <literal>UPDATE tab
5776 SET (<replaceable>column</>, ...) = (<replaceable>val</>, ...)</>.
5777 </para>
5778 </listitem>
5780 <listitem>
5781 <para>
5782 Make row comparisons work per standard (Tom)
5783 </para>
5785 <para>
5786 The forms &lt;, &lt;=, &gt;, &gt;= now compare rows lexicographically,
5787 that is, compare the first elements, if equal compare the second
5788 elements, and so on. Formerly they expanded to an AND condition
5789 across all the elements, which was neither standard nor very useful.
5790 </para>
5791 </listitem>
5793 <listitem>
5794 <para>
5795 Add <link linkend="SQL-TRUNCATE"><literal>CASCADE</></link>
5796 option to <command>TRUNCATE</> (Joachim Wieland)
5797 </para>
5799 <para>
5800 This causes <command>TRUNCATE</> to automatically include all tables
5801 that reference the specified table(s) via foreign keys. While
5802 convenient, this is a dangerous tool &mdash; use with caution!
5803 </para>
5804 </listitem>
5806 <listitem>
5807 <para>
5808 Support <literal>FOR UPDATE</> and <literal>FOR SHARE</>
5809 in the same <link linkend="SQL-INSERT"><literal>SELECT</></link>
5810 command (Tom)
5811 </para>
5812 </listitem>
5814 <listitem>
5815 <para>
5816 Add <link linkend="functions-comparisons"><literal>IS NOT
5817 DISTINCT FROM</></link> (Pavel Stehule)
5818 </para>
5820 <para>
5821 This operator is similar to equality (<literal>=</>), but
5822 evaluates to true when both left and right operands are
5823 <literal>NULL</>, and to false when just one is, rather than
5824 yielding <literal>NULL</> in these cases.
5825 </para>
5826 </listitem>
5828 <listitem>
5829 <para>
5830 Improve the length output used by <link
5831 linkend="queries-union"><literal>UNION</></link>/<literal>INTERSECT</>/<literal>EXCEPT</>
5832 (Tom)
5833 </para>
5835 <para>
5836 When all corresponding columns are of the same defined length, that
5837 length is used for the result, rather than a generic length.
5838 </para>
5839 </listitem>
5841 <listitem>
5842 <para>
5843 Allow <link linkend="functions-like"><literal>ILIKE</></link>
5844 to work for multi-byte encodings (Tom)
5845 </para>
5847 <para>
5848 Internally, <literal>ILIKE</> now calls <function>lower()</>
5849 and then uses <literal>LIKE</>. Locale-specific regular
5850 expression patterns still do not work in these encodings.
5851 </para>
5852 </listitem>
5854 <listitem>
5855 <para>
5856 Enable <link
5857 linkend="guc-standard-conforming-strings"><varname>standard_conforming_strings</></link>
5858 to be turned <literal>on</> (Kevin Grittner)
5859 </para>
5861 <para>
5862 This allows backslash escaping in strings to be disabled,
5863 making <productname>PostgreSQL</> more
5864 standards-compliant. The default is <literal>off</> for backwards
5865 compatibility, but future releases will default this to <literal>on</>.
5866 </para>
5867 </listitem>
5869 <listitem>
5870 <para>
5871 Do not flatten subqueries that contain <literal>volatile</>
5872 functions in their target lists (Jaime Casanova)
5873 </para>
5875 <para>
5876 This prevents surprising behavior due to multiple evaluation
5877 of a <literal>volatile</> function (such as <function>random()</>
5878 or <function>nextval()</>). It might cause performance
5879 degradation in the presence of functions that are unnecessarily
5880 marked as <literal>volatile</>.
5881 </para>
5882 </listitem>
5884 <listitem>
5885 <para>
5886 Add system views <link
5887 linkend="view-pg-prepared-statements"><literal>pg_prepared_statements</></link>
5888 and <link
5889 linkend="view-pg-cursors"><literal>pg_cursors</></link>
5890 to show prepared statements and open cursors (Joachim Wieland, Neil)
5891 </para>
5893 <para>
5894 These are very useful in pooled connection setups.
5895 </para>
5896 </listitem>
5898 <listitem>
5899 <para>
5900 Support portal parameters in <link
5901 linkend="SQL-EXPLAIN"><command>EXPLAIN</></link> and <link
5902 linkend="SQL-EXECUTE"><command>EXECUTE</></link> (Tom)
5903 </para>
5905 <para>
5906 This allows, for example, <acronym>JDBC</> <literal>?</> parameters to
5907 work in these commands.
5908 </para>
5909 </listitem>
5911 <listitem>
5912 <para>
5913 If <acronym>SQL</>-level <link
5914 linkend="SQL-PREPARE"><command>PREPARE</></link> parameters
5915 are unspecified, infer their types from the content of the
5916 query (Neil)
5917 </para>
5919 <para>
5920 Protocol-level <command>PREPARE</> already did this.
5921 </para>
5922 </listitem>
5924 <listitem>
5925 <para>
5926 Allow <literal>LIMIT</> and <literal>OFFSET</> to exceed
5927 two billion (Dhanaraj M)
5928 </para>
5929 </listitem>
5931 </itemizedlist>
5933 </sect3>
5935 <sect3>
5936 <title>Object Manipulation Changes</title>
5937 <itemizedlist>
5939 <listitem>
5940 <para>
5941 Add <literal>TABLESPACE</> clause to <link
5942 linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
5943 (Neil)
5944 </para>
5946 <para>
5947 This allows a tablespace to be specified for the new table.
5948 </para>
5949 </listitem>
5951 <listitem>
5952 <para>
5953 Add <literal>ON COMMIT</> clause to <link
5954 linkend="SQL-CREATETABLEAS"><command>CREATE TABLE AS</></link>
5955 (Neil)
5956 </para>
5958 <para>
5959 This allows temporary tables to be truncated or dropped on
5960 transaction commit. The default behavior is for the table
5961 to remain until the session ends.
5962 </para>
5963 </listitem>
5965 <listitem>
5966 <para>
5967 Add <literal>INCLUDING CONSTRAINTS</> to <link
5968 linkend="SQL-CREATETABLE"><command>CREATE TABLE LIKE</></link>
5969 (Greg Stark)
5970 </para>
5972 <para>
5973 This allows easy copying of <literal>CHECK</> constraints to a new
5974 table.
5975 </para>
5976 </listitem>
5978 <listitem>
5979 <para>
5980 Allow the creation of placeholder (shell) <link
5981 linkend="SQL-CREATETYPE">types</link> (Martijn van Oosterhout)
5982 </para>
5984 <para>
5985 A shell type declaration creates a type name, without specifying
5986 any of the details of the type. Making a shell type is useful
5987 because it allows cleaner declaration of the type's input/output
5988 functions, which must exist before the type can be defined <quote>for
5989 real</>. The syntax is <command>CREATE TYPE <replaceable
5990 class="parameter">typename</replaceable></>.
5991 </para>
5992 </listitem>
5994 <listitem>
5995 <para>
5996 <link linkend="SQL-CREATEAGGREGATE">Aggregate functions</link>
5997 now support multiple input parameters (Sergey Koposov, Tom)
5998 </para>
5999 </listitem>
6001 <listitem>
6002 <para>
6003 Add new aggregate creation <link
6004 linkend="SQL-CREATEAGGREGATE">syntax</link> (Tom)
6005 </para>
6007 <para>
6008 The new syntax is <command>CREATE AGGREGATE
6009 <replaceable>aggname</> (<replaceable>input_type</>)
6010 (<replaceable>parameter_list</>)</command>. This more
6011 naturally supports the new multi-parameter aggregate
6012 functionality. The previous syntax is still supported.
6013 </para>
6014 </listitem>
6016 <listitem>
6017 <para>
6018 Add <link
6019 linkend="SQL-ALTERROLE"><command>ALTER ROLE PASSWORD NULL</></link>
6020 to remove a previously set role password (Peter)
6021 </para>
6022 </listitem>
6024 <listitem>
6025 <para>
6026 Add <command>DROP</> object <literal>IF EXISTS</> for many
6027 object types (Andrew)
6028 </para>
6030 <para>
6031 This allows <command>DROP</> operations on non-existent
6032 objects without generating an error.
6033 </para>
6034 </listitem>
6036 <listitem>
6037 <para>
6038 Add <link linkend="SQL-DROP-OWNED"><literal>DROP OWNED</></link>
6039 to drop all objects owned by a role (Alvaro)
6040 </para>
6041 </listitem>
6043 <listitem>
6044 <para>
6045 Add <link linkend="SQL-REASSIGN-OWNED"><literal>REASSIGN
6046 OWNED</></link> to reassign ownership of all objects owned
6047 by a role (Alvaro)
6048 </para>
6050 <para>
6051 This, and <literal>DROP OWNED</> above, facilitate dropping
6052 roles.
6053 </para>
6054 </listitem>
6056 <listitem>
6057 <para>
6058 Add <link linkend="SQL-GRANT"><command>GRANT ON SEQUENCE</></link>
6059 syntax (Bruce)
6060 </para>
6062 <para>
6063 This was added for setting sequence-specific permissions.
6064 <literal>GRANT ON TABLE</> for sequences is still supported
6065 for backward compatibility.
6066 </para>
6067 </listitem>
6069 <listitem>
6070 <para>
6071 Add <link linkend="SQL-GRANT"><literal>USAGE</></link>
6072 permission for sequences that allows only <function>currval()</>
6073 and <function>nextval()</>, not <function>setval()</>
6074 (Bruce)
6075 </para>
6077 <para>
6078 <literal>USAGE</> permission allows more fine-grained
6079 control over sequence access. Granting <literal>USAGE</>
6080 allows users to increment
6081 a sequence, but prevents them from setting the sequence to
6082 an arbitrary value using <function>setval()</>.
6083 </para>
6084 </listitem>
6086 <listitem>
6087 <para>
6088 Add <link linkend="SQL-ALTERTABLE"><literal>ALTER TABLE
6089 [ NO ] INHERIT</></link> (Greg Stark)
6090 </para>
6092 <para>
6093 This allows inheritance to be adjusted dynamically, rather than
6094 just at table creation and destruction. This is very valuable
6095 when using inheritance to implement table partitioning.
6096 </para>
6097 </listitem>
6099 <listitem>
6100 <para>
6101 Allow <link linkend="SQL-COMMENT">comments</link> on global
6102 objects to be stored globally (Kris Jurka)
6103 </para>
6105 <para>
6106 Previously, comments attached to databases were stored in individual
6107 databases, making them ineffective, and there was no provision
6108 at all for comments on roles or tablespaces. This change adds a new
6109 shared catalog <link
6110 linkend="catalog-pg-shdescription"><structname>pg_shdescription</structname></link>
6111 and stores comments on databases, roles, and tablespaces therein.
6112 </para>
6113 </listitem>
6115 </itemizedlist>
6117 </sect3>
6119 <sect3>
6120 <title>Utility Command Changes</title>
6121 <itemizedlist>
6123 <listitem>
6124 <para>
6125 Add option to allow indexes to be created without blocking
6126 concurrent writes to the table (Greg Stark, Tom)
6127 </para>
6129 <para>
6130 The new syntax is <link linkend="SQL-CREATEINDEX"><command>CREATE
6131 INDEX CONCURRENTLY</></link>. The default behavior is
6132 still to block table modification while a index is being
6133 created.
6134 </para>
6135 </listitem>
6137 <listitem>
6138 <para>
6139 Provide <link linkend="functions-advisory-locks">advisory
6140 locking</link> functionality (Abhijit Menon-Sen, Tom)
6141 </para>
6143 <para>
6144 This is a new locking API designed to replace what used to be
6145 in /contrib/userlock. The userlock code is now on pgfoundry.
6146 </para>
6147 </listitem>
6149 <listitem>
6150 <para>
6151 Allow <link linkend="SQL-COPY"><command>COPY</></link> to
6152 dump a <command>SELECT</> query (Zoltan Boszormenyi, Karel
6153 Zak)
6154 </para>
6156 <para>
6157 This allows <command>COPY</> to dump arbitrary <acronym>SQL</>
6158 queries. The syntax is <literal>COPY (SELECT ...) TO</>.
6159 </para>
6160 </listitem>
6162 <listitem>
6163 <para>
6164 Make the <link linkend="SQL-COPY"><command>COPY</></link>
6165 command return a command tag that includes the number of
6166 rows copied (Volkan YAZICI)
6167 </para>
6168 </listitem>
6170 <listitem>
6171 <para>
6172 Allow <link linkend="SQL-VACUUM"><command>VACUUM</></link>
6173 to expire rows without being affected by other concurrent
6174 <command>VACUUM</> operations (Hannu Krossing, Alvaro, Tom)
6175 </para>
6176 </listitem>
6178 <listitem>
6179 <para>
6180 Make <link linkend="APP-INITDB"><application>initdb</></link>
6181 detect the operating system locale and set the default
6182 <varname>DateStyle</> accordingly (Peter)
6183 </para>
6185 <para>
6186 This makes it more likely that the installed
6187 <filename>postgresql.conf</> <varname>DateStyle</> value will
6188 be as desired.
6189 </para>
6190 </listitem>
6192 <listitem>
6193 <para>
6194 Reduce number of progress messages displayed by <application>initdb</> (Tom)
6195 </para>
6196 </listitem>
6198 </itemizedlist>
6200 </sect3>
6202 <sect3>
6203 <title>Date/Time Changes</title>
6204 <itemizedlist>
6206 <listitem>
6207 <para>
6208 Allow full timezone names in <link
6209 linkend="datatype-datetime"><type>timestamp</></link> input values
6210 (Joachim Wieland)
6211 </para>
6213 <para>
6214 For example, <literal>'2006-05-24 21:11
6215 America/New_York'::timestamptz</>.
6216 </para>
6217 </listitem>
6219 <listitem>
6220 <para>
6221 Support configurable timezone abbreviations (Joachim Wieland)
6222 </para>
6224 <para>
6225 A desired set of timezone abbreviations can be chosen via the
6226 configuration parameter <link
6227 linkend="guc-timezone-abbreviations"><varname>timezone_abbreviations</></link>.
6228 </para>
6229 </listitem>
6231 <listitem>
6232 <para>
6233 Add <link
6234 linkend="view-pg-timezone-abbrevs"><varname>pg_timezone_abbrevs</></link>
6235 and <link
6236 linkend="view-pg-timezone-names"><varname>pg_timezone_names</></link>
6237 views to show supported timezones (Magnus Hagander)
6238 </para>
6239 </listitem>
6241 <listitem>
6242 <para>
6243 Add <link
6244 linkend="functions-datetime-table"><function>clock_timestamp()</></link>,
6245 <link
6246 linkend="functions-datetime-table"><function>statement_timestamp()</></link>,
6247 and <link
6248 linkend="functions-datetime-table"><function>transaction_timestamp()</></link>
6249 (Bruce)
6250 </para>
6252 <para>
6253 <function>clock_timestamp()</> is the current wall-clock time,
6254 <function>statement_timestamp()</> is the time the current
6255 statement arrived at the server, and
6256 <function>transaction_timestamp()</> is an alias for
6257 <function>now()</>.
6258 </para>
6259 </listitem>
6261 <listitem>
6262 <para>
6263 Allow <link
6264 linkend="functions-formatting"><function>to_char()</></link>
6265 to print localized month and day names (Euler Taveira de
6266 Oliveira)
6267 </para>
6268 </listitem>
6270 <listitem>
6271 <para>
6272 Allow <link
6273 linkend="functions-formatting"><function>to_char(time)</></link>
6274 and <link
6275 linkend="functions-formatting"><function>to_char(interval)</></link>
6276 to output <acronym>AM</>/<acronym>PM</> specifications
6277 (Bruce)
6278 </para>
6280 <para>
6281 Intervals and times are treated as 24-hour periods, e.g.
6282 <literal>25 hours</> is considered <acronym>AM</>.
6283 </para>
6284 </listitem>
6286 <listitem>
6287 <para>
6288 Add new function <link
6289 linkend="functions-datetime-table"><function>justify_interval()</></link>
6290 to adjust interval units (Mark Dilger)
6291 </para>
6292 </listitem>
6294 <listitem>
6295 <para>
6296 Allow timezone offsets up to 14:59 away from GMT
6297 </para>
6299 <para>
6300 Kiribati uses GMT+14, so we'd better accept that.
6301 </para>
6302 </listitem>
6304 <listitem>
6305 <para>
6306 Interval computation improvements (Michael Glaesemann, Bruce)
6307 </para>
6308 </listitem>
6310 </itemizedlist>
6312 </sect3>
6314 <sect3>
6315 <title>Other Data Type and Function Changes</title>
6316 <itemizedlist>
6318 <listitem>
6319 <para>
6320 Allow arrays to contain <literal>NULL</> elements (Tom)
6321 </para>
6322 </listitem>
6324 <listitem>
6325 <para>
6326 Allow assignment to array elements not contiguous with the existing
6327 entries (Tom)
6328 </para>
6330 <para>
6331 The intervening array positions will be filled with nulls.
6332 This is per SQL standard.
6333 </para>
6334 </listitem>
6336 <listitem>
6337 <para>
6338 New built-in <link linkend="functions-array">operators</link>
6339 for array-subset comparisons (<literal>@&gt;</>,
6340 <literal>&lt;@</>, <literal>&amp;&amp;</>) (Teodor, Tom)
6341 </para>
6343 <para>
6344 These operators can be indexed for many data types using
6345 <acronym>GiST</> or <acronym>GIN</> indexes.
6346 </para>
6347 </listitem>
6349 <listitem>
6350 <para>
6351 Add convenient arithmetic <link
6352 linkend="cidr-inet-operators-table">operations</link> on
6353 <type>INET</>/<type>CIDR</> values (Stephen R. van den
6354 Berg)
6355 </para>
6357 <para>
6358 The new operators are <literal>&amp;</> (and), <literal>|</>
6359 (or), <literal>~</> (not), <type>inet</> <literal>+</> <type>int8</>,
6360 <type>inet</> <literal>-</> <type>int8</>, and
6361 <type>inet</> <literal>-</> <type>inet</>.
6362 </para>
6363 </listitem>
6365 <listitem>
6366 <para>
6367 Add new <link
6368 linkend="functions-aggregate-statistics-table">aggregate functions</link>
6369 from SQL:2003 (Neil)
6370 </para>
6372 <para>
6373 The new functions are <function>var_pop()</>,
6374 <function>var_samp()</>, <function>stddev_pop()</>, and
6375 <function>stddev_samp()</>. <function>var_samp()</> and
6376 <function>stddev_samp()</> are merely renamings of the
6377 existing aggregates <function>variance()</> and
6378 <function>stddev()</>. The latter names remain available
6379 for backward compatibility.
6380 </para>
6381 </listitem>
6383 <listitem>
6384 <para>
6385 Add SQL:2003 statistical <link
6386 linkend="functions-aggregate-statistics-table">aggregates</link>
6387 (Sergey Koposov)
6388 </para>
6390 <para>
6391 New functions: <function>regr_intercept()</>,
6392 <function>regr_slope()</>, <function>regr_r2()</>,
6393 <function>corr()</>, <function>covar_samp()</>,
6394 <function>covar_pop()</>, <function>regr_avgx()</>,
6395 <function>regr_avgy()</>, <function>regr_sxy()</>,
6396 <function>regr_sxx()</>, <function>regr_syy()</>,
6397 <function>regr_count()</>.
6398 </para>
6399 </listitem>
6401 <listitem>
6402 <para>
6403 Allow <link linkend="SQL-CREATEDOMAIN">domains</link> to be
6404 based on other domains (Tom)
6405 </para>
6406 </listitem>
6408 <listitem>
6409 <para>
6410 Properly enforce domain <link
6411 linkend="ddl-constraints"><literal>CHECK</></link> constraints
6412 everywhere (Neil, Tom)
6413 </para>
6415 <para>
6416 For example, the result of a user-defined function that is
6417 declared to return a domain type is now checked against the
6418 domain's constraints. This closes a significant hole in the domain
6419 implementation.
6420 </para>
6421 </listitem>
6423 <listitem>
6424 <para>
6425 Fix problems with dumping renamed <link
6426 linkend="datatype-serial"><type>SERIAL</></link> columns
6427 (Tom)
6428 </para>
6430 <para>
6431 The fix is to dump a <type>SERIAL</> column by explicitly
6432 specifying its <literal>DEFAULT</> and sequence elements,
6433 and reconstructing the <type>SERIAL</> column on reload
6434 using a new <link linkend="SQL-ALTERSEQUENCE"><command>ALTER
6435 SEQUENCE OWNED BY</></link> command. This also allows
6436 dropping a <type>SERIAL</> column specification.
6437 </para>
6438 </listitem>
6440 <listitem>
6441 <para>
6442 Add a server-side sleep function <link
6443 linkend="functions-datetime-delay"><function>pg_sleep()</></link>
6444 (Joachim Wieland)
6445 </para>
6446 </listitem>
6448 <listitem>
6449 <para>
6450 Add all comparison operators for the <link
6451 linkend="datatype-oid"><type>tid</></link> (tuple id) data
6452 type (Mark Kirkwood, Greg Stark, Tom)
6453 </para>
6454 </listitem>
6456 </itemizedlist>
6458 </sect3>
6460 <sect3>
6461 <title>PL/PgSQL Server-Side Language Changes</title>
6462 <itemizedlist>
6464 <listitem>
6465 <para>
6466 Add <literal>TG_table_name</> and <literal>TG_table_schema</> to
6467 trigger parameters (Andrew)
6468 </para>
6470 <para>
6471 <literal>TG_relname</> is now deprecated. Comparable
6472 changes have been made in the trigger parameters for the other
6473 PLs as well.
6474 </para>
6475 </listitem>
6477 <listitem>
6478 <para>
6479 Allow <literal>FOR</> statements to return values to scalars
6480 as well as records and row types (Pavel Stehule)
6481 </para>
6482 </listitem>
6484 <listitem>
6485 <para>
6486 Add a <literal>BY</> clause to the <literal>FOR</> loop,
6487 to control the iteration increment (Jaime Casanova)
6488 </para>
6489 </listitem>
6491 <listitem>
6492 <para>
6493 Add <literal>STRICT</> to <link
6494 linkend="plpgsql-statements-sql-onerow"><command>SELECT
6495 INTO</></link> (Matt Miller)
6496 </para>
6498 <para>
6499 <literal>STRICT</> mode throws an exception if more or less
6500 than one row is returned by the <command>SELECT</>, for
6501 <productname>Oracle PL/SQL</> compatibility.
6502 </para>
6503 </listitem>
6505 </itemizedlist>
6507 </sect3>
6509 <sect3>
6510 <title>PL/Perl Server-Side Language Changes</title>
6511 <itemizedlist>
6513 <listitem>
6514 <para>
6515 Add <literal>table_name</> and <literal>table_schema</> to
6516 trigger parameters (Adam Sj&oslash;gren)
6517 </para>
6518 </listitem>
6520 <listitem>
6521 <para>
6522 Add prepared queries (Dmitry Karasik)
6523 </para>
6524 </listitem>
6526 <listitem>
6527 <para>
6528 Make <literal>$_TD</> trigger data a global variable (Andrew)
6529 </para>
6531 <para>
6532 Previously, it was lexical, which caused unexpected sharing
6533 violations.
6534 </para>
6535 </listitem>
6537 <listitem>
6538 <para>
6539 Run PL/Perl and PL/PerlU in separate interpreters, for security
6540 reasons (Andrew)
6541 </para>
6542 <para>
6543 In consequence, they can no longer share data nor loaded modules.
6544 Also, if Perl has not been compiled with the requisite flags to
6545 allow multiple interpreters, only one of these languages can be used
6546 in any given backend process.
6547 </para>
6548 </listitem>
6550 </itemizedlist>
6552 </sect3>
6554 <sect3>
6555 <title>PL/Python Server-Side Language Changes</title>
6556 <itemizedlist>
6558 <listitem>
6559 <para>
6560 Named parameters are passed as ordinary variables, as well as in the
6561 <literal>args[]</> array (Sven Suursoho)
6562 </para>
6563 </listitem>
6565 <listitem>
6566 <para>
6567 Add <literal>table_name</> and <literal>table_schema</> to
6568 trigger parameters (Andrew)
6569 </para>
6570 </listitem>
6572 <listitem>
6573 <para>
6574 Allow returning of composite types and result sets (Sven Suursoho)
6575 </para>
6576 </listitem>
6578 <listitem>
6579 <para>
6580 Return result-set as <literal>list</>, <literal>iterator</>,
6581 or <literal>generator </>(Sven Suursoho)
6582 </para>
6583 </listitem>
6585 <listitem>
6586 <para>
6587 Allow functions to return <literal>void</> (Neil)
6588 </para>
6589 </listitem>
6591 <listitem>
6592 <para>
6593 Python 2.5 is now supported (Tom)
6594 </para>
6595 </listitem>
6597 </itemizedlist>
6599 </sect3>
6601 <sect3>
6602 <title><link linkend="APP-PSQL"><application>psql</></link> Changes</title>
6603 <itemizedlist>
6605 <listitem>
6606 <para>
6607 Add new command <literal>\password</> for changing role
6608 password with client-side password encryption (Peter)
6609 </para>
6610 </listitem>
6612 <listitem>
6613 <para>
6614 Allow <literal>\c</> to connect to a new host and port
6615 number (David, Volkan YAZICI)
6616 </para>
6617 </listitem>
6619 <listitem>
6620 <para>
6621 Add tablespace display to <literal>\l+</> (Philip Yarra)
6622 </para>
6623 </listitem>
6625 <listitem>
6626 <para>
6627 Improve <literal>\df</> slash command to include the argument
6628 names and modes (<literal>OUT</> or <literal>INOUT</>) of
6629 the function (David Fetter)
6630 </para>
6631 </listitem>
6633 <listitem>
6634 <para>
6635 Support binary <command>COPY</> (Andreas Pflug)
6636 </para>
6637 </listitem>
6639 <listitem>
6640 <para>
6641 Add option to run the entire session in a single transaction
6642 (Simon)
6643 </para>
6645 <para>
6646 Use option <literal>-1</> or <literal>--single-transaction</>.
6647 </para>
6648 </listitem>
6650 <listitem>
6651 <para>
6652 Support for automatically retrieving <command>SELECT</>
6653 results in batches using a cursor (Chris Mair)
6654 </para>
6656 <para>
6657 This is enabled using <command>\set FETCH_COUNT
6658 <replaceable>n</></command>. This
6659 feature allows large result sets to be retrieved in
6660 <application>psql</> without attempting to buffer the entire
6661 result set in memory.
6662 </para>
6663 </listitem>
6665 <listitem>
6666 <para>
6667 Make multi-line values align in the proper column
6668 (Martijn van Oosterhout)
6669 </para>
6671 <para>
6672 Field values containing newlines are now displayed in a more
6673 readable fashion.
6674 </para>
6675 </listitem>
6677 <listitem>
6678 <para>
6679 Save multi-line statements as a single entry, rather than
6680 one line at a time (Sergey E. Koposov)
6681 </para>
6683 <para>
6684 This makes up-arrow recall of queries easier. (This is
6685 not available on Windows, because that platform uses the native
6686 command-line editing present in the operating system.)
6687 </para>
6688 </listitem>
6690 <listitem>
6691 <para>
6692 Make the line counter 64-bit so it can handle files with more
6693 than two billion lines (David Fetter)
6694 </para>
6695 </listitem>
6697 <listitem>
6698 <para>
6699 Report both the returned data and the command status tag
6700 for <command>INSERT</>/<command>UPDATE</>/<command>DELETE
6701 RETURNING</> (Tom)
6702 </para>
6703 </listitem>
6705 </itemizedlist>
6707 </sect3>
6709 <sect3>
6710 <title><link linkend="APP-PGDUMP"><application>pg_dump</></link> Changes</title>
6711 <itemizedlist>
6713 <listitem>
6714 <para>
6715 Allow complex selection of objects to be included or excluded
6716 by <application>pg_dump</> (Greg Sabino Mullane)
6717 </para>
6719 <para>
6720 <application>pg_dump</> now supports multiple <literal>-n</>
6721 (schema) and <literal>-t</> (table) options, and adds
6722 <literal>-N</> and <literal>-T</> options to exclude objects.
6723 Also, the arguments of these switches can now be wild-card expressions
6724 rather than single object names, for example
6725 <literal>-t 'foo*'</>, and a schema can be part of
6726 a <literal>-t</> or <literal>-T</> switch, for example
6727 <literal>-t schema1.table1</>.
6728 </para>
6729 </listitem>
6731 <listitem>
6732 <para>
6733 Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
6734 <literal>--no-data-for-failed-tables</> option to suppress
6735 loading data if table creation failed (i.e., the table already
6736 exists) (Martin Pitt)
6737 </para>
6738 </listitem>
6740 <listitem>
6741 <para>
6742 Add <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
6743 option to run the entire session in a single transaction
6744 (Simon)
6745 </para>
6747 <para>
6748 Use option <literal>-1</> or <literal>--single-transaction</>.
6749 </para>
6750 </listitem>
6752 </itemizedlist>
6754 </sect3>
6756 <sect3>
6757 <title><link linkend="libpq"><application>libpq</></link> Changes</title>
6758 <itemizedlist>
6760 <listitem>
6761 <para>
6762 Add <link
6763 linkend="libpq-misc"><function>PQencryptPassword()</></link>
6764 to encrypt passwords (Tom)
6765 </para>
6767 <para>
6768 This allows passwords to be sent pre-encrypted for commands
6769 like <link linkend="SQL-ALTERROLE"><command>ALTER ROLE ...
6770 PASSWORD</></link>.
6771 </para>
6772 </listitem>
6774 <listitem>
6775 <para>
6776 Add function <link
6777 linkend="libpq-threading"><function>PQisthreadsafe()</></link>
6778 (Bruce)
6779 </para>
6781 <para>
6782 This allows applications to query the thread-safety status
6783 of the library.
6784 </para>
6785 </listitem>
6787 <listitem>
6788 <para>
6789 Add <link
6790 linkend="libpq-exec-main"><function>PQdescribePrepared()</></link>,
6791 <link
6792 linkend="libpq-exec-main"><function>PQdescribePortal()</></link>,
6793 and related functions to return information about previously
6794 prepared statements and open cursors (Volkan YAZICI)
6795 </para>
6796 </listitem>
6798 <listitem>
6799 <para>
6800 Allow <link linkend="libpq-ldap"><acronym>LDAP</></link> lookups
6801 from <link
6802 linkend="libpq-pgservice"><filename>pg_service.conf</></link>
6803 (Laurenz Albe)
6804 </para>
6805 </listitem>
6807 <listitem>
6808 <para>
6809 Allow a hostname in <link
6810 linkend="libpq-pgpass"><filename>~/.pgpass</></link>
6811 to match the default socket directory (Bruce)
6812 </para>
6814 <para>
6815 A blank hostname continues to match any Unix-socket connection,
6816 but this addition allows entries that are specific to one of
6817 several postmasters on the machine.
6818 </para>
6819 </listitem>
6821 </itemizedlist>
6823 </sect3>
6825 <sect3>
6826 <title><link linkend="ecpg"><application>ecpg</></link> Changes</title>
6827 <itemizedlist>
6829 <listitem>
6830 <para>
6831 Allow <link linkend="SQL-SHOW"><command>SHOW</></link> to
6832 put its result into a variable (Joachim Wieland)
6833 </para>
6834 </listitem>
6836 <listitem>
6837 <para>
6838 Add <link linkend="SQL-COPY"><command>COPY TO STDOUT</></link>
6839 (Joachim Wieland)
6840 </para>
6841 </listitem>
6843 <listitem>
6844 <para>
6845 Add regression tests (Joachim Wieland, Michael)
6846 </para>
6847 </listitem>
6849 <listitem>
6850 <para>
6851 Major source code cleanups (Joachim Wieland, Michael)
6852 </para>
6853 </listitem>
6855 </itemizedlist>
6857 </sect3>
6859 <sect3>
6860 <title><application>Windows</> Port</title>
6861 <itemizedlist>
6863 <listitem>
6864 <para>
6865 Allow <acronym>MSVC</> to compile the <productname>PostgreSQL</>
6866 server (Magnus, Hiroshi Saito)
6867 </para>
6868 </listitem>
6870 <listitem>
6871 <para>
6872 Add <acronym>MSVC</> support for utility commands and <link
6873 linkend="APP-PGDUMP"><application>pg_dump</></link> (Hiroshi
6874 Saito)
6875 </para>
6876 </listitem>
6878 <listitem>
6879 <para>
6880 Add support for Windows code pages <literal>1253</>,
6881 <literal>1254</>, <literal>1255</>, and <literal>1257</>
6882 (Kris Jurka)
6883 </para>
6884 </listitem>
6886 <listitem>
6887 <para>
6888 Drop privileges on startup, so that the server can be started from
6889 an administrative account (Magnus)
6890 </para>
6891 </listitem>
6893 <listitem>
6894 <para>
6895 Stability fixes (Qingqing Zhou, Magnus)
6896 </para>
6897 </listitem>
6899 <listitem>
6900 <para>
6901 Add native semaphore implementation (Qingqing Zhou)
6902 </para>
6904 <para>
6905 The previous code mimicked SysV semaphores.
6906 </para>
6907 </listitem>
6909 </itemizedlist>
6911 </sect3>
6913 <sect3>
6914 <title>Source Code Changes</title>
6915 <itemizedlist>
6917 <listitem>
6918 <para>
6919 Add <link linkend="GIN"><acronym>GIN</></link> (Generalized
6920 Inverted iNdex) index access method (Teodor, Oleg)
6921 </para>
6922 </listitem>
6924 <listitem>
6925 <para>
6926 Remove R-tree indexing (Tom)
6927 </para>
6929 <para>
6930 Rtree has been re-implemented using <link
6931 linkend="GiST"><acronym>GiST</></link>. Among other
6932 differences, this means that rtree indexes now have support
6933 for crash recovery via write-ahead logging (WAL).
6934 </para>
6935 </listitem>
6937 <listitem>
6938 <para>
6939 Reduce libraries needlessly linked into the backend (Martijn
6940 van Oosterhout, Tom)
6941 </para>
6942 </listitem>
6944 <listitem>
6945 <para>
6946 Add a configure flag to allow libedit to be preferred over
6947 <acronym>GNU</> readline (Bruce)
6948 </para>
6950 <para>
6951 Use configure <link
6952 linkend="configure"><literal>--with-libedit-preferred</></link>.
6953 </para>
6954 </listitem>
6956 <listitem>
6957 <para>
6958 Allow installation into directories containing spaces
6959 (Peter)
6960 </para>
6961 </listitem>
6963 <listitem>
6964 <para>
6965 Improve ability to relocate installation directories (Tom)
6966 </para>
6967 </listitem>
6969 <listitem>
6970 <para>
6971 Add support for <productname>Solaris x86_64</> using the
6972 <productname>Solaris</> compiler (Pierre Girard, Theo
6973 Schlossnagle, Bruce)
6974 </para>
6975 </listitem>
6977 <listitem>
6978 <para>
6979 Add <application>DTrace</> support (Robert Lor)
6980 </para>
6981 </listitem>
6983 <listitem>
6984 <para>
6985 Add <literal>PG_VERSION_NUM</> for use by third-party
6986 applications wanting to test the backend version in C using &gt;
6987 and &lt; comparisons (Bruce)
6988 </para>
6989 </listitem>
6991 <listitem>
6992 <para>
6993 Add <literal>XLOG_BLCKSZ</> as independent from <literal>BLCKSZ</>
6994 (Mark Wong)
6995 </para>
6996 </listitem>
6998 <listitem>
6999 <para>
7000 Add <literal>LWLOCK_STATS</> define to report locking
7001 activity (Tom)
7002 </para>
7003 </listitem>
7005 <listitem>
7006 <para>
7007 Emit warnings for unknown <application>configure</> options
7008 (Martijn van Oosterhout)
7009 </para>
7010 </listitem>
7012 <listitem>
7013 <para>
7014 Add server support for <quote>plugin</> libraries
7015 that can be used for add-on tasks such as debugging and performance
7016 measurement (Korry Douglas)
7017 </para>
7019 <para>
7020 This consists of two features: a table of <quote>rendezvous
7021 variables</> that allows separately-loaded shared libraries to
7022 communicate, and a new configuration parameter <link
7023 linkend="guc-local-preload-libraries"><varname>local_preload_libraries</></link>
7024 that allows libraries to be loaded into specific sessions without
7025 explicit cooperation from the client application. This allows
7026 external add-ons to implement features such as a PL/PgSQL debugger.
7027 </para>
7028 </listitem>
7030 <listitem>
7031 <para>
7032 Rename existing configuration parameter
7033 <varname>preload_libraries</> to <link
7034 linkend="guc-shared-preload-libraries"><varname>shared_preload_libraries</></link>
7035 (Tom)
7036 </para>
7038 <para>
7039 This was done for clarity in comparison to
7040 <varname>local_preload_libraries</>.
7041 </para>
7042 </listitem>
7044 <listitem>
7045 <para>
7046 Add new configuration parameter <link
7047 linkend="guc-server-version-num"><varname>server_version_num</></link>
7048 (Greg Sabino Mullane)
7049 </para>
7051 <para>
7052 This is like <varname>server_version</varname>, but is an
7053 integer, e.g. <literal>80200</>. This allows applications to
7054 make version checks more easily.
7055 </para>
7056 </listitem>
7058 <listitem>
7059 <para>
7060 Add a configuration parameter <link
7061 linkend="guc-seq-page-cost"><varname>seq_page_cost</></link>
7062 (Tom)
7063 </para>
7064 </listitem>
7066 <listitem>
7067 <para>
7068 Re-implement the <link linkend="regress">regression test</link> script as a C program
7069 (Magnus, Tom)
7070 </para>
7071 </listitem>
7073 <listitem>
7074 <para>
7075 Allow loadable modules to allocate shared memory and
7076 lightweight locks (Marc Munro)
7077 </para>
7078 </listitem>
7080 <listitem>
7081 <para>
7082 Add automatic initialization and finalization of dynamically
7083 loaded libraries (Ralf Engelschall, Tom)
7084 </para>
7086 <para>
7087 New <link linkend="xfunc-c-dynload">functions</link>
7088 <function>_PG_init()</> and <function>_PG_fini()</> are
7089 called if the library defines such symbols. Hence we no
7090 longer need to specify an initialization function in
7091 <varname>shared_preload_libraries</>; we can assume that
7092 the library used the <function>_PG_init()</> convention
7093 instead.
7094 </para>
7095 </listitem>
7097 <listitem>
7098 <para>
7099 Add <link
7100 linkend="xfunc-c-dynload"><literal>PG_MODULE_MAGIC</></link>
7101 header block to all shared object files (Martijn van
7102 Oosterhout)
7103 </para>
7105 <para>
7106 The magic block prevents version mismatches between loadable object
7107 files and servers.
7108 </para>
7109 </listitem>
7111 <listitem>
7112 <para>
7113 Add shared library support for AIX (Laurenz Albe)
7114 </para>
7115 </listitem>
7117 <listitem>
7118 <para>
7119 New <link linkend="datatype-xml"><acronym>XML</></link>
7120 documentation section (Bruce)
7121 </para>
7122 </listitem>
7124 </itemizedlist>
7126 </sect3>
7128 <sect3>
7129 <title>Contrib Changes</title>
7130 <itemizedlist>
7132 <listitem>
7133 <para>
7134 Major tsearch2 improvements (Oleg, Teodor)
7135 </para>
7137 <itemizedlist>
7139 <listitem>
7140 <para>
7141 multibyte encoding support, including <acronym>UTF8</>
7142 </para>
7143 </listitem>
7144 <listitem>
7145 <para>
7146 query rewriting support
7147 </para>
7148 </listitem>
7149 <listitem>
7150 <para>
7151 improved ranking functions
7152 </para>
7153 </listitem>
7154 <listitem>
7155 <para>
7156 thesaurus dictionary support
7157 </para>
7158 </listitem>
7159 <listitem>
7160 <para>
7161 Ispell dictionaries now recognize <application>MySpell</>
7162 format, used by <application>OpenOffice</>
7163 </para>
7164 </listitem>
7165 <listitem>
7166 <para>
7167 <acronym>GIN</> support
7168 </para>
7169 </listitem>
7171 </itemizedlist>
7173 </listitem>
7175 <listitem>
7176 <para>
7177 Add adminpack module containing <application>Pgadmin</> administration
7178 functions (Dave)
7179 </para>
7181 <para>
7182 These functions provide additional file system access
7183 routines not present in the default <productname>PostgreSQL</>
7184 server.
7185 </para>
7186 </listitem>
7188 <listitem>
7189 <para>
7190 Add sslinfo module (Victor Wagner)
7191 </para>
7193 <para>
7194 Reports information about the current connection's <acronym>SSL</>
7195 certificate.
7196 </para>
7197 </listitem>
7199 <listitem>
7200 <para>
7201 Add pgrowlocks module (Tatsuo)
7202 </para>
7204 <para>
7205 This shows row locking information for a specified table.
7206 </para>
7207 </listitem>
7209 <listitem>
7210 <para>
7211 Add hstore module (Oleg, Teodor)
7212 </para>
7213 </listitem>
7215 <listitem>
7216 <para>
7217 Add isn module, replacing isbn_issn (Jeremy Kronuz)
7218 </para>
7220 <para>
7221 This new implementation supports <acronym>EAN13</>, <acronym>UPC</>,
7222 <acronym>ISBN</> (books), <acronym>ISMN</> (music), and
7223 <acronym>ISSN</> (serials).
7224 </para>
7225 </listitem>
7227 <listitem>
7228 <para>
7229 Add index information functions to pgstattuple (ITAGAKI Takahiro,
7230 Satoshi Nagayasu)
7231 </para>
7232 </listitem>
7234 <listitem>
7235 <para>
7236 Add pg_freespacemap module to display free space map information
7237 (Mark Kirkwood)
7238 </para>
7239 </listitem>
7241 <listitem>
7242 <para>
7243 pgcrypto now has all planned functionality (Marko Kreen)
7244 </para>
7245 <itemizedlist>
7246 <listitem>
7247 <para>
7248 Include iMath library in pgcrypto to have the public-key encryption
7249 functions always available.
7250 </para>
7251 </listitem>
7252 <listitem>
7253 <para>
7254 Add SHA224 algorithm that was missing in OpenBSD code.
7255 </para>
7256 </listitem>
7257 <listitem>
7258 <para>
7259 Activate builtin code for SHA224/256/384/512 hashes on older
7260 OpenSSL to have those algorithms always available.
7261 </para>
7262 </listitem>
7263 <listitem>
7264 <para>
7265 New function gen_random_bytes() that returns cryptographically strong
7266 randomness. Useful for generating encryption keys.
7267 </para>
7268 </listitem>
7269 <listitem>
7270 <para>
7271 Remove digest_exists(), hmac_exists() and cipher_exists() functions.
7272 </para>
7273 </listitem>
7274 </itemizedlist>
7275 </listitem>
7277 <listitem>
7278 <para>
7279 Improvements to cube module (Joshua Reich)
7280 </para>
7282 <para>
7283 New functions are <function>cube(float[])</>,
7284 <function>cube(float[], float[])</>, and
7285 <function>cube_subset(cube, int4[])</>.
7286 </para>
7287 </listitem>
7289 <listitem>
7290 <para>
7291 Add async query capability to dblink (Kai Londenberg,
7292 Joe Conway)
7293 </para>
7294 </listitem>
7296 <listitem>
7297 <para>
7298 New operators for array-subset comparisons (<literal>@&gt;</>,
7299 <literal>&lt;@</>, <literal>&amp;&amp;</>) (Tom)
7300 </para>
7302 <para>
7303 Various contrib packages already had these operators for their
7304 datatypes, but the naming wasn't consistent. We have now added
7305 consistently named array-subset comparison operators to the core code
7306 and all the contrib packages that have such functionality.
7307 (The old names remain available, but are deprecated.)
7308 </para>
7309 </listitem>
7311 <listitem>
7312 <para>
7313 Add uninstall scripts for all contrib packages that have install
7314 scripts (David, Josh Drake)
7315 </para>
7316 </listitem>
7318 </itemizedlist>
7320 </sect3>
7322 </sect2>
7323 </sect1>
7325 <sect1 id="release-8-1-12">
7326 <title>Release 8.1.12</title>
7328 <note>
7329 <title>Release date</title>
7330 <simpara>2008-06-09</simpara>
7331 </note>
7333 <para>
7334 This release contains a variety of fixes from 8.1.11.
7335 For information about new features in the 8.1 major release, see
7336 <xref linkend="release-8-1">.
7337 </para>
7339 <sect2>
7340 <title>Migration to Version 8.1.12</title>
7342 <para>
7343 A dump/restore is not required for those running 8.1.X.
7344 However, if you are upgrading from a version earlier than 8.1.2,
7345 see the release notes for 8.1.2.
7346 </para>
7348 </sect2>
7350 <sect2>
7351 <title>Changes</title>
7353 <itemizedlist>
7355 <listitem>
7356 <para>
7357 Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
7358 column is correctly checked to see if it's been initialized to all
7359 non-nulls (Brendan Jurd)
7360 </para>
7362 <para>
7363 Previous versions neglected to check this requirement at all.
7364 </para>
7365 </listitem>
7367 <listitem>
7368 <para>
7369 Fix possible <command>CREATE TABLE</> failure when inheriting the
7370 <quote>same</> constraint from multiple parent relations that
7371 inherited that constraint from a common ancestor (Tom)
7372 </para>
7373 </listitem>
7375 <listitem>
7376 <para>
7377 Fix conversions between ISO-8859-5 and other encodings to handle
7378 Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
7379 two dots) (Sergey Burladyan)
7380 </para>
7381 </listitem>
7383 <listitem>
7384 <para>
7385 Fix a few datatype input functions
7386 that were allowing unused bytes in their results to contain
7387 uninitialized, unpredictable values (Tom)
7388 </para>
7390 <para>
7391 This could lead to failures in which two apparently identical literal
7392 values were not seen as equal, resulting in the parser complaining
7393 about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
7394 expressions.
7395 </para>
7396 </listitem>
7398 <listitem>
7399 <para>
7400 Fix a corner case in regular-expression substring matching
7401 (<literal>substring(<replaceable>string</> from
7402 <replaceable>pattern</>)</literal>) (Tom)
7403 </para>
7405 <para>
7406 The problem occurs when there is a match to the pattern overall but
7407 the user has specified a parenthesized subexpression and that
7408 subexpression hasn't got a match. An example is
7409 <literal>substring('foo' from 'foo(bar)?')</>.
7410 This should return NULL, since <literal>(bar)</> isn't matched, but
7411 it was mistakenly returning the whole-pattern match instead (ie,
7412 <literal>foo</>).
7413 </para>
7414 </listitem>
7416 <listitem>
7417 <para>
7418 Update time zone data files to <application>tzdata</> release 2008c (for
7419 DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba,
7420 Argentina/San_Luis, and Chile)
7421 </para>
7422 </listitem>
7424 <listitem>
7425 <para>
7426 Fix incorrect result from <application>ecpg</>'s
7427 <function>PGTYPEStimestamp_sub()</> function (Michael)
7428 </para>
7429 </listitem>
7431 <listitem>
7432 <para>
7433 Fix core dump in <filename>contrib/xml2</>'s
7434 <function>xpath_table()</> function when the input query returns a
7435 NULL value (Tom)
7436 </para>
7437 </listitem>
7439 <listitem>
7440 <para>
7441 Fix <filename>contrib/xml2</>'s makefile to not override
7442 <literal>CFLAGS</> (Tom)
7443 </para>
7444 </listitem>
7446 <listitem>
7447 <para>
7448 Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
7449 4.3 (Tom)
7450 </para>
7452 <para>
7453 This problem affects <quote>old style</> (V0) C functions that
7454 return boolean. The fix is already in 8.3, but the need to
7455 back-patch it was not realized at the time.
7456 </para>
7457 </listitem>
7459 <listitem>
7460 <para>
7461 Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
7462 race condition (Tom)
7463 </para>
7465 <para>
7466 In rare cases a session that had just executed a
7467 <command>LISTEN</> might not get a notification, even though
7468 one would be expected because the concurrent transaction executing
7469 <command>NOTIFY</> was observed to commit later.
7470 </para>
7472 <para>
7473 A side effect of the fix is that a transaction that has executed
7474 a not-yet-committed <command>LISTEN</> command will not see any
7475 row in <structname>pg_listener</> for the <command>LISTEN</>,
7476 should it choose to look; formerly it would have. This behavior
7477 was never documented one way or the other, but it is possible that
7478 some applications depend on the old behavior.
7479 </para>
7480 </listitem>
7482 <listitem>
7483 <para>
7484 Disallow <command>LISTEN</> and <command>UNLISTEN</> within a
7485 prepared transaction (Tom)
7486 </para>
7488 <para>
7489 This was formerly allowed but trying to do it had various unpleasant
7490 consequences, notably that the originating backend could not exit
7491 as long as an <command>UNLISTEN</> remained uncommitted.
7492 </para>
7493 </listitem>
7495 <listitem>
7496 <para>
7497 Fix rare crash when an error occurs during a query using a hash index
7498 (Heikki)
7499 </para>
7500 </listitem>
7502 <listitem>
7503 <para>
7504 Fix input of datetime values for February 29 in years BC (Tom)
7505 </para>
7507 <para>
7508 The former coding was mistaken about which years were leap years.
7509 </para>
7510 </listitem>
7512 <listitem>
7513 <para>
7514 Fix <quote>unrecognized node type</> error in some variants of
7515 <command>ALTER OWNER</> (Tom)
7516 </para>
7517 </listitem>
7519 <listitem>
7520 <para>
7521 Fix <application>pg_ctl</> to correctly extract the postmaster's port
7522 number from command-line options (Itagaki Takahiro, Tom)
7523 </para>
7525 <para>
7526 Previously, <literal>pg_ctl start -w</> could try to contact the
7527 postmaster on the wrong port, leading to bogus reports of startup
7528 failure.
7529 </para>
7530 </listitem>
7532 <listitem>
7533 <para>
7534 Use <option>-fwrapv</> to defend against possible misoptimization
7535 in recent <application>gcc</> versions (Tom)
7536 </para>
7538 <para>
7539 This is known to be necessary when building <productname>PostgreSQL</>
7540 with <application>gcc</> 4.3 or later.
7541 </para>
7542 </listitem>
7544 <listitem>
7545 <para>
7546 Fix display of constant expressions in <literal>ORDER BY</>
7547 and <literal>GROUP BY</> (Tom)
7548 </para>
7550 <para>
7551 An explictly casted constant would be shown incorrectly. This could
7552 for example lead to corruption of a view definition during
7553 dump and reload.
7554 </para>
7555 </listitem>
7557 <listitem>
7558 <para>
7559 Fix <application>libpq</> to handle NOTICE messages correctly
7560 during COPY OUT (Tom)
7561 </para>
7563 <para>
7564 This failure has only been observed to occur when a user-defined
7565 datatype's output routine issues a NOTICE, but there is no
7566 guarantee it couldn't happen due to other causes.
7567 </para>
7568 </listitem>
7570 </itemizedlist>
7572 </sect2>
7573 </sect1>
7575 <sect1 id="release-8-1-11">
7576 <title>Release 8.1.11</title>
7578 <note>
7579 <title>Release date</title>
7580 <simpara>2008-01-07</simpara>
7581 </note>
7583 <para>
7584 This release contains a variety of fixes from 8.1.10,
7585 including fixes for significant security issues.
7586 For information about new features in the 8.1 major release, see
7587 <xref linkend="release-8-1">.
7588 </para>
7590 <para>
7591 This is the last 8.1.X release for which the <productname>PostgreSQL</>
7592 community will produce binary packages for <productname>Windows</>.
7593 Windows users are encouraged to move to 8.2.X or later,
7594 since there are Windows-specific fixes in 8.2.X that
7595 are impractical to back-port. 8.1.X will continue to
7596 be supported on other platforms.
7597 </para>
7599 <sect2>
7600 <title>Migration to Version 8.1.11</title>
7602 <para>
7603 A dump/restore is not required for those running 8.1.X.
7604 However, if you are upgrading from a version earlier than 8.1.2,
7605 see the release notes for 8.1.2.
7606 </para>
7608 </sect2>
7610 <sect2>
7611 <title>Changes</title>
7613 <itemizedlist>
7615 <listitem>
7616 <para>
7617 Prevent functions in indexes from executing with the privileges of
7618 the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
7619 </para>
7621 <para>
7622 Functions used in index expressions and partial-index
7623 predicates are evaluated whenever a new table entry is made. It has
7624 long been understood that this poses a risk of trojan-horse code
7625 execution if one modifies a table owned by an untrustworthy user.
7626 (Note that triggers, defaults, check constraints, etc. pose the
7627 same type of risk.) But functions in indexes pose extra danger
7628 because they will be executed by routine maintenance operations
7629 such as <command>VACUUM FULL</>, which are commonly performed
7630 automatically under a superuser account. For example, a nefarious user
7631 can execute code with superuser privileges by setting up a
7632 trojan-horse index definition and waiting for the next routine vacuum.
7633 The fix arranges for standard maintenance operations
7634 (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
7635 and <command>CLUSTER</>) to execute as the table owner rather than
7636 the calling user, using the same privilege-switching mechanism already
7637 used for <literal>SECURITY DEFINER</> functions. To prevent bypassing
7638 this security measure, execution of <command>SET SESSION
7639 AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
7640 <literal>SECURITY DEFINER</> context. (CVE-2007-6600)
7641 </para>
7642 </listitem>
7644 <listitem>
7645 <para>
7646 Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
7647 </para>
7649 <para>
7650 Suitably crafted regular-expression patterns could cause crashes,
7651 infinite or near-infinite looping, and/or massive memory consumption,
7652 all of which pose denial-of-service hazards for applications that
7653 accept regex search patterns from untrustworthy sources.
7654 (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
7655 </para>
7656 </listitem>
7658 <listitem>
7659 <para>
7660 Require non-superusers who use <filename>/contrib/dblink</> to use only
7661 password authentication, as a security measure (Joe)
7662 </para>
7664 <para>
7665 The fix that appeared for this in 8.1.10 was incomplete, as it plugged
7666 the hole for only some <filename>dblink</> functions. (CVE-2007-6601,
7667 CVE-2007-3278)
7668 </para>
7669 </listitem>
7671 <listitem>
7672 <para>
7673 Update time zone data files to <application>tzdata</> release 2007k
7674 (in particular, recent Argentina changes) (Tom)
7675 </para>
7676 </listitem>
7678 <listitem>
7679 <para>
7680 Improve planner's handling of LIKE/regex estimation in non-C locales
7681 (Tom)
7682 </para>
7683 </listitem>
7685 <listitem>
7686 <para>
7687 Fix planner failure in some cases of <literal>WHERE false AND var IN
7688 (SELECT ...)</> (Tom)
7689 </para>
7690 </listitem>
7692 <listitem>
7693 <para>
7694 Preserve the tablespace of indexes that are
7695 rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</> (Tom)
7696 </para>
7697 </listitem>
7699 <listitem>
7700 <para>
7701 Make archive recovery always start a new WAL timeline, rather than only
7702 when a recovery stop time was used (Simon)
7703 </para>
7705 <para>
7706 This avoids a corner-case risk of trying to overwrite an existing
7707 archived copy of the last WAL segment, and seems simpler and cleaner
7708 than the original definition.
7709 </para>
7710 </listitem>
7712 <listitem>
7713 <para>
7714 Make <command>VACUUM</> not use all of <varname>maintenance_work_mem</>
7715 when the table is too small for it to be useful (Alvaro)
7716 </para>
7717 </listitem>
7719 <listitem>
7720 <para>
7721 Fix potential crash in <function>translate()</> when using a multibyte
7722 database encoding (Tom)
7723 </para>
7724 </listitem>
7726 <listitem>
7727 <para>
7728 Fix overflow in <literal>extract(epoch from interval)</> for intervals
7729 exceeding 68 years (Tom)
7730 </para>
7731 </listitem>
7733 <listitem>
7734 <para>
7735 Fix PL/Perl to not fail when a UTF-8 regular expression is used
7736 in a trusted function (Andrew)
7737 </para>
7738 </listitem>
7740 <listitem>
7741 <para>
7742 Fix PL/Perl to cope when platform's Perl defines type <literal>bool</>
7743 as <literal>int</> rather than <literal>char</> (Tom)
7744 </para>
7746 <para>
7747 While this could theoretically happen anywhere, no standard build of
7748 Perl did things this way ... until <productname>Mac OS X</> 10.5.
7749 </para>
7750 </listitem>
7752 <listitem>
7753 <para>
7754 Fix PL/Python to not crash on long exception messages (Alvaro)
7755 </para>
7756 </listitem>
7758 <listitem>
7759 <para>
7760 Fix <application>pg_dump</> to correctly handle inheritance child tables
7761 that have default expressions different from their parent's (Tom)
7762 </para>
7763 </listitem>
7765 <listitem>
7766 <para>
7767 Fix <application>libpq</> crash when <varname>PGPASSFILE</> refers
7768 to a file that is not a plain file (Martin Pitt)
7769 </para>
7770 </listitem>
7772 <listitem>
7773 <para>
7774 <application>ecpg</> parser fixes (Michael)
7775 </para>
7776 </listitem>
7778 <listitem>
7779 <para>
7780 Make <filename>contrib/pgcrypto</> defend against
7781 <application>OpenSSL</> libraries that fail on keys longer than 128
7782 bits; which is the case at least on some Solaris versions (Marko Kreen)
7783 </para>
7784 </listitem>
7786 <listitem>
7787 <para>
7788 Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
7789 NULL rowid as a category in its own right, rather than crashing (Joe)
7790 </para>
7791 </listitem>
7793 <listitem>
7794 <para>
7795 Fix <type>tsvector</> and <type>tsquery</> output routines to
7796 escape backslashes correctly (Teodor, Bruce)
7797 </para>
7798 </listitem>
7800 <listitem>
7801 <para>
7802 Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
7803 </para>
7804 </listitem>
7806 <listitem>
7807 <para>
7808 Require a specific version of <productname>Autoconf</> to be used
7809 when re-generating the <command>configure</> script (Peter)
7810 </para>
7812 <para>
7813 This affects developers and packagers only. The change was made
7814 to prevent accidental use of untested combinations of
7815 <productname>Autoconf</> and <productname>PostgreSQL</> versions.
7816 You can remove the version check if you really want to use a
7817 different <productname>Autoconf</> version, but it's
7818 your responsibility whether the result works or not.
7819 </para>
7820 </listitem>
7822 </itemizedlist>
7824 </sect2>
7825 </sect1>
7827 <sect1 id="release-8-1-10">
7828 <title>Release 8.1.10</title>
7830 <note>
7831 <title>Release date</title>
7832 <simpara>2007-09-17</simpara>
7833 </note>
7835 <para>
7836 This release contains a variety of fixes from 8.1.9.
7837 For information about new features in the 8.1 major release, see
7838 <xref linkend="release-8-1">.
7839 </para>
7841 <sect2>
7842 <title>Migration to Version 8.1.10</title>
7844 <para>
7845 A dump/restore is not required for those running 8.1.X.
7846 However, if you are upgrading from a version earlier than 8.1.2,
7847 see the release notes for 8.1.2.
7848 </para>
7850 </sect2>
7852 <sect2>
7853 <title>Changes</title>
7855 <itemizedlist>
7857 <listitem>
7858 <para>
7859 Prevent index corruption when a transaction inserts rows and
7860 then aborts close to the end of a concurrent <command>VACUUM</>
7861 on the same table (Tom)
7862 </para>
7863 </listitem>
7865 <listitem>
7866 <para>
7867 Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
7868 </para>
7869 </listitem>
7871 <listitem>
7872 <para>
7873 Allow the <type>interval</> data type to accept input consisting only of
7874 milliseconds or microseconds (Neil)
7875 </para>
7876 </listitem>
7878 <listitem>
7879 <para>
7880 Speed up rtree index insertion (Teodor)
7881 </para>
7882 </listitem>
7884 <listitem>
7885 <para>
7886 Fix excessive logging of <acronym>SSL</> error messages (Tom)
7887 </para>
7888 </listitem>
7890 <listitem>
7891 <para>
7892 Fix logging so that log messages are never interleaved when using
7893 the syslogger process (Andrew)
7894 </para>
7895 </listitem>
7897 <listitem>
7898 <para>
7899 Fix crash when <varname>log_min_error_statement</> logging runs out
7900 of memory (Tom)
7901 </para>
7902 </listitem>
7904 <listitem>
7905 <para>
7906 Fix incorrect handling of some foreign-key corner cases (Tom)
7907 </para>
7908 </listitem>
7910 <listitem>
7911 <para>
7912 Prevent <command>REINDEX</> and <command>CLUSTER</> from failing
7913 due to attempting to process temporary tables of other sessions (Alvaro)
7914 </para>
7915 </listitem>
7917 <listitem>
7918 <para>
7919 Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
7920 </para>
7921 </listitem>
7923 <listitem>
7924 <para>
7925 Windows socket improvements (Magnus)
7926 </para>
7927 </listitem>
7929 <listitem>
7930 <para>
7931 Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
7932 because of possible encoding mismatches (Tom)
7933 </para>
7934 </listitem>
7936 <listitem>
7937 <para>
7938 Require non-superusers who use <filename>/contrib/dblink</> to use only
7939 password authentication, as a security measure (Joe)
7940 </para>
7941 </listitem>
7943 </itemizedlist>
7945 </sect2>
7946 </sect1>
7948 <sect1 id="release-8-1-9">
7949 <title>Release 8.1.9</title>
7951 <note>
7952 <title>Release date</title>
7953 <simpara>2007-04-23</simpara>
7954 </note>
7956 <para>
7957 This release contains a variety of fixes from 8.1.8,
7958 including a security fix.
7959 For information about new features in the 8.1 major release, see
7960 <xref linkend="release-8-1">.
7961 </para>
7963 <sect2>
7964 <title>Migration to Version 8.1.9</title>
7966 <para>
7967 A dump/restore is not required for those running 8.1.X.
7968 However, if you are upgrading from a version earlier than 8.1.2,
7969 see the release notes for 8.1.2.
7970 </para>
7972 </sect2>
7974 <sect2>
7975 <title>Changes</title>
7977 <itemizedlist>
7979 <listitem>
7980 <para>
7981 Support explicit placement of the temporary-table schema within
7982 <varname>search_path</>, and disable searching it for functions
7983 and operators (Tom)
7984 </para>
7985 <para>
7986 This is needed to allow a security-definer function to set a
7987 truly secure value of <varname>search_path</>. Without it,
7988 an unprivileged SQL user can use temporary objects to execute code
7989 with the privileges of the security-definer function (CVE-2007-2138).
7990 See <command>CREATE FUNCTION</> for more information.
7991 </para>
7992 </listitem>
7994 <listitem>
7995 <para>
7996 <filename>/contrib/tsearch2</> crash fixes (Teodor)
7997 </para>
7998 </listitem>
8000 <listitem>
8001 <para>
8002 Require <command>COMMIT PREPARED</> to be executed in the same
8003 database as the transaction was prepared in (Heikki)
8004 </para>
8005 </listitem>
8007 <listitem>
8008 <para>
8009 Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
8010 <command>UPDATE</> chains (Tom, Pavan Deolasee)
8011 </para>
8012 </listitem>
8014 <listitem>
8015 <para>
8016 Planner fixes, including improving outer join and bitmap scan
8017 selection logic (Tom)
8018 </para>
8019 </listitem>
8021 <listitem>
8022 <para>
8023 Fix PANIC during enlargement of a hash index (bug introduced in 8.1.6)
8024 (Tom)
8025 </para>
8026 </listitem>
8028 <listitem>
8029 <para>
8030 Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
8031 </para>
8032 </listitem>
8034 </itemizedlist>
8036 </sect2>
8037 </sect1>
8039 <sect1 id="release-8-1-8">
8040 <title>Release 8.1.8</title>
8042 <note>
8043 <title>Release date</title>
8044 <simpara>2007-02-07</simpara>
8045 </note>
8047 <para>
8048 This release contains one fix from 8.1.7.
8049 For information about new features in the 8.1 major release, see
8050 <xref linkend="release-8-1">.
8051 </para>
8053 <sect2>
8054 <title>Migration to Version 8.1.8</title>
8056 <para>
8057 A dump/restore is not required for those running 8.1.X.
8058 However, if you are upgrading from a version earlier than 8.1.2,
8059 see the release notes for 8.1.2.
8060 </para>
8062 </sect2>
8064 <sect2>
8065 <title>Changes</title>
8067 <itemizedlist>
8069 <listitem>
8070 <para>
8071 Remove overly-restrictive check for type length in constraints and
8072 functional indexes(Tom)
8073 </para>
8074 </listitem>
8076 </itemizedlist>
8078 </sect2>
8079 </sect1>
8081 <sect1 id="release-8-1-7">
8082 <title>Release 8.1.7</title>
8084 <note>
8085 <title>Release date</title>
8086 <simpara>2007-02-05</simpara>
8087 </note>
8089 <para>
8090 This release contains a variety of fixes from 8.1.6, including
8091 a security fix.
8092 For information about new features in the 8.1 major release, see
8093 <xref linkend="release-8-1">.
8094 </para>
8096 <sect2>
8097 <title>Migration to Version 8.1.7</title>
8099 <para>
8100 A dump/restore is not required for those running 8.1.X.
8101 However, if you are upgrading from a version earlier than 8.1.2,
8102 see the release notes for 8.1.2.
8103 </para>
8105 </sect2>
8107 <sect2>
8108 <title>Changes</title>
8110 <itemizedlist>
8112 <listitem>
8113 <para>
8114 Remove security vulnerabilities that allowed connected users
8115 to read backend memory (Tom)
8116 </para>
8117 <para>
8118 The vulnerabilities involve suppressing the normal check that a SQL
8119 function returns the data type it's declared to, and changing the
8120 data type of a table column (CVE-2007-0555, CVE-2007-0556). These
8121 errors can easily be exploited to cause a backend crash, and in
8122 principle might be used to read database content that the user
8123 should not be able to access.
8124 </para>
8125 </listitem>
8127 <listitem>
8128 <para>
8129 Fix rare bug wherein btree index page splits could fail
8130 due to choosing an infeasible split point (Heikki Linnakangas)
8131 </para>
8132 </listitem>
8134 <listitem>
8135 <para>
8136 Improve <command>VACUUM</> performance for databases with many tables (Tom)
8137 </para>
8138 </listitem>
8140 <listitem>
8141 <para>
8142 Fix autovacuum to avoid leaving non-permanent transaction IDs in
8143 non-connectable databases (Alvaro)
8144 </para>
8146 <para>
8147 This bug affects the 8.1 branch only.
8148 </para>
8149 </listitem>
8151 <listitem>
8152 <para>
8153 Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
8154 </para>
8155 </listitem>
8157 <listitem>
8158 <para>
8159 Tighten security of multi-byte character processing for UTF8 sequences
8160 over three bytes long (Tom)
8161 </para>
8162 </listitem>
8164 <listitem>
8165 <para>
8166 Fix bogus <quote>permission denied</> failures occurring on Windows
8167 due to attempts to fsync already-deleted files (Magnus, Tom)
8168 </para>
8169 </listitem>
8171 <listitem>
8172 <para>
8173 Fix possible crashes when an already-in-use PL/pgSQL function is
8174 updated (Tom)
8175 </para>
8176 </listitem>
8178 </itemizedlist>
8180 </sect2>
8181 </sect1>
8183 <sect1 id="release-8-1-6">
8184 <title>Release 8.1.6</title>
8186 <note>
8187 <title>Release date</title>
8188 <simpara>2007-01-08</simpara>
8189 </note>
8191 <para>
8192 This release contains a variety of fixes from 8.1.5.
8193 For information about new features in the 8.1 major release, see
8194 <xref linkend="release-8-1">.
8195 </para>
8197 <sect2>
8198 <title>Migration to Version 8.1.6</title>
8200 <para>
8201 A dump/restore is not required for those running 8.1.X.
8202 However, if you are upgrading from a version earlier than 8.1.2,
8203 see the release notes for 8.1.2.
8204 </para>
8206 </sect2>
8208 <sect2>
8209 <title>Changes</title>
8211 <itemizedlist>
8213 <listitem>
8214 <para>
8215 Improve handling of <function>getaddrinfo()</> on AIX (Tom)
8216 </para>
8218 <para>
8219 This fixes a problem with starting the statistics collector,
8220 among other things.
8221 </para>
8222 </listitem>
8224 <listitem>
8225 <para>
8226 Fix <application>pg_restore</> to handle a tar-format backup
8227 that contains large objects (blobs) with comments (Tom)
8228 </para>
8229 </listitem>
8231 <listitem>
8232 <para>
8233 Fix <quote>failed to re-find parent key</> errors in
8234 <command>VACUUM</> (Tom)
8235 </para>
8236 </listitem>
8238 <listitem>
8239 <para>
8240 Clean out <filename>pg_internal.init</> cache files during server
8241 restart (Simon)
8242 </para>
8244 <para>
8245 This avoids a hazard that the cache files might contain stale
8246 data after PITR recovery.
8247 </para>
8248 </listitem>
8250 <listitem>
8251 <para>
8252 Fix race condition for truncation of a large relation across a
8253 gigabyte boundary by <command>VACUUM</> (Tom)
8254 </para>
8255 </listitem>
8257 <listitem>
8258 <para>
8259 Fix bug causing needless deadlock errors on row-level locks (Tom)
8260 </para>
8261 </listitem>
8263 <listitem>
8264 <para>
8265 Fix bugs affecting multi-gigabyte hash indexes (Tom)
8266 </para>
8267 </listitem>
8269 <listitem>
8270 <para>
8271 Fix possible deadlock in Windows signal handling (Teodor)
8272 </para>
8273 </listitem>
8275 <listitem>
8276 <para>
8277 Fix error when constructing an <literal>ARRAY[]</> made up of multiple
8278 empty elements (Tom)
8279 </para>
8280 </listitem>
8282 <listitem>
8283 <para>
8284 Fix ecpg memory leak during connection (Michael)
8285 </para>
8286 </listitem>
8288 <listitem>
8289 <para>
8290 Fix for Darwin (OS X) compilation (Tom)
8291 </para>
8292 </listitem>
8294 <listitem>
8295 <para>
8296 <function>to_number()</> and <function>to_char(numeric)</>
8297 are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
8298 new <application>initdb</> installs (Tom)
8299 </para>
8301 <para>
8302 This is because <varname>lc_numeric</> can potentially
8303 change the output of these functions.
8304 </para>
8305 </listitem>
8307 <listitem>
8308 <para>
8309 Improve index usage of regular expressions that use parentheses (Tom)
8310 </para>
8312 <para>
8313 This improves <application>psql</> <literal>\d</> performance also.
8314 </para>
8315 </listitem>
8317 <listitem>
8318 <para>
8319 Update timezone database
8320 </para>
8322 <para>
8323 This affects Australian and Canadian daylight-savings rules in
8324 particular.
8325 </para>
8326 </listitem>
8328 </itemizedlist>
8330 </sect2>
8331 </sect1>
8333 <sect1 id="release-8-1-5">
8334 <title>Release 8.1.5</title>
8336 <note>
8337 <title>Release date</title>
8338 <simpara>2006-10-16</simpara>
8339 </note>
8341 <para>
8342 This release contains a variety of fixes from 8.1.4.
8343 For information about new features in the 8.1 major release, see
8344 <xref linkend="release-8-1">.
8345 </para>
8347 <sect2>
8348 <title>Migration to Version 8.1.5</title>
8350 <para>
8351 A dump/restore is not required for those running 8.1.X.
8352 However, if you are upgrading from a version earlier than 8.1.2,
8353 see the release notes for 8.1.2.
8354 </para>
8356 </sect2>
8358 <sect2>
8359 <title>Changes</title>
8361 <itemizedlist>
8362 <listitem><para>Disallow aggregate functions in <command>UPDATE</>
8363 commands, except within sub-SELECTs (Tom)</para>
8364 <para>The behavior of such an aggregate was unpredictable, and in 8.1.X
8365 could cause a crash, so it has been disabled. The SQL standard does not allow
8366 this either.</para></listitem>
8367 <listitem><para>Fix core dump when an untyped literal is taken as
8368 ANYARRAY</para></listitem>
8369 <listitem><para>Fix core dump in duration logging for extended query protocol
8370 when a <command>COMMIT</> or <command>ROLLBACK</> is
8371 executed</para></listitem>
8372 <listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
8373 function returning multiple rows (Tom)</para></listitem>
8374 <listitem><para>Fix <command>ALTER TABLE ... TYPE</> to recheck
8375 <literal>NOT NULL</> for <literal>USING</> clause (Tom)</para></listitem>
8376 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
8377 matches for the separator string</para>
8378 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
8379 </para></listitem>
8380 <listitem><para>Fix <function>to_timestamp()</> for
8381 <literal>AM</>/<literal>PM</> formats (Bruce)</para></listitem>
8382 <listitem><para>Fix autovacuum's calculation that decides whether
8383 <command>ANALYZE</> is needed (Alvaro)</para></listitem>
8384 <listitem><para>Fix corner cases in pattern matching for
8385 <application>psql</>'s <literal>\d</> commands</para></listitem>
8386 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
8387 (Teodor)</para></listitem>
8388 <listitem><para>Numerous robustness fixes in <application>ecpg</> (Joachim
8389 Wieland)</para></listitem>
8390 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
8391 <listitem><para>Minor fixes in /contrib/dblink and /contrib/tsearch2</para>
8392 </listitem>
8393 <listitem><para>Efficiency improvements in hash tables and bitmap index scans
8394 (Tom)</para></listitem>
8395 <listitem><para>Fix instability of statistics collection on Windows (Tom, Andrew)</para></listitem>
8396 <listitem><para>Fix <varname>statement_timeout</> to use the proper
8397 units on Win32 (Bruce)</para>
8398 <para>In previous Win32 8.1.X versions, the delay was off by a factor of
8399 100.</para></listitem>
8400 <listitem><para>Fixes for <acronym>MSVC</> and <productname>Borland C++</>
8401 compilers (Hiroshi Saito)</para></listitem>
8402 <listitem><para>Fixes for <systemitem class="osname">AIX</> and
8403 <productname>Intel</> compilers (Tom)</para></listitem>
8404 <listitem><para>Fix rare bug in continuous archiving (Tom)</para></listitem>
8405 </itemizedlist>
8407 </sect2>
8408 </sect1>
8410 <sect1 id="release-8-1-4">
8411 <title>Release 8.1.4</title>
8413 <note>
8414 <title>Release date</title>
8415 <simpara>2006-05-23</simpara>
8416 </note>
8418 <para>
8419 This release contains a variety of fixes from 8.1.3,
8420 including patches for extremely serious security issues.
8421 For information about new features in the 8.1 major release, see
8422 <xref linkend="release-8-1">.
8423 </para>
8425 <sect2>
8426 <title>Migration to Version 8.1.4</title>
8428 <para>
8429 A dump/restore is not required for those running 8.1.X.
8430 However, if you are upgrading from a version earlier than 8.1.2,
8431 see the release notes for 8.1.2.
8432 </para>
8434 <para>
8435 Full security against the SQL-injection attacks described in
8436 CVE-2006-2313 and CVE-2006-2314 might require changes in application
8437 code. If you have applications that embed untrustworthy strings
8438 into SQL commands, you should examine them as soon as possible to
8439 ensure that they are using recommended escaping techniques. In
8440 most cases, applications should be using subroutines provided by
8441 libraries or drivers (such as <application>libpq</>'s
8442 <function>PQescapeStringConn()</>) to perform string escaping,
8443 rather than relying on <foreignphrase>ad hoc</> code to do it.
8444 </para>
8445 </sect2>
8447 <sect2>
8448 <title>Changes</title>
8450 <itemizedlist>
8451 <listitem><para>Change the server to reject invalidly-encoded multibyte
8452 characters in all cases (Tatsuo, Tom)</para>
8453 <para>While <productname>PostgreSQL</> has been moving in this direction for
8454 some time, the checks are now applied uniformly to all encodings and all
8455 textual input, and are now always errors not merely warnings. This change
8456 defends against SQL-injection attacks of the type described in CVE-2006-2313.
8457 </para></listitem>
8459 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
8460 <para>As a server-side defense against SQL-injection attacks of the type
8461 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
8462 <literal>\'</> as a representation of ASCII single quote in SQL string
8463 literals. By default, <literal>\'</> is rejected only when
8464 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
8465 GB18030, or UHC), which is the scenario in which SQL injection is possible.
8466 A new configuration parameter <varname>backslash_quote</> is available to
8467 adjust this behavior when needed. Note that full security against
8468 CVE-2006-2314 might require client-side changes; the purpose of
8469 <varname>backslash_quote</> is in part to make it obvious that insecure
8470 clients are insecure.
8471 </para></listitem>
8473 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
8474 aware of encoding considerations and
8475 <varname>standard_conforming_strings</></para>
8476 <para>This fixes <application>libpq</>-using applications for the security
8477 issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
8478 them against the planned changeover to SQL-standard string literal syntax.
8479 Applications that use multiple <productname>PostgreSQL</> connections
8480 concurrently should migrate to <function>PQescapeStringConn()</> and
8481 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
8482 for the settings in use in each database connection. Applications that
8483 do string escaping <quote>by hand</> should be modified to rely on library
8484 routines instead.
8485 </para></listitem>
8487 <listitem><para>Fix weak key selection in pgcrypto (Marko Kreen)</para>
8488 <para>Errors in fortuna PRNG reseeding logic could cause a predictable
8489 session key to be selected by <function>pgp_sym_encrypt()</> in some cases.
8490 This only affects non-OpenSSL-using builds.
8491 </para></listitem>
8493 <listitem><para>Fix some incorrect encoding conversion functions</para>
8494 <para><function>win1251_to_iso</>, <function>win866_to_iso</>,
8495 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
8496 <function>mic_to_euc_tw</> were all broken to varying
8497 extents.
8498 </para></listitem>
8500 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
8501 (Bruce, Jan)</para></listitem>
8503 <listitem><para>Make autovacuum visible in <structname>pg_stat_activity</>
8504 (Alvaro)</para></listitem>
8506 <listitem><para>Disable <literal>full_page_writes</> (Tom)</para>
8507 <para>In certain cases, having <literal>full_page_writes</> off would cause
8508 crash recovery to fail. A proper fix will appear in 8.2; for now it's just
8509 disabled.
8510 </para></listitem>
8512 <listitem><para>Various planner fixes, particularly for bitmap index scans and
8513 MIN/MAX optimization (Tom)</para></listitem>
8515 <listitem><para>Fix incorrect optimization in merge join (Tom)</para>
8516 <para>Outer joins could sometimes emit multiple copies of unmatched rows.
8517 </para></listitem>
8519 <listitem><para>Fix crash from using and modifying a plpgsql function in the
8520 same transaction</para></listitem>
8522 <listitem><para>Fix WAL replay for case where a B-Tree index has been
8523 truncated</para></listitem>
8525 <listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
8526 <literal>|</> (Tom)</para></listitem>
8528 <listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
8529 create tables in the default tablespace, not the base directory (Kris
8530 Jurka)</para></listitem>
8532 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
8533 Fuhr)</para></listitem>
8535 <listitem><para>Improve qsort performance (Dann Corbit)</para>
8536 <para>Currently this code is only used on Solaris.
8537 </para></listitem>
8539 <listitem><para>Fix for OS/X Bonjour on x86 systems (Ashley Clark)</para></listitem>
8541 <listitem><para>Fix various minor memory leaks</para></listitem>
8543 <listitem><para>Fix problem with password prompting on some Win32 systems
8544 (Robert Kinberg)</para></listitem>
8546 <listitem><para>Improve <application>pg_dump</>'s handling of default values
8547 for domains</para></listitem>
8549 <listitem><para>Fix <application>pg_dumpall</> to handle identically-named
8550 users and groups reasonably (only possible when dumping from a pre-8.1 server)
8551 (Tom)</para>
8552 <para>The user and group will be merged into a single role with
8553 <literal>LOGIN</> permission. Formerly the merged role wouldn't have
8554 <literal>LOGIN</> permission, making it unusable as a user.
8555 </para></listitem>
8557 <listitem><para>Fix <application>pg_restore</> <literal>-n</> to work as
8558 documented (Tom)</para></listitem>
8559 </itemizedlist>
8561 </sect2>
8562 </sect1>
8564 <sect1 id="release-8-1-3">
8565 <title>Release 8.1.3</title>
8567 <note>
8568 <title>Release date</title>
8569 <simpara>2006-02-14</simpara>
8570 </note>
8572 <para>
8573 This release contains a variety of fixes from 8.1.2,
8574 including one very serious security issue.
8575 For information about new features in the 8.1 major release, see
8576 <xref linkend="release-8-1">.
8577 </para>
8579 <sect2>
8580 <title>Migration to Version 8.1.3</title>
8582 <para>
8583 A dump/restore is not required for those running 8.1.X.
8584 However, if you are upgrading from a version earlier than 8.1.2,
8585 see the release notes for 8.1.2.
8586 </para>
8587 </sect2>
8589 <sect2>
8590 <title>Changes</title>
8592 <itemizedlist>
8594 <listitem><para>Fix bug that allowed any logged-in user to <command>SET
8595 ROLE</> to any other database user id (CVE-2006-0553)</para>
8596 <para>Due to inadequate validity checking, a user could exploit the special
8597 case that <command>SET ROLE</> normally uses to restore the previous role
8598 setting after an error. This allowed ordinary users to acquire superuser
8599 status, for example.
8600 The escalation-of-privilege risk exists only in 8.1.0-8.1.2.
8601 However, in all releases back to 7.3 there is a related bug in <command>SET
8602 SESSION AUTHORIZATION</> that allows unprivileged users to crash the server,
8603 if it has been compiled with Asserts enabled (which is not the default).
8604 Thanks to Akio Ishida for reporting this problem.
8605 </para></listitem>
8607 <listitem><para>Fix bug with row visibility logic in self-inserted
8608 rows (Tom)</para>
8609 <para>Under rare circumstances a row inserted by the current command
8610 could be seen as already valid, when it should not be. Repairs bug
8611 created in 8.0.4, 7.4.9, and 7.3.11 releases.
8612 </para></listitem>
8614 <listitem><para>Fix race condition that could lead to <quote>file already
8615 exists</> errors during pg_clog and pg_subtrans file creation
8616 (Tom)</para></listitem>
8618 <listitem><para>Fix cases that could lead to crashes if a cache-invalidation
8619 message arrives at just the wrong time (Tom)</para></listitem>
8621 <listitem><para>Properly check <literal>DOMAIN</> constraints for
8622 <literal>UNKNOWN</> parameters in prepared statements
8623 (Neil)</para></listitem>
8625 <listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
8626 <literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
8627 constraints in the proper order (Nakano Yoshihisa)</para></listitem>
8629 <listitem><para>Fixes to allow restoring dumps that have cross-schema
8630 references to custom operators or operator classes (Tom)</para></listitem>
8632 <listitem><para>Allow <application>pg_restore</> to continue properly after a
8633 <command>COPY</> failure; formerly it tried to treat the remaining
8634 <command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
8636 <listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
8637 when the data directory is not specified (Magnus)</para></listitem>
8639 <listitem><para>Fix <application>libpq</> <function>PQprint</> HTML tags
8640 (Christoph Zwerschke)</para></listitem>
8642 <listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
8643 (Neil)</para></listitem>
8645 <listitem><para>Allow <literal>SETOF</> and <literal>%TYPE</> to be used
8646 together in function result type declarations</para></listitem>
8648 <listitem><para>Recover properly if error occurs during argument passing
8649 in <application>PL/python</> (Neil)</para></listitem>
8651 <listitem><para>Fix memory leak in <function>plperl_return_next</>
8652 (Neil)</para></listitem>
8654 <listitem><para>Fix <application>PL/perl</>'s handling of locales on
8655 Win32 to match the backend (Andrew)</para></listitem>
8657 <listitem><para>Various optimizer fixes (Tom)</para></listitem>
8659 <listitem><para>Fix crash when <literal>log_min_messages</> is set to
8660 <literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
8661 (Bruce)</para></listitem>
8663 <listitem><para>Fix <application>pgxs</> <literal>-L</> library path
8664 specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
8666 <listitem><para>Check that SID is enabled while checking for Win32 admin
8667 privileges (Magnus)</para></listitem>
8669 <listitem><para>Properly reject out-of-range date inputs (Kris
8670 Jurka)</para></listitem>
8672 <listitem><para>Portability fix for testing presence of <function>finite</>
8673 and <function>isinf</> during configure (Tom)</para></listitem>
8675 <listitem><para>Improve speed of <command>COPY IN</> via libpq, by
8676 avoiding a kernel call per data line (Alon Goldshuv)</para></listitem>
8678 <listitem><para>Improve speed of <filename>/contrib/tsearch2</> index
8679 creation (Tom)</para></listitem>
8681 </itemizedlist>
8683 </sect2>
8684 </sect1>
8686 <sect1 id="release-8-1-2">
8687 <title>Release 8.1.2</title>
8689 <note>
8690 <title>Release date</title>
8691 <simpara>2006-01-09</simpara>
8692 </note>
8694 <para>
8695 This release contains a variety of fixes from 8.1.1.
8696 For information about new features in the 8.1 major release, see
8697 <xref linkend="release-8-1">.
8698 </para>
8700 <sect2>
8701 <title>Migration to Version 8.1.2</title>
8703 <para>
8704 A dump/restore is not required for those running 8.1.X.
8705 However, you might need to <command>REINDEX</> indexes on textual
8706 columns after updating, if you are affected by the locale or
8707 <application>plperl</> issues described below.
8708 </para>
8709 </sect2>
8711 <sect2>
8712 <title>Changes</title>
8714 <itemizedlist>
8716 <listitem><para>Fix Windows code so that postmaster will continue rather
8717 than exit if there is no more room in ShmemBackendArray (Magnus)</para>
8718 <para>The previous behavior could lead to a denial-of-service situation if too
8719 many connection requests arrive close together. This applies
8720 <emphasis>only</> to the Windows port.</para></listitem>
8722 <listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
8723 to return an already-used page as new, potentially causing loss of
8724 recently-committed data (Tom)</para></listitem>
8726 <listitem><para>Fix for protocol-level Describe messages issued
8727 outside a transaction or in a failed transaction (Tom)</para></listitem>
8729 <listitem><para>Fix character string comparison for locales that consider
8730 different character combinations as equal, such as Hungarian (Tom)</para>
8731 <para>This might require <command>REINDEX</> to fix existing indexes on
8732 textual columns.</para></listitem>
8734 <listitem><para>Set locale environment variables during postmaster startup
8735 to ensure that <application>plperl</> won't change the locale later</para>
8736 <para>This fixes a problem that occurred if the <application>postmaster</> was
8737 started with environment variables specifying a different locale than what
8738 <application>initdb</> had been told. Under these conditions, any use of
8739 <application>plperl</> was likely to lead to corrupt indexes. You might need
8740 <command>REINDEX</> to fix existing indexes on
8741 textual columns if this has happened to you.</para></listitem>
8743 <listitem><para>Allow more flexible relocation of installation
8744 directories (Tom)</para>
8745 <para>Previous releases supported relocation only if all installation
8746 directory paths were the same except for the last component.</para></listitem>
8748 <listitem><para>Prevent crashes caused by the use of
8749 <literal>ISO-8859-5</> and <literal>ISO-8859-9</> encodings
8750 (Tatsuo)</para></listitem>
8752 <listitem><para>Fix longstanding bug in strpos() and regular expression
8753 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
8754 </para></listitem>
8756 <listitem><para>Fix bug where COPY CSV mode considered any
8757 <literal>\.</> to terminate the copy data</para> <para>The new code
8758 requires <literal>\.</> to appear alone on a line, as per
8759 documentation.</para></listitem>
8761 <listitem><para>Make COPY CSV mode quote a literal data value of
8762 <literal>\.</> to ensure it cannot be interpreted as the
8763 end-of-data marker (Bruce)</para></listitem>
8765 <listitem><para>Various fixes for functions returning <literal>RECORD</>s
8766 (Tom) </para></listitem>
8768 <listitem><para>Fix processing of <filename>postgresql.conf</> so a
8769 final line with no newline is processed properly (Tom)
8770 </para></listitem>
8772 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
8773 which caused it not to use all available salt space for MD5 and
8774 XDES algorithms (Marko Kreen, Solar Designer)</para>
8775 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
8777 <listitem><para>Fix autovacuum crash when processing expression indexes
8778 </para></listitem>
8780 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
8781 rather than crashing, when the number of columns specified is different from
8782 what's actually returned by the query (Joe)</para></listitem>
8784 </itemizedlist>
8786 </sect2>
8787 </sect1>
8789 <sect1 id="release-8-1-1">
8790 <title>Release 8.1.1</title>
8792 <note>
8793 <title>Release date</title>
8794 <simpara>2005-12-12</simpara>
8795 </note>
8797 <para>
8798 This release contains a variety of fixes from 8.1.0.
8799 For information about new features in the 8.1 major release, see
8800 <xref linkend="release-8-1">.
8801 </para>
8803 <sect2>
8804 <title>Migration to Version 8.1.1</title>
8806 <para>
8807 A dump/restore is not required for those running 8.1.X.
8808 </para>
8809 </sect2>
8811 <sect2>
8812 <title>Changes</title>
8814 <itemizedlist>
8815 <listitem><para>Fix incorrect optimizations of outer-join conditions
8816 (Tom)</para></listitem>
8818 <listitem><para>Fix problems with wrong reported column names in cases
8819 involving sub-selects flattened by the optimizer (Tom)</para></listitem>
8821 <listitem><para>Fix update failures in scenarios involving CHECK constraints,
8822 toasted columns, <emphasis>and</> indexes (Tom)</para></listitem>
8824 <listitem><para>Fix bgwriter problems after recovering from errors
8825 (Tom)</para>
8826 <para>
8827 The background writer was found to leak buffer pins after write errors.
8828 While not fatal in itself, this might lead to mysterious blockages of
8829 later VACUUM commands.
8830 </para>
8831 </listitem>
8833 <listitem><para>Prevent failure if client sends Bind protocol message
8834 when current transaction is already aborted</para></listitem>
8836 <listitem><para><filename>/contrib/tsearch2</> and <filename>/contrib/ltree</>
8837 fixes (Teodor)</para></listitem>
8839 <listitem><para>Fix problems with translated error messages in
8840 languages that require word reordering, such as Turkish; also problems with
8841 unexpected truncation of output strings and wrong display of the smallest
8842 possible bigint value (Andrew, Tom)</para>
8843 <para>
8844 These problems only appeared on platforms that were using our
8845 <filename>port/snprintf.c</> code, which includes BSD variants if
8846 <literal>--enable-nls</> was given, and perhaps others. In addition,
8847 a different form of the translated-error-message problem could appear
8848 on Windows depending on which version of <filename>libintl</> was used.
8849 </para></listitem>
8851 <listitem><para>Re-allow <literal>AM</>/<literal>PM</>, <literal>HH</>,
8852 <literal>HH12</>, and <literal>D</> format specifiers for
8853 <function>to_char(time)</> and <function>to_char(interval)</>.
8854 (<function>to_char(interval)</> should probably use
8855 <literal>HH24</>.) (Bruce)</para></listitem>
8857 <listitem><para>AIX, HPUX, and MSVC compile fixes (Tom, Hiroshi
8858 Saito)</para></listitem>
8860 <listitem><para>Optimizer improvements (Tom)</para></listitem>
8862 <listitem><para>Retry file reads and writes after Windows
8863 NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
8865 <listitem><para>Prevent <application>autovacuum</> from crashing during
8866 ANALYZE of expression index (Alvaro)</para></listitem>
8868 <listitem><para>Fix problems with ON COMMIT DELETE ROWS temp
8869 tables</para></listitem>
8871 <listitem><para>Fix problems when a trigger alters the output of a SELECT
8872 DISTINCT query</para></listitem>
8874 <listitem><para>Add 8.1.0 release note item on how to migrate invalid
8875 <literal>UTF-8</> byte sequences (Paul Lindner)</para></listitem>
8876 </itemizedlist>
8878 </sect2>
8879 </sect1>
8881 <sect1 id="release-8-1">
8882 <title>Release 8.1</title>
8884 <note>
8885 <title>Release date</title>
8886 <simpara>2005-11-08</simpara>
8887 </note>
8889 <sect2>
8890 <title>Overview</title>
8892 <para>
8893 Major changes in this release:
8894 </para>
8896 <variablelist>
8898 <varlistentry>
8899 <term>
8900 Improve concurrent access to the shared buffer cache (Tom)
8901 </term>
8903 <listitem>
8904 <para>
8905 Access to the shared buffer cache was identified as a
8906 significant scalability problem, particularly on multi-CPU
8907 systems. In this release, the way that locking is done in the
8908 buffer manager has been overhauled to reduce lock contention
8909 and improve scalability. The buffer manager has also been
8910 changed to use a <quote>clock sweep</quote> replacement
8911 policy.
8912 </para>
8913 </listitem>
8914 </varlistentry>
8916 <varlistentry>
8917 <term>
8918 Allow index scans to use an intermediate in-memory bitmap (Tom)
8919 </term>
8921 <listitem>
8922 <para>
8923 In previous releases, only a single index could be used to do
8924 lookups on a table. With this feature, if a query has
8925 <command>WHERE tab.col1 = 4 and tab.col2 = 9</>, and there is
8926 no multicolumn index on <literal>col1</> and <literal>col2</>,
8927 but there is an index on <literal>col1</> and another on
8928 <literal>col2</>, it is possible to search both indexes and
8929 combine the results in memory, then do heap fetches for only
8930 the rows matching both the <literal>col1</> and
8931 <literal>col2</> restrictions. This is very useful in
8932 environments that have a lot of unstructured queries where it
8933 is impossible to create indexes that match all possible access
8934 conditions. Bitmap scans are useful even with a single index,
8935 as they reduce the amount of random access needed; a bitmap
8936 index scan is efficient for retrieving fairly large fractions
8937 of the complete table, whereas plain index scans are not.
8938 </para>
8939 </listitem>
8940 </varlistentry>
8942 <varlistentry>
8943 <term>
8944 Add two-phase commit (Heikki Linnakangas, Alvaro, Tom)
8945 </term>
8947 <listitem>
8948 <para>
8949 Two-phase commit allows transactions to be "prepared" on several
8950 computers, and once all computers have successfully prepared
8951 their transactions (none failed), all transactions can be
8952 committed. Even if a machine crashes after a prepare, the
8953 prepared transaction can be committed after the machine is
8954 restarted. New syntax includes <command>PREPARE TRANSACTION</> and
8955 <command>COMMIT/ROLLBACK PREPARED</>. A new system view
8956 <literal>pg_prepared_xacts</> has also been added.
8957 </para>
8958 </listitem>
8959 </varlistentry>
8961 <varlistentry>
8962 <term>
8963 Create a new role system that replaces users and groups
8964 (Stephen Frost)
8965 </term>
8967 <listitem>
8968 <para>
8969 Roles are a combination of users and groups. Like users, they
8970 can have login capability, and like groups, a role can have
8971 other roles as members. Roles basically remove the distinction
8972 between users and groups. For example, a role can:
8973 </para>
8975 <itemizedlist>
8977 <listitem>
8978 <para>
8979 Have login capability (optionally)
8980 </para>
8981 </listitem>
8983 <listitem>
8984 <para>
8985 Own objects
8986 </para>
8987 </listitem>
8989 <listitem>
8990 <para>
8991 Hold access permissions for database objects
8992 </para>
8993 </listitem>
8995 <listitem>
8996 <para>
8997 Inherit permissions from other roles it is a member of
8998 </para>
8999 </listitem>
9001 </itemizedlist>
9002 <para>
9003 Once a user logs into a role, she obtains capabilities of
9004 the login role plus any inherited roles, and can use
9005 <command>SET ROLE</> to switch to other roles she is a member of.
9006 This feature is a generalization of the SQL standard's concept of
9007 roles.
9008 This change also replaces <structname>pg_shadow</> and
9009 <structname>pg_group</> by new role-capable catalogs
9010 <structname>pg_authid</> and <structname>pg_auth_members</>. The old
9011 tables are redefined as read-only views on the new role tables.
9012 </para>
9013 </listitem>
9014 </varlistentry>
9016 <varlistentry>
9017 <term>
9018 Automatically use indexes for <function>MIN()</> and
9019 <function>MAX()</> (Tom)
9020 </term>
9022 <listitem>
9023 <para>
9024 In previous releases, the only way to use an index for
9025 <function>MIN()</> or <function>MAX()</> was to rewrite the
9026 query as <command>SELECT col FROM tab ORDER BY col LIMIT 1</>.
9027 Index usage now happens automatically.
9028 </para>
9029 </listitem>
9030 </varlistentry>
9032 <varlistentry>
9033 <term>
9034 Move <filename>/contrib/pg_autovacuum</> into the main server
9035 (Alvaro)
9036 </term>
9038 <listitem>
9039 <para>
9040 Integrating autovacuum into the server allows it to be
9041 automatically started and stopped in sync with the database
9042 server, and allows autovacuum to be configured from
9043 <filename>postgresql.conf</>.
9044 </para>
9045 </listitem>
9046 </varlistentry>
9048 <varlistentry>
9049 <term>
9050 Add shared row level locks using <command>SELECT ... FOR SHARE</>
9051 (Alvaro)
9052 </term>
9054 <listitem>
9055 <para>
9056 While <productname>PostgreSQL</productname>'s MVCC locking
9057 allows <command>SELECT</> to never be blocked by writers and
9058 therefore does not need shared row locks for typical operations,
9059 shared locks are useful for applications that require shared row
9060 locking. In particular this reduces the locking requirements
9061 imposed by referential integrity checks.
9062 </para>
9063 </listitem>
9064 </varlistentry>
9066 <varlistentry>
9067 <term>
9068 Add dependencies on shared objects, specifically roles
9069 (Alvaro)
9070 </term>
9072 <listitem>
9073 <para>
9074 This extension of the dependency mechanism prevents roles from
9075 being dropped while there are still database objects they own.
9076 Formerly it was possible to accidentally <quote>orphan</> objects by
9077 deleting their owner. While this could be recovered from, it
9078 was messy and unpleasant.
9079 </para>
9080 </listitem>
9081 </varlistentry>
9083 <varlistentry>
9084 <term>
9085 Improve performance for partitioned tables (Simon)
9086 </term>
9088 <listitem>
9089 <para>
9090 The new <varname>constraint_exclusion</varname> configuration
9091 parameter avoids lookups on child tables where constraints indicate
9092 that no matching rows exist in the child table.
9093 </para>
9094 <para>
9095 This allows for a basic type of table partitioning. If child tables
9096 store separate key ranges and this is enforced using appropriate
9097 <command>CHECK</> constraints, the optimizer will skip child
9098 table accesses when the constraint guarantees no matching rows
9099 exist in the child table.
9100 </para>
9101 </listitem>
9102 </varlistentry>
9104 </variablelist>
9105 </sect2>
9107 <sect2>
9108 <title>Migration to Version 8.1</title>
9110 <para>
9111 A dump/restore using <application>pg_dump</application> is required
9112 for those wishing to migrate data from any previous release.
9113 </para>
9115 <para>
9116 The 8.0 release announced that the <function>to_char()</> function
9117 for intervals would be removed in 8.1. However, since no better API
9118 has been suggested, <function>to_char(interval)</> has been enhanced in
9119 8.1 and will remain in the server.
9120 </para>
9122 <para>
9123 Observe the following incompatibilities:
9124 </para>
9126 <itemizedlist>
9128 <listitem>
9129 <para>
9130 <varname>add_missing_from</> is now false by default (Neil)
9131 </para>
9132 <para>
9133 By default, we now generate an error if a table is used in a query
9134 without a <literal>FROM</> reference. The old behavior is still
9135 available, but the parameter must be set to 'true' to obtain it.
9136 </para>
9138 <para>
9139 It might be necessary to set <varname>add_missing_from</> to true
9140 in order to load an existing dump file, if the dump contains any
9141 views or rules created using the implicit-<literal>FROM</> syntax.
9142 This should be a one-time annoyance, because
9143 <productname>PostgreSQL</productname> 8.1 will convert
9144 such views and rules to standard explicit-<literal>FROM</> syntax.
9145 Subsequent dumps will therefore not have the problem.
9146 </para>
9147 </listitem>
9149 <listitem>
9150 <para>
9151 Cause input of a zero-length string (<literal>''</literal>) for
9152 <type>float4</type>/<type>float8</type>/<type>oid</type>
9153 to throw an error, rather than treating it as a zero (Neil)
9154 </para>
9155 <para>
9156 This change is consistent with the current handling of
9157 zero-length strings for integers. The schedule for this change
9158 was announced in 8.0.
9159 </para>
9160 </listitem>
9162 <listitem>
9163 <para>
9164 <varname>default_with_oids</> is now false by default (Neil)
9165 </para>
9166 <para>
9167 With this option set to false, user-created tables no longer
9168 have an OID column unless <command>WITH OIDS</> is specified in
9169 <command>CREATE TABLE</>. Though OIDs have existed in all
9170 releases of <productname>PostgreSQL</>, their use is limited
9171 because they are only four bytes long and the counter is shared
9172 across all installed databases. The preferred way of uniquely
9173 identifying rows is via sequences and the <type>SERIAL</> type,
9174 which have been supported since <productname>PostgreSQL</> 6.4.
9175 </para>
9176 </listitem>
9178 <listitem>
9179 <para>
9180 Add <literal>E''</> syntax so eventually ordinary strings can
9181 treat backslashes literally (Bruce)
9182 </para>
9183 <para>
9184 Currently <productname>PostgreSQL</productname> processes a
9185 backslash in a string literal as introducing a special escape sequence,
9186 e.g. <literal>\n</> or <literal>\010</>.
9187 While this allows easy entry of special values, it is
9188 nonstandard and makes porting of applications from other
9189 databases more difficult. For this reason, the
9190 <productname>PostgreSQL</productname> project is planning to
9191 remove the special meaning of backslashes in strings. For
9192 backward compatibility and for users who want special backslash
9193 processing, a new string syntax has been created. This new string
9194 syntax is formed by writing an <literal>E</> immediately preceding the
9195 single quote that starts the string, e.g. <literal>E'hi\n'</>. While
9196 this release does not change the handling of backslashes in strings, it
9197 does add new configuration parameters to help users migrate applications
9198 for future releases:
9199 </para>
9200 <itemizedlist>
9202 <listitem>
9203 <para>
9204 <varname>standard_conforming_strings</> &mdash; does this release
9205 treat backslashes literally in ordinary strings?
9206 </para>
9207 </listitem>
9209 <listitem>
9210 <para>
9211 <varname>escape_string_warning</> &mdash; warn about backslashes in
9212 ordinary (non-E) strings
9213 </para>
9214 </listitem>
9216 </itemizedlist>
9218 <para>
9219 The <varname>standard_conforming_strings</> value is read-only.
9220 Applications can retrieve the value to know how backslashes are
9221 processed. (Presence of the parameter can also be taken as an
9222 indication that <literal>E''</> string syntax is supported.)
9223 In a future release, <varname>standard_conforming_strings</>
9224 will be true, meaning backslashes will be treated literally in
9225 non-E strings. To prepare for this change, use <literal>E''</>
9226 strings in places that need special backslash processing, and
9227 turn on <varname>escape_string_warning</> to find additional
9228 strings that need to be converted to use <literal>E''</>.
9229 Also, use two single-quotes (<literal>''</>) to embed a literal
9230 single-quote in a string, rather than the
9231 <productname>PostgreSQL</productname>-supported syntax of
9232 backslash single-quote (<literal>\'</>). The former is
9233 standards-conforming and does not require the use of the
9234 <literal>E''</> string syntax. You can also use the
9235 <literal>$$</> string syntax, which does not treat backslashes
9236 specially.
9237 </para>
9238 </listitem>
9240 <listitem>
9241 <para>
9242 Make <command>REINDEX DATABASE</> reindex all indexes in the
9243 database (Tom)
9244 </para>
9245 <para>
9246 Formerly, <command>REINDEX DATABASE</> reindexed only
9247 system tables. This new behavior seems more intuitive. A new
9248 command <command>REINDEX SYSTEM</> provides the old functionality
9249 of reindexing just the system tables.
9250 </para>
9251 </listitem>
9253 <listitem>
9254 <para>
9255 Read-only large object descriptors now obey MVCC snapshot semantics
9256 </para>
9257 <para>
9258 When a large object is opened with <literal>INV_READ</> (and not
9259 <literal>INV_WRITE</>), the data read from the descriptor will now
9260 reflect a <quote>snapshot</> of the large object's state at the
9261 time of the transaction snapshot in use by the query that called
9262 <function>lo_open()</>. To obtain the old behavior of always
9263 returning the latest committed data, include <literal>INV_WRITE</>
9264 in the mode flags for <function>lo_open()</>.
9265 </para>
9266 </listitem>
9268 <listitem>
9269 <para>
9270 Add proper dependencies for arguments of sequence functions (Tom)
9271 </para>
9272 <para>
9273 In previous releases, sequence names passed to <function>nextval()</>,
9274 <function>currval()</>, and <function>setval()</> were stored as
9275 simple text strings, meaning that renaming or dropping a
9276 sequence used in a <literal>DEFAULT</> clause made the clause
9277 invalid. This release stores all newly-created sequence function
9278 arguments as internal OIDs, allowing them to track sequence
9279 renaming, and adding dependency information that prevents
9280 improper sequence removal. It also makes such <literal>DEFAULT</>
9281 clauses immune to schema renaming and search path changes.
9282 </para>
9283 <para>
9284 Some applications might rely on the old behavior of
9285 run-time lookup for sequence names. This can still be done by
9286 explicitly casting the argument to <type>text</>, for example
9287 <literal>nextval('myseq'::text)</>.
9288 </para>
9289 <para>
9290 Pre-8.1 database dumps loaded into 8.1 will use the old text-based
9291 representation and therefore will not have the features of
9292 OID-stored arguments. However, it is possible to update a
9293 database containing text-based <literal>DEFAULT</> clauses.
9294 First, save this query into a file, such as <filename>fixseq.sql</>:
9295 <programlisting>
9296 SELECT 'ALTER TABLE ' ||
9297 pg_catalog.quote_ident(n.nspname) || '.' ||
9298 pg_catalog.quote_ident(c.relname) ||
9299 ' ALTER COLUMN ' || pg_catalog.quote_ident(a.attname) ||
9300 ' SET DEFAULT ' ||
9301 regexp_replace(d.adsrc,
9302 $$val\(\(('[^']*')::text\)::regclass$$,
9303 $$val(\1$$,
9304 'g') ||
9306 FROM pg_namespace n, pg_class c, pg_attribute a, pg_attrdef d
9307 WHERE n.oid = c.relnamespace AND
9308 c.oid = a.attrelid AND
9309 a.attrelid = d.adrelid AND
9310 a.attnum = d.adnum AND
9311 d.adsrc ~ $$val\(\('[^']*'::text\)::regclass$$;
9312 </programlisting>
9313 Next, run the query against a database to find what
9314 adjustments are required, like this for database <literal>db1</>:
9315 <programlisting>
9316 psql -t -f fixseq.sql db1
9317 </programlisting>
9318 This will show the <command>ALTER TABLE</> commands needed to
9319 convert the database to the newer OID-based representation.
9320 If the commands look reasonable, run this to update the database:
9321 <programlisting>
9322 psql -t -f fixseq.sql db1 | psql -e db1
9323 </programlisting>
9324 This process must be repeated in each database to be updated.
9325 </para>
9326 </listitem>
9328 <listitem>
9329 <para>
9330 In <application>psql</application>, treat unquoted
9331 <literal>\{digit}+</> sequences as octal (Bruce)
9332 </para>
9333 <para>
9334 In previous releases, <literal>\{digit}+</> sequences were
9335 treated as decimal, and only <literal>\0{digit}+</> were treated
9336 as octal. This change was made for consistency.
9337 </para>
9338 </listitem>
9340 <listitem>
9341 <para>
9342 Remove grammar productions for prefix and postfix <literal>%</>
9343 and <literal>^</> operators
9344 (Tom)
9345 </para>
9346 <para>
9347 These have never been documented and complicated the use of the
9348 modulus operator (<literal>%</>) with negative numbers.
9349 </para>
9350 </listitem>
9352 <listitem>
9353 <para>
9354 Make <literal>&amp;&lt;</> and <literal>&amp;&gt;</> for polygons
9355 consistent with the box "over" operators (Tom)
9356 </para>
9357 </listitem>
9359 <listitem>
9360 <para>
9361 <command>CREATE LANGUAGE</> can ignore the provided arguments
9362 in favor of information from <structname>pg_pltemplate</>
9363 (Tom)
9364 </para>
9365 <para>
9366 A new system catalog <structname>pg_pltemplate</> has been defined
9367 to carry information about the preferred definitions of procedural
9368 languages (such as whether they have validator functions). When
9369 an entry exists in this catalog for the language being created,
9370 <command>CREATE LANGUAGE</> will ignore all its parameters except the
9371 language name and instead use the catalog information. This measure
9372 was taken because of increasing problems with obsolete language
9373 definitions being loaded by old dump files. As of 8.1,
9374 <application>pg_dump</> will dump procedural language definitions as
9375 just <command>CREATE LANGUAGE <replaceable>name</></command>, relying
9376 on a template entry to exist at load time. We expect this will be a
9377 more future-proof representation.
9378 </para>
9379 </listitem>
9381 <listitem>
9382 <para>
9383 Make <function>pg_cancel_backend(int)</function> return a
9384 <type>boolean</type> rather than an <type>integer</type> (Neil)
9385 </para>
9386 </listitem>
9388 <listitem>
9389 <para>
9390 Some users are having problems loading UTF-8 data into 8.1.X.
9391 This is because previous versions allowed invalid UTF-8 byte
9392 sequences to be entered into the database, and this release
9393 properly accepts only valid UTF-8 sequences. One way to correct a
9394 dumpfile is to run the command <command>iconv -c -f UTF-8 -t
9395 UTF-8 -o cleanfile.sql dumpfile.sql</>. The <literal>-c</> option
9396 removes invalid character sequences. A diff of the two files will
9397 show the sequences that are invalid. <command>iconv</> reads the
9398 entire input file into memory so it might be necessary to use
9399 <application>split</> to break up the dump into multiple smaller
9400 files for processing.
9401 </para>
9402 </listitem>
9404 </itemizedlist>
9405 </sect2>
9407 <sect2>
9408 <title>Additional Changes</title>
9410 <para>
9411 Below you will find a detailed account of the additional changes
9412 between <productname>PostgreSQL</productname> 8.1 and the
9413 previous major release.
9414 </para>
9416 <sect3>
9417 <title>Performance Improvements</title>
9418 <itemizedlist>
9420 <listitem>
9421 <para>
9422 Improve GiST and R-tree index performance (Neil)
9423 </para>
9424 </listitem>
9426 <listitem>
9427 <para>
9428 Improve the optimizer, including auto-resizing of hash joins
9429 (Tom)
9430 </para>
9431 </listitem>
9433 <listitem>
9434 <para>
9435 Overhaul internal API in several areas
9436 </para>
9437 </listitem>
9439 <listitem>
9440 <para>
9441 Change WAL record CRCs from 64-bit to 32-bit (Tom)
9442 </para>
9443 <para>
9444 We determined that the extra cost of computing 64-bit CRCs was
9445 significant, and the gain in reliability too marginal to justify it.
9446 </para>
9447 </listitem>
9449 <listitem>
9450 <para>
9451 Prevent writing large empty gaps in WAL pages (Tom)
9452 </para>
9453 </listitem>
9455 <listitem>
9456 <para>
9457 Improve spinlock behavior on SMP machines, particularly Opterons (Tom)
9458 </para>
9459 </listitem>
9461 <listitem>
9462 <para>
9463 Allow nonconsecutive index columns to be used in a multicolumn
9464 index (Tom)
9465 </para>
9466 <para>
9467 For example, this allows an index on columns a,b,c to be used in
9468 a query with <command>WHERE a = 4 and c = 10</>.
9469 </para>
9470 </listitem>
9472 <listitem>
9473 <para>
9474 Skip WAL logging for <command>CREATE TABLE AS</> /
9475 <command>SELECT INTO</> (Simon)
9476 </para>
9477 <para>
9478 Since a crash during <command>CREATE TABLE AS</> would cause the
9479 table to be dropped during recovery, there is no reason to WAL
9480 log as the table is loaded. (Logging still happens if WAL
9481 archiving is enabled, however.)
9482 </para>
9483 </listitem>
9485 <listitem>
9486 <para>
9487 Allow concurrent GiST index access (Teodor, Oleg)
9488 </para>
9489 </listitem>
9491 <listitem>
9492 <para>
9493 Add configuration parameter <varname>full_page_writes</> to
9494 control writing full pages to WAL (Bruce)
9495 </para>
9496 <para>
9497 To prevent partial disk writes from corrupting the database,
9498 <productname>PostgreSQL</productname> writes a complete copy of
9499 each database disk page to WAL the first time it is modified
9500 after a checkpoint. This option turns off that functionality for more
9501 speed. This is safe to use with battery-backed disk caches where
9502 partial page writes cannot happen.
9503 </para>
9504 </listitem>
9506 <listitem>
9507 <para>
9508 Use <literal>O_DIRECT</> if available when using
9509 <literal>O_SYNC</> for <varname>wal_sync_method</varname>
9510 (Itagaki Takahiro)
9511 </para>
9512 <para>
9513 <literal>O_DIRECT</> causes disk writes to bypass the kernel
9514 cache, and for WAL writes, this improves performance.
9515 </para>
9516 </listitem>
9518 <listitem>
9519 <para>
9520 Improve <command>COPY FROM</> performance (Alon Goldshuv)
9521 </para>
9522 <para>
9523 This was accomplished by reading <command>COPY</> input in
9524 larger chunks, rather than character by character.
9525 </para>
9526 </listitem>
9528 <listitem>
9529 <para>
9530 Improve the performance of <function>COUNT()</function>,
9531 <function>SUM</function>, <function>AVG()</function>,
9532 <function>STDDEV()</function>, and
9533 <function>VARIANCE()</function> (Neil, Tom)
9534 </para>
9535 </listitem>
9536 </itemizedlist>
9537 </sect3>
9539 <sect3>
9540 <title>Server Changes</title>
9541 <itemizedlist>
9543 <listitem>
9544 <para>
9545 Prevent problems due to transaction ID (XID) wraparound (Tom)
9546 </para>
9547 <para>
9548 The server will now warn when the transaction counter approaches
9549 the wraparound point. If the counter becomes too close to wraparound,
9550 the server will stop accepting queries. This ensures that data is
9551 not lost before needed vacuuming is performed.
9552 </para>
9553 </listitem>
9555 <listitem>
9556 <para>
9557 Fix problems with object IDs (OIDs) conflicting with existing system
9558 objects after the OID counter has wrapped around (Tom)
9559 </para>
9560 </listitem>
9562 <listitem>
9563 <para>
9564 Add warning about the need to increase
9565 <varname>max_fsm_relations</> and <varname>max_fsm_pages</>
9566 during <command>VACUUM</> (Ron Mayer)
9567 </para>
9568 </listitem>
9570 <listitem>
9571 <para>
9572 Add <varname>temp_buffers</> configuration parameter to allow
9573 users to determine the size of the local buffer area for
9574 temporary table access (Tom)
9575 </para>
9576 </listitem>
9578 <listitem>
9579 <para>
9580 Add session start time and client IP address to
9581 <literal>pg_stat_activity</> (Magnus)
9582 </para>
9583 </listitem>
9585 <listitem>
9586 <para>
9587 Adjust <literal>pg_stat</> views for bitmap scans (Tom)
9588 </para>
9589 <para>
9590 The meanings of some of the fields have changed slightly.
9591 </para>
9592 </listitem>
9594 <listitem>
9595 <para>
9596 Enhance <literal>pg_locks</> view (Tom)
9597 </para>
9598 </listitem>
9600 <listitem>
9601 <para>
9602 Log queries for client-side <command>PREPARE</> and
9603 <command>EXECUTE</> (Simon)
9604 </para>
9605 </listitem>
9607 <listitem>
9608 <para>
9609 Allow Kerberos name and user name case sensitivity to be
9610 specified in <filename>postgresql.conf</> (Magnus)
9611 </para>
9612 </listitem>
9614 <listitem>
9615 <para>
9616 Add configuration parameter <varname>krb_server_hostname</> so
9617 that the server host name can be specified as part of service
9618 principal (Todd Kover)
9619 </para>
9620 <para>
9621 If not set, any service principal matching an entry in the
9622 keytab can be used. This is new Kerberos matching behavior in
9623 this release.
9624 </para>
9625 </listitem>
9627 <listitem>
9628 <para>
9629 Add <varname>log_line_prefix</> options for millisecond
9630 timestamps (<literal>%m</>) and remote host (<literal>%h</>) (Ed
9632 </para>
9633 </listitem>
9635 <listitem>
9636 <para>
9637 Add WAL logging for GiST indexes (Teodor, Oleg)
9638 </para>
9639 <para>
9640 GiST indexes are now safe for crash and point-in-time recovery.
9641 </para>
9642 </listitem>
9644 <listitem>
9645 <para>
9646 Remove old <filename>*.backup</> files when we do
9647 <function>pg_stop_backup()</> (Bruce)
9648 </para>
9649 <para>
9650 This prevents a large number of <filename>*.backup</> files from
9651 existing in <filename>pg_xlog/</>.
9652 </para>
9653 </listitem>
9655 <listitem>
9656 <para>
9657 Add configuration parameters to control TCP/IP keep-alive
9658 times for idle, interval, and count (Oliver Jowett)
9659 </para>
9661 <para>
9662 These values can be changed to allow more rapid detection of
9663 lost client connections.
9664 </para>
9665 </listitem>
9667 <listitem>
9668 <para>
9669 Add per-user and per-database connection limits (Petr Jelinek)
9670 </para>
9671 <para>
9672 Using <command>ALTER USER</> and <command>ALTER DATABASE</>,
9673 limits can now be enforced on the maximum number of sessions that
9674 can concurrently connect as a specific user or to a specific database.
9675 Setting the limit to zero disables user or database connections.
9676 </para>
9677 </listitem>
9679 <listitem>
9680 <para>
9681 Allow more than two gigabytes of shared memory and per-backend
9682 work memory on 64-bit machines (Koichi Suzuki)
9683 </para>
9684 </listitem>
9686 <listitem>
9687 <para>
9688 New system catalog <structname>pg_pltemplate</> allows overriding
9689 obsolete procedural-language definitions in dump files (Tom)
9690 </para>
9691 </listitem>
9693 </itemizedlist>
9694 </sect3>
9697 <sect3>
9698 <title>Query Changes</title>
9699 <itemizedlist>
9701 <listitem>
9702 <para>
9703 Add temporary views (Koju Iijima, Neil)
9704 </para>
9705 </listitem>
9707 <listitem>
9708 <para>
9709 Fix <command>HAVING</> without any aggregate functions or
9710 <command>GROUP BY</> so that the query returns a single group (Tom)
9711 </para>
9712 <para>
9713 Previously, such a case would treat the <command>HAVING</>
9714 clause the same as a <command>WHERE</> clause. This was not per spec.
9715 </para>
9716 </listitem>
9718 <listitem>
9719 <para>
9720 Add <command>USING</> clause to allow additional tables to be
9721 specified to <command>DELETE</> (Euler Taveira de Oliveira, Neil)
9722 </para>
9723 <para>
9724 In prior releases, there was no clear method for specifying
9725 additional tables to be used for joins in a <command>DELETE</>
9726 statement. <command>UPDATE</> already has a <literal>FROM</>
9727 clause for this purpose.
9728 </para>
9729 </listitem>
9731 <listitem>
9732 <para>
9733 Add support for <literal>\x</> hex escapes in backend and ecpg
9734 strings (Bruce)
9735 </para>
9736 <para>
9737 This is just like the standard C <literal>\x</> escape syntax.
9738 Octal escapes were already supported.
9739 </para>
9740 </listitem>
9742 <listitem>
9743 <para>
9744 Add <command>BETWEEN SYMMETRIC</> query syntax (Pavel Stehule)
9745 </para>
9746 <para>
9747 This feature allows <command>BETWEEN</> comparisons without
9748 requiring the first value to be less than the second. For
9749 example, <command>2 BETWEEN [ASYMMETRIC] 3 AND 1</> returns
9750 false, while <command>2 BETWEEN SYMMETRIC 3 AND 1</> returns
9751 true. <command>BETWEEN ASYMMETRIC</> was already supported.
9752 </para>
9753 </listitem>
9755 <listitem>
9756 <para>
9757 Add <command>NOWAIT</> option to <command>SELECT ... FOR
9758 UPDATE/SHARE</> (Hans-Juergen Schoenig)
9759 </para>
9760 <para>
9761 While the <varname>statement_timeout</> configuration
9762 parameter allows a query taking more than a certain amount of
9763 time to be cancelled, the <command>NOWAIT</> option allows a
9764 query to be canceled as soon as a <command>SELECT ... FOR
9765 UPDATE/SHARE</> command cannot immediately acquire a row lock.
9766 </para>
9767 </listitem>
9768 </itemizedlist>
9769 </sect3>
9772 <sect3>
9773 <title>Object Manipulation Changes</title>
9774 <itemizedlist>
9776 <listitem>
9777 <para>
9778 Track dependencies of shared objects (Alvaro)
9779 </para>
9780 <para>
9781 <productname>PostgreSQL</productname> allows global tables
9782 (users, databases, tablespaces) to reference information in
9783 multiple databases. This addition adds dependency information
9784 for global tables, so, for example, user ownership can be
9785 tracked across databases, so a user who owns something in any
9786 database can no longer be removed. Dependency tracking already
9787 existed for database-local objects.
9788 </para>
9789 </listitem>
9791 <listitem>
9792 <para>
9793 Allow limited <command>ALTER OWNER</> commands to be performed
9794 by the object owner (Stephen Frost)
9795 </para>
9796 <para>
9797 Prior releases allowed only superusers to change object owners.
9798 Now, ownership can be transferred if the user executing the command
9799 owns the object and would be able to create it as the new owner
9800 (that is, the user is a member of the new owning role and that role
9801 has the CREATE permission that would be needed to create the object
9802 afresh).
9803 </para>
9804 </listitem>
9806 <listitem>
9807 <para>
9808 Add <command>ALTER</> object <command>SET SCHEMA</> capability
9809 for some object types (tables, functions, types) (Bernd Helmle)
9810 </para>
9811 <para>
9812 This allows objects to be moved to different schemas.
9813 </para>
9814 </listitem>
9816 <listitem>
9817 <para>
9818 Add <command>ALTER TABLE ENABLE/DISABLE TRIGGER</command> to
9819 disable triggers (Satoshi Nagayasu)
9820 </para>
9821 </listitem>
9823 </itemizedlist>
9824 </sect3>
9827 <sect3>
9828 <title>Utility Command Changes</title>
9829 <itemizedlist>
9831 <listitem>
9832 <para>
9833 Allow <command>TRUNCATE</> to truncate multiple tables in a
9834 single command (Alvaro)
9835 </para>
9836 <para>
9837 Because of referential integrity checks, it is not allowed to
9838 truncate a table that is part of a referential integrity
9839 constraint. Using this new functionality, <command>TRUNCATE</>
9840 can be used to truncate such tables, if both tables involved in
9841 a referential integrity constraint are truncated in a single
9842 <command>TRUNCATE</> command.
9843 </para>
9844 </listitem>
9846 <listitem>
9847 <para>
9848 Properly process carriage returns and line feeds in
9849 <command>COPY CSV</> mode (Andrew)
9850 </para>
9851 <para>
9852 In release 8.0, carriage returns and line feeds in <command>CSV
9853 COPY TO</> were processed in an inconsistent manner. (This was
9854 documented on the TODO list.)
9855 </para>
9856 </listitem>
9858 <listitem>
9859 <para>
9860 Add <command>COPY WITH CSV HEADER</> to allow a header line as
9861 the first line in <command>COPY</> (Andrew)
9862 </para>
9863 <para>
9864 This allows handling of the common <command>CSV</> usage of
9865 placing the column names on the first line of the data file. For
9866 <command>COPY TO</>, the first line contains the column names,
9867 and for <command>COPY FROM</>, the first line is ignored.
9868 </para>
9869 </listitem>
9871 <listitem>
9872 <para>
9873 On Windows, display better sub-second precision in
9874 <command>EXPLAIN ANALYZE</> (Magnus)
9875 </para>
9876 </listitem>
9878 <listitem>
9879 <para>
9880 Add trigger duration display to <command>EXPLAIN ANALYZE</>
9881 (Tom)
9882 </para>
9883 <para>
9884 Prior releases included trigger execution time as part of the
9885 total execution time, but did not show it separately. It is now
9886 possible to see how much time is spent in each trigger.
9887 </para>
9888 </listitem>
9890 <listitem>
9891 <para>
9892 Add support for <literal>\x</> hex escapes in <command>COPY</>
9893 (Sergey Ten)
9894 </para>
9895 <para>
9896 Previous releases only supported octal escapes.
9897 </para>
9898 </listitem>
9900 <listitem>
9901 <para>
9902 Make <command>SHOW ALL</> include variable descriptions
9903 (Matthias Schmidt)
9904 </para>
9905 <para>
9906 <command>SHOW</> varname still only displays the variable's
9907 value and does not include the description.
9908 </para>
9909 </listitem>
9911 <listitem>
9912 <para>
9913 Make <application>initdb</application> create a new standard
9914 database called <literal>postgres</>, and convert utilities to
9915 use <literal>postgres</> rather than <literal>template1</> for
9916 standard lookups (Dave)
9917 </para>
9918 <para>
9919 In prior releases, <literal>template1</> was used both as a
9920 default connection for utilities like
9921 <application>createuser</application>, and as a template for
9922 new databases. This caused <command>CREATE DATABASE</> to
9923 sometimes fail, because a new database cannot be created if
9924 anyone else is in the template database. With this change, the
9925 default connection database is now <literal>postgres</>,
9926 meaning it is much less likely someone will be using
9927 <literal>template1</> during <command>CREATE DATABASE</>.
9928 </para>
9929 </listitem>
9931 <listitem>
9932 <para>
9933 Create new <application>reindexdb</application> command-line
9934 utility by moving <filename>/contrib/reindexdb</> into the
9935 server (Euler Taveira de Oliveira)
9936 </para>
9937 </listitem>
9939 </itemizedlist>
9940 </sect3>
9943 <sect3>
9944 <title>Data Type and Function Changes</title>
9945 <itemizedlist>
9947 <listitem>
9948 <para>
9949 Add <function>MAX()</> and <function>MIN()</> aggregates for
9950 array types (Koju Iijima)
9951 </para>
9952 </listitem>
9954 <listitem>
9955 <para>
9956 Fix <function>to_date()</> and <function>to_timestamp()</> to
9957 behave reasonably when <literal>CC</> and <literal>YY</> fields
9958 are both used (Karel Zak)
9959 </para>
9960 <para>
9961 If the format specification contains <literal>CC</> and a year
9962 specification is <literal>YYY</> or longer, ignore the
9963 <literal>CC</>. If the year specification is <literal>YY</> or
9964 shorter, interpret <literal>CC</> as the previous century.
9965 </para>
9966 </listitem>
9968 <listitem>
9969 <para>
9970 Add <function>md5(bytea)</> (Abhijit Menon-Sen)
9971 </para>
9972 <para>
9973 <function>md5(text)</> already existed.
9974 </para>
9975 </listitem>
9977 <listitem>
9978 <para>
9979 Add support for <command>numeric ^ numeric</> based on
9980 <function>power(numeric, numeric)</>
9981 </para>
9982 <para>
9983 The function already existed, but there was no operator assigned
9984 to it.
9985 </para>
9986 </listitem>
9988 <listitem>
9989 <para>
9990 Fix <type>NUMERIC</> modulus by properly truncating the quotient
9991 during computation (Bruce)
9992 </para>
9993 <para>
9994 In previous releases, modulus for large values sometimes
9995 returned negative results due to rounding of the quotient.
9996 </para>
9997 </listitem>
9999 <listitem>
10000 <para>
10001 Add a function <function>lastval()</> (Dennis Bj&ouml;rklund)
10002 </para>
10003 <para>
10004 <function>lastval()</> is a simplified version of
10005 <function>currval()</>. It automatically determines the proper
10006 sequence name based on the most recent <function>nextval()</> or
10007 <function>setval()</> call performed by the current session.
10008 </para>
10009 </listitem>
10011 <listitem>
10012 <para>
10013 Add <function>to_timestamp(DOUBLE PRECISION) (Michael Glaesemann)</>
10014 </para>
10015 <para>
10016 Converts Unix seconds since 1970 to a <type>TIMESTAMP WITH
10017 TIMEZONE</>.
10018 </para>
10019 </listitem>
10021 <listitem>
10022 <para>
10023 Add <function>pg_postmaster_start_time()</> function (Euler
10024 Taveira de Oliveira, Matthias Schmidt)
10025 </para>
10026 </listitem>
10028 <listitem>
10029 <para>
10030 Allow the full use of time zone names in <command>AT TIME
10031 ZONE</>, not just the short list previously available (Magnus)
10032 </para>
10033 <para>
10034 Previously, only a predefined list of time zone names were
10035 supported by <command>AT TIME ZONE</>. Now any supported time
10036 zone name can be used, e.g.:
10037 <programlisting>
10038 SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London';
10039 </programlisting>
10040 In the above query, the time zone used is adjusted based on the
10041 daylight saving time rules that were in effect on the supplied
10042 date.
10043 </para>
10044 </listitem>
10046 <listitem>
10047 <para>
10048 Add <function>GREATEST()</> and <function>LEAST()</> variadic
10049 functions (Pavel Stehule)
10050 </para>
10051 <para>
10052 These functions take a variable number of arguments and return
10053 the greatest or least value among the arguments.
10054 </para>
10055 </listitem>
10057 <listitem>
10058 <para>
10059 Add <function>pg_column_size()</> (Mark Kirkwood)
10060 </para>
10061 <para>
10062 This returns storage size of a column, which might be compressed.
10063 </para>
10064 </listitem>
10066 <listitem>
10067 <para>
10068 Add <function>regexp_replace()</> (Atsushi Ogawa)
10069 </para>
10070 <para>
10071 This allows regular expression replacement, like sed. An optional
10072 flag argument allows selection of global (replace all) and
10073 case-insensitive modes.
10074 </para>
10075 </listitem>
10077 <listitem>
10078 <para>
10079 Fix interval division and multiplication (Bruce)
10080 </para>
10081 <para>
10082 Previous versions sometimes returned unjustified results, like
10083 <command>'4 months'::interval / 5</> returning <command>'1 mon
10084 -6 days'</>.
10085 </para>
10086 </listitem>
10088 <listitem>
10089 <para>
10090 Fix roundoff behavior in timestamp, time, and interval output (Tom)
10091 </para>
10092 <para>
10093 This fixes some cases in which the seconds field would be shown as
10094 <literal>60</> instead of incrementing the higher-order fields.
10095 </para>
10096 </listitem>
10098 <listitem>
10099 <para>
10100 Add a separate day field to type <type>interval</> so a one day
10101 interval can be distinguished from a 24 hour interval (Michael
10102 Glaesemann)
10103 </para>
10104 <para>
10105 Days that contain a daylight saving time adjustment are not 24
10106 hours long, but typically 23 or 25 hours. This change creates a
10107 conceptual distinction between intervals of <quote>so many days</>
10108 and intervals of <quote>so many hours</>. Adding
10109 <literal>1 day</> to a timestamp now gives the same local time on
10110 the next day even if a daylight saving time adjustment occurs
10111 between, whereas adding <literal>24 hours</> will give a different
10112 local time when this happens. For example, under US DST rules:
10113 <programlisting>
10114 '2005-04-03 00:00:00-05' + '1 day' = '2005-04-04 00:00:00-04'
10115 '2005-04-03 00:00:00-05' + '24 hours' = '2005-04-04 01:00:00-04'
10116 </programlisting>
10117 </para>
10118 </listitem>
10120 <listitem>
10121 <para>
10122 Add <function>justify_days()</> and <function>justify_hours()</>
10123 (Michael Glaesemann)
10124 </para>
10125 <para>
10126 These functions, respectively, adjust days to an appropriate
10127 number of full months and days, and adjust hours to an
10128 appropriate number of full days and hours.
10129 </para>
10130 </listitem>
10132 <listitem>
10133 <para>
10134 Move <filename>/contrib/dbsize</> into the backend, and rename
10135 some of the functions (Dave Page, Andreas Pflug)
10136 </para>
10137 <para>
10138 <itemizedlist>
10140 <listitem>
10141 <para>
10142 <function>pg_tablespace_size()</>
10143 </para>
10144 </listitem>
10146 <listitem>
10147 <para>
10148 <function>pg_database_size()</>
10149 </para>
10150 </listitem>
10152 <listitem>
10153 <para>
10154 <function>pg_relation_size()</>
10155 </para>
10156 </listitem>
10158 <listitem>
10159 <para>
10160 <function>pg_total_relation_size()</>
10161 </para>
10162 </listitem>
10164 <listitem>
10165 <para>
10166 <function>pg_size_pretty()</>
10167 </para>
10168 </listitem>
10170 </itemizedlist>
10171 </para>
10172 <para>
10173 <function>pg_total_relation_size()</> includes indexes and TOAST
10174 tables.
10175 </para>
10176 </listitem>
10178 <listitem>
10179 <para>
10180 Add functions for read-only file access to the cluster directory
10181 (Dave Page, Andreas Pflug)
10182 </para>
10183 <para>
10184 <itemizedlist>
10186 <listitem>
10187 <para>
10188 <function>pg_stat_file()</>
10189 </para>
10190 </listitem>
10192 <listitem>
10193 <para>
10194 <function>pg_read_file()</>
10195 </para>
10196 </listitem>
10198 <listitem>
10199 <para>
10200 <function>pg_ls_dir()</>
10201 </para>
10202 </listitem>
10204 </itemizedlist>
10205 </para>
10206 </listitem>
10208 <listitem>
10209 <para>
10210 Add <function>pg_reload_conf()</> to force reloading of the
10211 configuration files (Dave Page, Andreas Pflug)
10212 </para>
10213 </listitem>
10215 <listitem>
10216 <para>
10217 Add <function>pg_rotate_logfile()</> to force rotation of the
10218 server log file (Dave Page, Andreas Pflug)
10219 </para>
10220 </listitem>
10222 <listitem>
10223 <para>
10224 Change <literal>pg_stat_*</> views to include TOAST tables (Tom)
10225 </para>
10226 </listitem>
10228 </itemizedlist>
10229 </sect3>
10232 <sect3>
10233 <title>Encoding and Locale Changes</title>
10234 <itemizedlist>
10236 <listitem>
10237 <para>
10238 Rename some encodings to be more consistent and to follow
10239 international standards (Bruce)
10240 </para>
10241 <para>
10242 <itemizedlist>
10244 <listitem>
10245 <para>
10246 <literal>UNICODE</> is now <literal>UTF8</>
10247 </para>
10248 </listitem>
10250 <listitem>
10251 <para>
10252 <literal>ALT</> is now <literal>WIN866</>
10253 </para>
10254 </listitem>
10256 <listitem>
10257 <para>
10258 <literal>WIN</> is now <literal>WIN1251</>
10259 </para>
10260 </listitem>
10262 <listitem>
10263 <para>
10264 <literal>TCVN</> is now <literal>WIN1258</>
10265 </para>
10266 </listitem>
10268 </itemizedlist>
10269 </para>
10271 <para>
10272 The original names still work.
10273 </para>
10274 </listitem>
10276 <listitem>
10277 <para>
10278 Add support for <literal>WIN1252</> encoding (Roland Volkmann)
10279 </para>
10280 </listitem>
10282 <listitem>
10283 <para>
10284 Add support for four-byte <literal>UTF8</> characters (John
10285 Hansen)
10286 </para>
10287 <para>
10288 Previously only one, two, and three-byte <literal>UTF8</> characters
10289 were supported. This is particularly important for support for
10290 some Chinese character sets.
10291 </para>
10292 </listitem>
10294 <listitem>
10295 <para>
10296 Allow direct conversion between <literal>EUC_JP</> and
10297 <literal>SJIS</> to improve performance (Atsushi Ogawa)
10298 </para>
10299 </listitem>
10301 <listitem>
10302 <para>
10303 Allow the UTF8 encoding to work on Windows (Magnus)
10304 </para>
10305 <para>
10306 This is done by mapping UTF8 to the Windows-native UTF16
10307 implementation.
10308 </para>
10309 </listitem>
10311 </itemizedlist>
10312 </sect3>
10315 <sect3>
10316 <title>General Server-Side Language Changes</title>
10317 <itemizedlist>
10319 <listitem>
10320 <para>
10321 Fix <command>ALTER LANGUAGE RENAME</> (Sergey Yatskevich)
10322 </para>
10323 </listitem>
10325 <listitem>
10326 <para>
10327 Allow function characteristics, like strictness and volatility,
10328 to be modified via <command>ALTER FUNCTION</> (Neil)
10329 </para>
10330 </listitem>
10332 <listitem>
10333 <para>
10334 Increase the maximum number of function arguments to 100 (Tom)
10335 </para>
10336 </listitem>
10338 <listitem>
10339 <para>
10340 Allow SQL and PL/PgSQL functions to use <command>OUT</> and
10341 <command>INOUT</> parameters (Tom)
10342 </para>
10343 <para>
10344 <command>OUT</> is an alternate way for a function to return
10345 values. Instead of using <command>RETURN</>, values can be
10346 returned by assigning to parameters declared as <command>OUT</> or
10347 <command>INOUT</>. This is notationally simpler in some cases,
10348 particularly so when multiple values need to be returned.
10349 While returning multiple values from a function
10350 was possible in previous releases, this greatly simplifies the
10351 process. (The feature will be extended to other server-side
10352 languages in future releases.)
10353 </para>
10354 </listitem>
10356 <listitem>
10357 <para>
10358 Move language handler functions into the <literal>pg_catalog</> schema
10359 </para>
10360 <para>
10361 This makes it easier to drop the public schema if desired.
10362 </para>
10363 </listitem>
10365 <listitem>
10366 <para>
10367 Add <function>SPI_getnspname()</function> to SPI (Neil)
10368 </para>
10369 </listitem>
10371 </itemizedlist>
10372 </sect3>
10374 <sect3>
10375 <title>PL/PgSQL Server-Side Language Changes</title>
10376 <itemizedlist>
10378 <listitem>
10379 <para>
10380 Overhaul the memory management of PL/PgSQL functions (Neil)
10381 </para>
10382 <para>
10383 The parsetree of each function is now stored in a separate
10384 memory context. This allows this memory to be easily reclaimed
10385 when it is no longer needed.
10386 </para>
10387 </listitem>
10389 <listitem>
10390 <para>
10391 Check function syntax at <command>CREATE FUNCTION</> time,
10392 rather than at runtime (Neil)
10393 </para>
10394 <para>
10395 Previously, most syntax errors were reported only when the
10396 function was executed.
10397 </para>
10398 </listitem>
10400 <listitem>
10401 <para>
10402 Allow <command>OPEN</> to open non-<command>SELECT</> queries
10403 like <command>EXPLAIN</> and <command>SHOW</> (Tom)
10404 </para>
10405 </listitem>
10407 <listitem>
10408 <para>
10409 No longer require functions to issue a <command>RETURN</>
10410 statement (Tom)
10411 </para>
10412 <para>
10413 This is a byproduct of the newly added <command>OUT</> and
10414 <command>INOUT</> functionality. <command>RETURN</> can
10415 be omitted when it is not needed to provide the function's
10416 return value.
10417 </para>
10418 </listitem>
10420 <listitem>
10421 <para>
10422 Add support for an optional <command>INTO</> clause to
10423 PL/PgSQL's <command>EXECUTE</> statement (Pavel Stehule, Neil)
10424 </para>
10425 </listitem>
10427 <listitem>
10428 <para>
10429 Make <command>CREATE TABLE AS</> set <command>ROW_COUNT</> (Tom)
10430 </para>
10431 </listitem>
10433 <listitem>
10434 <para>
10435 Define <literal>SQLSTATE</> and <literal>SQLERRM</> to return
10436 the <literal>SQLSTATE</> and error message of the current
10437 exception (Pavel Stehule, Neil)
10438 </para>
10439 <para>
10440 These variables are only defined inside exception blocks.
10441 </para>
10442 </listitem>
10444 <listitem>
10445 <para>
10446 Allow the parameters to the <command>RAISE</> statement to be
10447 expressions (Pavel Stehule, Neil)
10448 </para>
10449 </listitem>
10451 <listitem>
10452 <para>
10453 Add a loop <command>CONTINUE</> statement (Pavel Stehule, Neil)
10454 </para>
10455 </listitem>
10457 <listitem>
10458 <para>
10459 Allow block and loop labels (Pavel Stehule)
10460 </para>
10461 </listitem>
10463 </itemizedlist>
10464 </sect3>
10467 <sect3>
10468 <title>PL/Perl Server-Side Language Changes</title>
10469 <itemizedlist>
10471 <listitem>
10472 <para>
10473 Allow large result sets to be returned efficiently (Abhijit
10474 Menon-Sen)
10475 </para>
10476 <para>
10477 This allows functions to use <function>return_next()</> to avoid
10478 building the entire result set in memory.
10479 </para>
10480 </listitem>
10482 <listitem>
10483 <para>
10484 Allow one-row-at-a-time retrieval of query results (Abhijit Menon-Sen)
10485 </para>
10486 <para>
10487 This allows functions to use <function>spi_query()</> and
10488 <function>spi_fetchrow()</> to avoid accumulating the entire
10489 result set in memory.
10490 </para>
10491 </listitem>
10493 <listitem>
10494 <para>
10495 Force PL/Perl to handle strings as <literal>UTF8</> if the
10496 server encoding is <literal>UTF8</> (David Kamholz)
10497 </para>
10498 </listitem>
10500 <listitem>
10501 <para>
10502 Add a validator function for PL/Perl (Andrew)
10503 </para>
10504 <para>
10505 This allows syntax errors to be reported at definition time,
10506 rather than execution time.
10507 </para>
10508 </listitem>
10510 <listitem>
10511 <para>
10512 Allow PL/Perl to return a Perl array when the function returns
10513 an array type (Andrew)
10514 </para>
10515 <para>
10516 This basically maps <productname>PostgreSQL</productname> arrays
10517 to Perl arrays.
10518 </para>
10519 </listitem>
10521 <listitem>
10522 <para>
10523 Allow Perl nonfatal warnings to generate <command>NOTICE</>
10524 messages (Andrew)
10525 </para>
10526 </listitem>
10528 <listitem>
10529 <para>
10530 Allow Perl's <literal>strict</> mode to be enabled (Andrew)
10531 </para>
10532 </listitem>
10534 </itemizedlist>
10535 </sect3>
10538 <sect3>
10539 <title><application>psql</> Changes</title>
10540 <itemizedlist>
10542 <listitem>
10543 <para>
10544 Add <command>\set ON_ERROR_ROLLBACK</> to allow statements in
10545 a transaction to error without affecting the rest of the
10546 transaction (Greg Sabino Mullane)
10547 </para>
10548 <para>
10549 This is basically implemented by wrapping every statement in a
10550 sub-transaction.
10551 </para>
10552 </listitem>
10554 <listitem>
10555 <para>
10556 Add support for <literal>\x</> hex strings in
10557 <application>psql</> variables (Bruce)
10558 </para>
10559 <para>
10560 Octal escapes were already supported.
10561 </para>
10562 </listitem>
10564 <listitem>
10565 <para>
10566 Add support for <command>troff -ms</> output format (Roger
10567 Leigh)
10568 </para>
10569 </listitem>
10571 <listitem>
10572 <para>
10573 Allow the history file location to be controlled by
10574 <envar>HISTFILE</> (Andreas Seltenreich)
10575 </para>
10576 <para>
10577 This allows configuration of per-database history storage.
10578 </para>
10579 </listitem>
10581 <listitem>
10582 <para>
10583 Prevent <command>\x</> (expanded mode) from affecting
10584 the output of <command>\d tablename</> (Neil)
10585 </para>
10586 </listitem>
10588 <listitem>
10589 <para>
10590 Add <option>-L</> option to <application>psql</application> to
10591 log sessions (Lorne Sunley)
10592 </para>
10593 <para>
10594 This option was added because some operating systems do not have
10595 simple command-line activity logging functionality.
10596 </para>
10597 </listitem>
10599 <listitem>
10600 <para>
10601 Make <command>\d</> show the tablespaces of indexes (Qingqing
10602 Zhou)
10603 </para>
10604 </listitem>
10606 <listitem>
10607 <para>
10608 Allow <application>psql</application> help (<command>\h</>) to
10609 make a best guess on the proper help information (Greg Sabino
10610 Mullane)
10611 </para>
10612 <para>
10613 This allows the user to just add <command>\h</> to the front of
10614 the syntax error query and get help on the supported syntax.
10615 Previously any additional query text beyond the command name
10616 had to be removed to use <command>\h</>.
10617 </para>
10618 </listitem>
10620 <listitem>
10621 <para>
10622 Add <command>\pset numericlocale</> to allow numbers to be
10623 output in a locale-aware format (Eugen Nedelcu)
10624 </para>
10625 <para>
10626 For example, using <literal>C</> locale <literal>100000</> would
10627 be output as <literal>100,000.0</> while a European locale might
10628 output this value as <literal>100.000,0</>.
10629 </para>
10630 </listitem>
10632 <listitem>
10633 <para>
10634 Make startup banner show both server version number and
10635 <application>psql</>'s version number, when they are different (Bruce)
10636 </para>
10637 <para>
10638 Also, a warning will be shown if the server and <application>psql</>
10639 are from different major releases.
10640 </para>
10641 </listitem>
10643 </itemizedlist>
10644 </sect3>
10647 <sect3>
10648 <title><application>pg_dump</> Changes</title>
10649 <itemizedlist>
10651 <listitem>
10652 <para>
10653 Add <option>-n</> / <option>--schema</> switch to
10654 <application>pg_restore</> (Richard van den Berg)
10655 </para>
10656 <para>
10657 This allows just the objects in a specified schema to be restored.
10658 </para>
10659 </listitem>
10661 <listitem>
10662 <para>
10663 Allow <application>pg_dump</> to dump large objects even in
10664 text mode (Tom)
10665 </para>
10666 <para>
10667 With this change, large objects are now always dumped; the former
10668 <option>-b</> switch is a no-op.
10669 </para>
10670 </listitem>
10672 <listitem>
10673 <para>
10674 Allow <application>pg_dump</> to dump a consistent snapshot of
10675 large objects (Tom)
10676 </para>
10677 </listitem>
10679 <listitem>
10680 <para>
10681 Dump comments for large objects (Tom)
10682 </para>
10683 </listitem>
10685 <listitem>
10686 <para>
10687 Add <option>--encoding</> to <application>pg_dump</>
10688 (Magnus Hagander)
10689 </para>
10690 <para>
10691 This allows a database to be dumped in an encoding that is
10692 different from the server's encoding. This is valuable when
10693 transferring the dump to a machine with a different encoding.
10694 </para>
10695 </listitem>
10697 <listitem>
10698 <para>
10699 Rely on <structname>pg_pltemplate</> for procedural languages (Tom)
10700 </para>
10701 <para>
10702 If the call handler for a procedural language is in the
10703 <literal>pg_catalog</> schema, <application>pg_dump</> does not
10704 dump the handler. Instead, it dumps the language using just
10705 <command>CREATE LANGUAGE <replaceable>name</></command>,
10706 relying on the <structname>pg_pltemplate</> catalog to provide
10707 the language's creation parameters at load time.
10708 </para>
10709 </listitem>
10711 </itemizedlist>
10712 </sect3>
10715 <sect3>
10716 <title><application>libpq</application> Changes</title>
10717 <itemizedlist>
10719 <listitem>
10720 <para>
10721 Add a <envar>PGPASSFILE</> environment variable to specify the
10722 password file's filename (Andrew)
10723 </para>
10724 </listitem>
10726 <listitem>
10727 <para>
10728 Add <function>lo_create()</>, that is similar to
10729 <function>lo_creat()</> but allows the OID of the large object
10730 to be specified (Tom)
10731 </para>
10732 </listitem>
10734 <listitem>
10735 <para>
10736 Make <application>libpq</application> consistently return an error
10737 to the client application on <function>malloc()</function>
10738 failure (Neil)
10739 </para>
10740 </listitem>
10741 </itemizedlist>
10742 </sect3>
10745 <sect3>
10746 <title>Source Code Changes</title>
10747 <itemizedlist>
10749 <listitem>
10750 <para>
10751 Fix <application>pgxs</> to support building against a relocated
10752 installation
10753 </para>
10754 </listitem>
10756 <listitem>
10757 <para>
10758 Add spinlock support for the Itanium processor using Intel
10759 compiler (Vikram Kalsi)
10760 </para>
10761 </listitem>
10763 <listitem>
10764 <para>
10765 Add Kerberos 5 support for Windows (Magnus)
10766 </para>
10767 </listitem>
10769 <listitem>
10770 <para>
10771 Add Chinese FAQ (laser@pgsqldb.com)
10772 </para>
10773 </listitem>
10775 <listitem>
10776 <para>
10777 Rename Rendezvous to Bonjour to match OS/X feature renaming
10778 (Bruce)
10779 </para>
10780 </listitem>
10782 <listitem>
10783 <para>
10784 Add support for <literal>fsync_writethrough</literal> on
10785 Darwin (Chris Campbell)
10786 </para>
10787 </listitem>
10789 <listitem>
10790 <para>
10791 Streamline the passing of information within the server, the
10792 optimizer, and the lock system (Tom)
10793 </para>
10794 </listitem>
10796 <listitem>
10797 <para>
10798 Allow <application>pg_config</> to be compiled using MSVC (Andrew)
10799 </para>
10800 <para>
10801 This is required to build DBD::Pg using <application>MSVC</>.
10802 </para>
10803 </listitem>
10805 <listitem>
10806 <para>
10807 Remove support for Kerberos V4 (Magnus)
10808 </para>
10809 <para>
10810 Kerberos 4 had security vulnerabilities and is no longer
10811 maintained.
10812 </para>
10813 </listitem>
10815 <listitem>
10816 <para>
10817 Code cleanups (Coverity static analysis performed by
10818 EnterpriseDB)
10819 </para>
10820 </listitem>
10822 <listitem>
10823 <para>
10824 Modify <filename>postgresql.conf</> to use documentation defaults
10825 <literal>on</>/<literal>off</> rather than
10826 <literal>true</>/<literal>false</> (Bruce)
10827 </para>
10828 </listitem>
10830 <listitem>
10831 <para>
10832 Enhance <application>pg_config</> to be able to report more
10833 build-time values (Tom)
10834 </para>
10835 </listitem>
10837 <listitem>
10838 <para>
10839 Allow <application>libpq</application> to be built thread-safe
10840 on Windows (Dave Page)
10841 </para>
10842 </listitem>
10844 <listitem>
10845 <para>
10846 Allow IPv6 connections to be used on Windows (Andrew)
10847 </para>
10848 </listitem>
10850 <listitem>
10851 <para>
10852 Add Server Administration documentation about I/O subsystem
10853 reliability (Bruce)
10854 </para>
10855 </listitem>
10857 <listitem>
10858 <para>
10859 Move private declarations from <filename>gist.h</filename> to
10860 <filename>gist_private.h</filename> (Neil)
10861 </para>
10863 <para>
10864 In previous releases, <filename>gist.h</> contained both the
10865 public GiST API (intended for use by authors of GiST index
10866 implementations) as well as some private declarations used by
10867 the implementation of GiST itself. The latter have been moved
10868 to a separate file, <filename>gist_private.h</>. Most GiST
10869 index implementations should be unaffected.
10870 </para>
10871 </listitem>
10873 <listitem>
10874 <para>
10875 Overhaul GiST memory management (Neil)
10876 </para>
10878 <para>
10879 GiST methods are now always invoked in a short-lived memory
10880 context. Therefore, memory allocated via <function>palloc()</>
10881 will be reclaimed automatically, so GiST index implementations
10882 do not need to manually release allocated memory via
10883 <function>pfree()</>.
10884 </para>
10885 </listitem>
10886 </itemizedlist>
10887 </sect3>
10890 <sect3>
10891 <title>Contrib Changes</title>
10892 <itemizedlist>
10894 <listitem>
10895 <para>
10896 Add <filename>/contrib/pg_buffercache</> contrib module (Mark
10897 Kirkwood)
10898 </para>
10899 <para>
10900 This displays the contents of the buffer cache, for debugging and
10901 performance tuning purposes.
10902 </para>
10903 </listitem>
10905 <listitem>
10906 <para>
10907 Remove <filename>/contrib/array</> because it is obsolete (Tom)
10908 </para>
10909 </listitem>
10911 <listitem>
10912 <para>
10913 Clean up the <filename>/contrib/lo</> module (Tom)
10914 </para>
10915 </listitem>
10917 <listitem>
10918 <para>
10919 Move <filename>/contrib/findoidjoins</> to
10920 <filename>/src/tools</> (Tom)
10921 </para>
10922 </listitem>
10924 <listitem>
10925 <para>
10926 Remove the <literal>&lt;&lt;</>, <literal>&gt;&gt;</>,
10927 <literal>&amp;&lt;</>, and <literal>&amp;&gt;</> operators from
10928 <filename>/contrib/cube</>
10929 </para>
10930 <para>
10931 These operators were not useful.
10932 </para>
10933 </listitem>
10935 <listitem>
10936 <para>
10937 Improve <filename>/contrib/btree_gist</> (Janko Richter)
10938 </para>
10939 </listitem>
10941 <listitem>
10942 <para>
10943 Improve <filename>/contrib/pgbench</> (Tomoaki Sato, Tatsuo)
10944 </para>
10945 <para>
10946 There is now a facility for testing with SQL command scripts given
10947 by the user, instead of only a hard-wired command sequence.
10948 </para>
10949 </listitem>
10951 <listitem>
10952 <para>
10953 Improve <filename>/contrib/pgcrypto</> (Marko Kreen)
10954 </para>
10956 <itemizedlist>
10958 <listitem>
10959 <para>
10960 Implementation of OpenPGP symmetric-key and public-key encryption
10961 </para>
10962 <para>
10963 Both RSA and Elgamal public-key algorithms are supported.
10964 </para>
10965 </listitem>
10967 <listitem>
10968 <para>
10969 Stand alone build: include SHA256/384/512 hashes, Fortuna PRNG
10970 </para>
10971 </listitem>
10973 <listitem>
10974 <para>
10975 OpenSSL build: support 3DES, use internal AES with OpenSSL &lt; 0.9.7
10976 </para>
10977 </listitem>
10979 <listitem>
10980 <para>
10981 Take build parameters (OpenSSL, zlib) from <filename>configure</> result
10982 </para>
10983 <para>
10984 There is no need to edit the <filename>Makefile</> anymore.
10985 </para>
10986 </listitem>
10988 <listitem>
10989 <para>
10990 Remove support for <filename>libmhash</> and <filename>libmcrypt</>
10991 </para>
10992 </listitem>
10994 </itemizedlist>
10995 </listitem>
10997 </itemizedlist>
10998 </sect3>
11000 </sect2>
11001 </sect1>
11003 <sect1 id="release-8-0-16">
11004 <title>Release 8.0.16</title>
11006 <note>
11007 <title>Release date</title>
11008 <simpara>2008-06-09</simpara>
11009 </note>
11011 <para>
11012 This release contains a variety of fixes from 8.0.15.
11013 For information about new features in the 8.0 major release, see
11014 <xref linkend="release-8-0">.
11015 </para>
11017 <sect2>
11018 <title>Migration to Version 8.0.16</title>
11020 <para>
11021 A dump/restore is not required for those running 8.0.X.
11022 However, if you are upgrading from a version earlier than 8.0.6,
11023 see the release notes for 8.0.6.
11024 </para>
11026 </sect2>
11028 <sect2>
11029 <title>Changes</title>
11031 <itemizedlist>
11033 <listitem>
11034 <para>
11035 Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
11036 column is correctly checked to see if it's been initialized to all
11037 non-nulls (Brendan Jurd)
11038 </para>
11040 <para>
11041 Previous versions neglected to check this requirement at all.
11042 </para>
11043 </listitem>
11045 <listitem>
11046 <para>
11047 Fix possible <command>CREATE TABLE</> failure when inheriting the
11048 <quote>same</> constraint from multiple parent relations that
11049 inherited that constraint from a common ancestor (Tom)
11050 </para>
11051 </listitem>
11053 <listitem>
11054 <para>
11055 Fix conversions between ISO-8859-5 and other encodings to handle
11056 Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
11057 two dots) (Sergey Burladyan)
11058 </para>
11059 </listitem>
11061 <listitem>
11062 <para>
11063 Fix a few datatype input functions
11064 that were allowing unused bytes in their results to contain
11065 uninitialized, unpredictable values (Tom)
11066 </para>
11068 <para>
11069 This could lead to failures in which two apparently identical literal
11070 values were not seen as equal, resulting in the parser complaining
11071 about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
11072 expressions.
11073 </para>
11074 </listitem>
11076 <listitem>
11077 <para>
11078 Fix a corner case in regular-expression substring matching
11079 (<literal>substring(<replaceable>string</> from
11080 <replaceable>pattern</>)</literal>) (Tom)
11081 </para>
11083 <para>
11084 The problem occurs when there is a match to the pattern overall but
11085 the user has specified a parenthesized subexpression and that
11086 subexpression hasn't got a match. An example is
11087 <literal>substring('foo' from 'foo(bar)?')</>.
11088 This should return NULL, since <literal>(bar)</> isn't matched, but
11089 it was mistakenly returning the whole-pattern match instead (ie,
11090 <literal>foo</>).
11091 </para>
11092 </listitem>
11094 <listitem>
11095 <para>
11096 Update time zone data files to <application>tzdata</> release 2008c (for
11097 DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba,
11098 Argentina/San_Luis, and Chile)
11099 </para>
11100 </listitem>
11102 <listitem>
11103 <para>
11104 Fix incorrect result from <application>ecpg</>'s
11105 <function>PGTYPEStimestamp_sub()</> function (Michael)
11106 </para>
11107 </listitem>
11109 <listitem>
11110 <para>
11111 Fix core dump in <filename>contrib/xml2</>'s
11112 <function>xpath_table()</> function when the input query returns a
11113 NULL value (Tom)
11114 </para>
11115 </listitem>
11117 <listitem>
11118 <para>
11119 Fix <filename>contrib/xml2</>'s makefile to not override
11120 <literal>CFLAGS</> (Tom)
11121 </para>
11122 </listitem>
11124 <listitem>
11125 <para>
11126 Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
11127 4.3 (Tom)
11128 </para>
11130 <para>
11131 This problem affects <quote>old style</> (V0) C functions that
11132 return boolean. The fix is already in 8.3, but the need to
11133 back-patch it was not realized at the time.
11134 </para>
11135 </listitem>
11137 <listitem>
11138 <para>
11139 Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
11140 race condition (Tom)
11141 </para>
11143 <para>
11144 In rare cases a session that had just executed a
11145 <command>LISTEN</> might not get a notification, even though
11146 one would be expected because the concurrent transaction executing
11147 <command>NOTIFY</> was observed to commit later.
11148 </para>
11150 <para>
11151 A side effect of the fix is that a transaction that has executed
11152 a not-yet-committed <command>LISTEN</> command will not see any
11153 row in <structname>pg_listener</> for the <command>LISTEN</>,
11154 should it choose to look; formerly it would have. This behavior
11155 was never documented one way or the other, but it is possible that
11156 some applications depend on the old behavior.
11157 </para>
11158 </listitem>
11160 <listitem>
11161 <para>
11162 Fix rare crash when an error occurs during a query using a hash index
11163 (Heikki)
11164 </para>
11165 </listitem>
11167 <listitem>
11168 <para>
11169 Fix input of datetime values for February 29 in years BC (Tom)
11170 </para>
11172 <para>
11173 The former coding was mistaken about which years were leap years.
11174 </para>
11175 </listitem>
11177 <listitem>
11178 <para>
11179 Fix <quote>unrecognized node type</> error in some variants of
11180 <command>ALTER OWNER</> (Tom)
11181 </para>
11182 </listitem>
11184 <listitem>
11185 <para>
11186 Fix <application>pg_ctl</> to correctly extract the postmaster's port
11187 number from command-line options (Itagaki Takahiro, Tom)
11188 </para>
11190 <para>
11191 Previously, <literal>pg_ctl start -w</> could try to contact the
11192 postmaster on the wrong port, leading to bogus reports of startup
11193 failure.
11194 </para>
11195 </listitem>
11197 <listitem>
11198 <para>
11199 Use <option>-fwrapv</> to defend against possible misoptimization
11200 in recent <application>gcc</> versions (Tom)
11201 </para>
11203 <para>
11204 This is known to be necessary when building <productname>PostgreSQL</>
11205 with <application>gcc</> 4.3 or later.
11206 </para>
11207 </listitem>
11209 <listitem>
11210 <para>
11211 Fix display of constant expressions in <literal>ORDER BY</>
11212 and <literal>GROUP BY</> (Tom)
11213 </para>
11215 <para>
11216 An explictly casted constant would be shown incorrectly. This could
11217 for example lead to corruption of a view definition during
11218 dump and reload.
11219 </para>
11220 </listitem>
11222 <listitem>
11223 <para>
11224 Fix <application>libpq</> to handle NOTICE messages correctly
11225 during COPY OUT (Tom)
11226 </para>
11228 <para>
11229 This failure has only been observed to occur when a user-defined
11230 datatype's output routine issues a NOTICE, but there is no
11231 guarantee it couldn't happen due to other causes.
11232 </para>
11233 </listitem>
11235 </itemizedlist>
11237 </sect2>
11238 </sect1>
11240 <sect1 id="release-8-0-15">
11241 <title>Release 8.0.15</title>
11243 <note>
11244 <title>Release date</title>
11245 <simpara>2008-01-07</simpara>
11246 </note>
11248 <para>
11249 This release contains a variety of fixes from 8.0.14,
11250 including fixes for significant security issues.
11251 For information about new features in the 8.0 major release, see
11252 <xref linkend="release-8-0">.
11253 </para>
11255 <para>
11256 This is the last 8.0.X release for which the <productname>PostgreSQL</>
11257 community will produce binary packages for <productname>Windows</>.
11258 Windows users are encouraged to move to 8.2.X or later,
11259 since there are Windows-specific fixes in 8.2.X that
11260 are impractical to back-port. 8.0.X will continue to
11261 be supported on other platforms.
11262 </para>
11264 <sect2>
11265 <title>Migration to Version 8.0.15</title>
11267 <para>
11268 A dump/restore is not required for those running 8.0.X. However,
11269 if you are upgrading from a version earlier than 8.0.6, see the release
11270 notes for 8.0.6.
11271 </para>
11273 </sect2>
11275 <sect2>
11276 <title>Changes</title>
11278 <itemizedlist>
11280 <listitem>
11281 <para>
11282 Prevent functions in indexes from executing with the privileges of
11283 the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
11284 </para>
11286 <para>
11287 Functions used in index expressions and partial-index
11288 predicates are evaluated whenever a new table entry is made. It has
11289 long been understood that this poses a risk of trojan-horse code
11290 execution if one modifies a table owned by an untrustworthy user.
11291 (Note that triggers, defaults, check constraints, etc. pose the
11292 same type of risk.) But functions in indexes pose extra danger
11293 because they will be executed by routine maintenance operations
11294 such as <command>VACUUM FULL</>, which are commonly performed
11295 automatically under a superuser account. For example, a nefarious user
11296 can execute code with superuser privileges by setting up a
11297 trojan-horse index definition and waiting for the next routine vacuum.
11298 The fix arranges for standard maintenance operations
11299 (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
11300 and <command>CLUSTER</>) to execute as the table owner rather than
11301 the calling user, using the same privilege-switching mechanism already
11302 used for <literal>SECURITY DEFINER</> functions. To prevent bypassing
11303 this security measure, execution of <command>SET SESSION
11304 AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
11305 <literal>SECURITY DEFINER</> context. (CVE-2007-6600)
11306 </para>
11307 </listitem>
11309 <listitem>
11310 <para>
11311 Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
11312 </para>
11314 <para>
11315 Suitably crafted regular-expression patterns could cause crashes,
11316 infinite or near-infinite looping, and/or massive memory consumption,
11317 all of which pose denial-of-service hazards for applications that
11318 accept regex search patterns from untrustworthy sources.
11319 (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
11320 </para>
11321 </listitem>
11323 <listitem>
11324 <para>
11325 Require non-superusers who use <filename>/contrib/dblink</> to use only
11326 password authentication, as a security measure (Joe)
11327 </para>
11329 <para>
11330 The fix that appeared for this in 8.0.14 was incomplete, as it plugged
11331 the hole for only some <filename>dblink</> functions. (CVE-2007-6601,
11332 CVE-2007-3278)
11333 </para>
11334 </listitem>
11336 <listitem>
11337 <para>
11338 Update time zone data files to <application>tzdata</> release 2007k
11339 (in particular, recent Argentina changes) (Tom)
11340 </para>
11341 </listitem>
11343 <listitem>
11344 <para>
11345 Fix planner failure in some cases of <literal>WHERE false AND var IN
11346 (SELECT ...)</> (Tom)
11347 </para>
11348 </listitem>
11350 <listitem>
11351 <para>
11352 Preserve the tablespace of indexes that are
11353 rebuilt by <command>ALTER TABLE ... ALTER COLUMN TYPE</> (Tom)
11354 </para>
11355 </listitem>
11357 <listitem>
11358 <para>
11359 Make archive recovery always start a new WAL timeline, rather than only
11360 when a recovery stop time was used (Simon)
11361 </para>
11363 <para>
11364 This avoids a corner-case risk of trying to overwrite an existing
11365 archived copy of the last WAL segment, and seems simpler and cleaner
11366 than the original definition.
11367 </para>
11368 </listitem>
11370 <listitem>
11371 <para>
11372 Make <command>VACUUM</> not use all of <varname>maintenance_work_mem</>
11373 when the table is too small for it to be useful (Alvaro)
11374 </para>
11375 </listitem>
11377 <listitem>
11378 <para>
11379 Fix potential crash in <function>translate()</> when using a multibyte
11380 database encoding (Tom)
11381 </para>
11382 </listitem>
11384 <listitem>
11385 <para>
11386 Fix PL/Perl to cope when platform's Perl defines type <literal>bool</>
11387 as <literal>int</> rather than <literal>char</> (Tom)
11388 </para>
11390 <para>
11391 While this could theoretically happen anywhere, no standard build of
11392 Perl did things this way ... until <productname>Mac OS X</> 10.5.
11393 </para>
11394 </listitem>
11396 <listitem>
11397 <para>
11398 Fix PL/Python to not crash on long exception messages (Alvaro)
11399 </para>
11400 </listitem>
11402 <listitem>
11403 <para>
11404 Fix <application>pg_dump</> to correctly handle inheritance child tables
11405 that have default expressions different from their parent's (Tom)
11406 </para>
11407 </listitem>
11409 <listitem>
11410 <para>
11411 <application>ecpg</> parser fixes (Michael)
11412 </para>
11413 </listitem>
11415 <listitem>
11416 <para>
11417 Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
11418 NULL rowid as a category in its own right, rather than crashing (Joe)
11419 </para>
11420 </listitem>
11422 <listitem>
11423 <para>
11424 Fix <type>tsvector</> and <type>tsquery</> output routines to
11425 escape backslashes correctly (Teodor, Bruce)
11426 </para>
11427 </listitem>
11429 <listitem>
11430 <para>
11431 Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
11432 </para>
11433 </listitem>
11435 <listitem>
11436 <para>
11437 Require a specific version of <productname>Autoconf</> to be used
11438 when re-generating the <command>configure</> script (Peter)
11439 </para>
11441 <para>
11442 This affects developers and packagers only. The change was made
11443 to prevent accidental use of untested combinations of
11444 <productname>Autoconf</> and <productname>PostgreSQL</> versions.
11445 You can remove the version check if you really want to use a
11446 different <productname>Autoconf</> version, but it's
11447 your responsibility whether the result works or not.
11448 </para>
11449 </listitem>
11451 </itemizedlist>
11453 </sect2>
11454 </sect1>
11456 <sect1 id="release-8-0-14">
11457 <title>Release 8.0.14</title>
11459 <note>
11460 <title>Release date</title>
11461 <simpara>2007-09-17</simpara>
11462 </note>
11464 <para>
11465 This release contains a variety of fixes from 8.0.13.
11466 For information about new features in the 8.0 major release, see
11467 <xref linkend="release-8-0">.
11468 </para>
11470 <sect2>
11471 <title>Migration to Version 8.0.14</title>
11473 <para>
11474 A dump/restore is not required for those running 8.0.X. However,
11475 if you are upgrading from a version earlier than 8.0.6, see the release
11476 notes for 8.0.6.
11477 </para>
11479 </sect2>
11481 <sect2>
11482 <title>Changes</title>
11484 <itemizedlist>
11486 <listitem>
11487 <para>
11488 Prevent index corruption when a transaction inserts rows and
11489 then aborts close to the end of a concurrent <command>VACUUM</>
11490 on the same table (Tom)
11491 </para>
11492 </listitem>
11494 <listitem>
11495 <para>
11496 Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
11497 </para>
11498 </listitem>
11500 <listitem>
11501 <para>
11502 Fix excessive logging of <acronym>SSL</> error messages (Tom)
11503 </para>
11504 </listitem>
11506 <listitem>
11507 <para>
11508 Fix logging so that log messages are never interleaved when using
11509 the syslogger process (Andrew)
11510 </para>
11511 </listitem>
11513 <listitem>
11514 <para>
11515 Fix crash when <varname>log_min_error_statement</> logging runs out
11516 of memory (Tom)
11517 </para>
11518 </listitem>
11520 <listitem>
11521 <para>
11522 Fix incorrect handling of some foreign-key corner cases (Tom)
11523 </para>
11524 </listitem>
11526 <listitem>
11527 <para>
11528 Prevent <command>CLUSTER</> from failing
11529 due to attempting to process temporary tables of other sessions (Alvaro)
11530 </para>
11531 </listitem>
11533 <listitem>
11534 <para>
11535 Update the time zone database rules, particularly New Zealand's upcoming changes (Tom)
11536 </para>
11537 </listitem>
11539 <listitem>
11540 <para>
11541 Windows socket improvements (Magnus)
11542 </para>
11543 </listitem>
11545 <listitem>
11546 <para>
11547 Suppress timezone name (<literal>%Z</>) in log timestamps on Windows
11548 because of possible encoding mismatches (Tom)
11549 </para>
11550 </listitem>
11552 <listitem>
11553 <para>
11554 Require non-superusers who use <filename>/contrib/dblink</> to use only
11555 password authentication, as a security measure (Joe)
11556 </para>
11557 </listitem>
11559 </itemizedlist>
11561 </sect2>
11562 </sect1>
11564 <sect1 id="release-8-0-13">
11565 <title>Release 8.0.13</title>
11567 <note>
11568 <title>Release date</title>
11569 <simpara>2007-04-23</simpara>
11570 </note>
11572 <para>
11573 This release contains a variety of fixes from 8.0.12,
11574 including a security fix.
11575 For information about new features in the 8.0 major release, see
11576 <xref linkend="release-8-0">.
11577 </para>
11579 <sect2>
11580 <title>Migration to Version 8.0.13</title>
11582 <para>
11583 A dump/restore is not required for those running 8.0.X. However,
11584 if you are upgrading from a version earlier than 8.0.6, see the release
11585 notes for 8.0.6.
11586 </para>
11588 </sect2>
11590 <sect2>
11591 <title>Changes</title>
11593 <itemizedlist>
11595 <listitem>
11596 <para>
11597 Support explicit placement of the temporary-table schema within
11598 <varname>search_path</>, and disable searching it for functions
11599 and operators (Tom)
11600 </para>
11601 <para>
11602 This is needed to allow a security-definer function to set a
11603 truly secure value of <varname>search_path</>. Without it,
11604 an unprivileged SQL user can use temporary objects to execute code
11605 with the privileges of the security-definer function (CVE-2007-2138).
11606 See <command>CREATE FUNCTION</> for more information.
11607 </para>
11608 </listitem>
11610 <listitem>
11611 <para>
11612 <filename>/contrib/tsearch2</> crash fixes (Teodor)
11613 </para>
11614 </listitem>
11616 <listitem>
11617 <para>
11618 Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
11619 <command>UPDATE</> chains (Tom, Pavan Deolasee)
11620 </para>
11621 </listitem>
11623 <listitem>
11624 <para>
11625 Fix PANIC during enlargement of a hash index (bug introduced in 8.0.10)
11626 (Tom)
11627 </para>
11628 </listitem>
11630 <listitem>
11631 <para>
11632 Fix POSIX-style timezone specs to follow new USA DST rules (Tom)
11633 </para>
11634 </listitem>
11636 </itemizedlist>
11638 </sect2>
11639 </sect1>
11641 <sect1 id="release-8-0-12">
11642 <title>Release 8.0.12</title>
11644 <note>
11645 <title>Release date</title>
11646 <simpara>2007-02-07</simpara>
11647 </note>
11649 <para>
11650 This release contains one fix from 8.0.11.
11651 For information about new features in the 8.0 major release, see
11652 <xref linkend="release-8-0">.
11653 </para>
11655 <sect2>
11656 <title>Migration to Version 8.0.12</title>
11658 <para>
11659 A dump/restore is not required for those running 8.0.X. However,
11660 if you are upgrading from a version earlier than 8.0.6, see the release
11661 notes for 8.0.6.
11662 </para>
11664 </sect2>
11666 <sect2>
11667 <title>Changes</title>
11669 <itemizedlist>
11671 <listitem>
11672 <para>
11673 Remove overly-restrictive check for type length in constraints and
11674 functional indexes(Tom)
11675 </para>
11676 </listitem>
11678 </itemizedlist>
11680 </sect2>
11681 </sect1>
11683 <sect1 id="release-8-0-11">
11684 <title>Release 8.0.11</title>
11686 <note>
11687 <title>Release date</title>
11688 <simpara>2007-02-05</simpara>
11689 </note>
11691 <para>
11692 This release contains a variety of fixes from 8.0.10, including
11693 a security fix.
11694 For information about new features in the 8.0 major release, see
11695 <xref linkend="release-8-0">.
11696 </para>
11698 <sect2>
11699 <title>Migration to Version 8.0.11</title>
11701 <para>
11702 A dump/restore is not required for those running 8.0.X. However,
11703 if you are upgrading from a version earlier than 8.0.6, see the release
11704 notes for 8.0.6.
11705 </para>
11707 </sect2>
11709 <sect2>
11710 <title>Changes</title>
11712 <itemizedlist>
11714 <listitem>
11715 <para>
11716 Remove security vulnerabilities that allowed connected users
11717 to read backend memory (Tom)
11718 </para>
11719 <para>
11720 The vulnerabilities involve suppressing the normal check that a SQL
11721 function returns the data type it's declared to, and changing the
11722 data type of a table column (CVE-2007-0555, CVE-2007-0556). These
11723 errors can easily be exploited to cause a backend crash, and in
11724 principle might be used to read database content that the user
11725 should not be able to access.
11726 </para>
11727 </listitem>
11729 <listitem>
11730 <para>
11731 Fix rare bug wherein btree index page splits could fail
11732 due to choosing an infeasible split point (Heikki Linnakangas)
11733 </para>
11734 </listitem>
11736 <listitem>
11737 <para>
11738 Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
11739 </para>
11740 </listitem>
11742 <listitem>
11743 <para>
11744 Tighten security of multi-byte character processing for UTF8 sequences
11745 over three bytes long (Tom)
11746 </para>
11747 </listitem>
11749 </itemizedlist>
11751 </sect2>
11752 </sect1>
11754 <sect1 id="release-8-0-10">
11755 <title>Release 8.0.10</title>
11757 <note>
11758 <title>Release date</title>
11759 <simpara>2007-01-08</simpara>
11760 </note>
11762 <para>
11763 This release contains a variety of fixes from 8.0.9.
11764 For information about new features in the 8.0 major release, see
11765 <xref linkend="release-8-0">.
11766 </para>
11768 <sect2>
11769 <title>Migration to Version 8.0.10</title>
11771 <para>
11772 A dump/restore is not required for those running 8.0.X. However,
11773 if you are upgrading from a version earlier than 8.0.6, see the release
11774 notes for 8.0.6.
11775 </para>
11777 </sect2>
11779 <sect2>
11780 <title>Changes</title>
11782 <itemizedlist>
11784 <listitem>
11785 <para>
11786 Improve handling of <function>getaddrinfo()</> on AIX (Tom)
11787 </para>
11789 <para>
11790 This fixes a problem with starting the statistics collector,
11791 among other things.
11792 </para>
11793 </listitem>
11795 <listitem>
11796 <para>
11797 Fix <quote>failed to re-find parent key</> errors in
11798 <command>VACUUM</> (Tom)
11799 </para>
11800 </listitem>
11802 <listitem>
11803 <para>
11804 Fix race condition for truncation of a large relation across a
11805 gigabyte boundary by <command>VACUUM</> (Tom)
11806 </para>
11807 </listitem>
11809 <listitem>
11810 <para>
11811 Fix bugs affecting multi-gigabyte hash indexes (Tom)
11812 </para>
11813 </listitem>
11815 <listitem>
11816 <para>
11817 Fix possible deadlock in Windows signal handling (Teodor)
11818 </para>
11819 </listitem>
11821 <listitem>
11822 <para>
11823 Fix error when constructing an <literal>ARRAY[]</> made up of multiple
11824 empty elements (Tom)
11825 </para>
11826 </listitem>
11828 <listitem>
11829 <para>
11830 Fix ecpg memory leak during connection (Michael)
11831 </para>
11832 </listitem>
11834 <listitem>
11835 <para>
11836 <function>to_number()</> and <function>to_char(numeric)</>
11837 are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
11838 new <application>initdb</> installs (Tom)
11839 </para>
11841 <para>
11842 This is because <varname>lc_numeric</> can potentially
11843 change the output of these functions.
11844 </para>
11845 </listitem>
11847 <listitem>
11848 <para>
11849 Improve index usage of regular expressions that use parentheses (Tom)
11850 </para>
11852 <para>
11853 This improves <application>psql</> <literal>\d</> performance also.
11854 </para>
11855 </listitem>
11857 <listitem>
11858 <para>
11859 Update timezone database
11860 </para>
11862 <para>
11863 This affects Australian and Canadian daylight-savings rules in
11864 particular.
11865 </para>
11866 </listitem>
11868 </itemizedlist>
11870 </sect2>
11871 </sect1>
11873 <sect1 id="release-8-0-9">
11874 <title>Release 8.0.9</title>
11876 <note>
11877 <title>Release date</title>
11878 <simpara>2006-10-16</simpara>
11879 </note>
11881 <para>
11882 This release contains a variety of fixes from 8.0.8.
11883 For information about new features in the 8.0 major release, see
11884 <xref linkend="release-8-0">.
11885 </para>
11887 <sect2>
11888 <title>Migration to Version 8.0.9</title>
11890 <para>
11891 A dump/restore is not required for those running 8.0.X. However,
11892 if you are upgrading from a version earlier than 8.0.6, see the release
11893 notes for 8.0.6.
11894 </para>
11896 </sect2>
11898 <sect2>
11899 <title>Changes</title>
11901 <itemizedlist>
11902 <listitem><para>Fix crash when referencing <literal>NEW</> row
11903 values in rule WHERE expressions (Tom)</para></listitem>
11904 <listitem><para>Fix core dump when an untyped literal is taken as
11905 ANYARRAY</para></listitem>
11906 <listitem><para>Fix mishandling of AFTER triggers when query contains a SQL
11907 function returning multiple rows (Tom)</para></listitem>
11908 <listitem><para>Fix <command>ALTER TABLE ... TYPE</> to recheck
11909 <literal>NOT NULL</> for <literal>USING</> clause (Tom)</para></listitem>
11910 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
11911 matches for the separator string</para>
11912 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
11913 </para></listitem>
11914 <listitem><para>Fix corner cases in pattern matching for
11915 <application>psql</>'s <literal>\d</> commands</para></listitem>
11916 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
11917 (Teodor)</para></listitem>
11918 <listitem><para>Numerous robustness fixes in <application>ecpg</> (Joachim
11919 Wieland)</para></listitem>
11920 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
11921 <listitem><para>Fix instability of statistics collection on Win32 (Tom, Andrew)</para></listitem>
11922 <listitem><para>Fixes for <systemitem class="osname">AIX</> and
11923 <productname>Intel</> compilers (Tom)</para></listitem>
11924 </itemizedlist>
11926 </sect2>
11927 </sect1>
11929 <sect1 id="release-8-0-8">
11930 <title>Release 8.0.8</title>
11932 <note>
11933 <title>Release date</title>
11934 <simpara>2006-05-23</simpara>
11935 </note>
11937 <para>
11938 This release contains a variety of fixes from 8.0.7,
11939 including patches for extremely serious security issues.
11940 For information about new features in the 8.0 major release, see
11941 <xref linkend="release-8-0">.
11942 </para>
11944 <sect2>
11945 <title>Migration to Version 8.0.8</title>
11947 <para>
11948 A dump/restore is not required for those running 8.0.X. However,
11949 if you are upgrading from a version earlier than 8.0.6, see the release
11950 notes for 8.0.6.
11951 </para>
11953 <para>
11954 Full security against the SQL-injection attacks described in
11955 CVE-2006-2313 and CVE-2006-2314 might require changes in application
11956 code. If you have applications that embed untrustworthy strings
11957 into SQL commands, you should examine them as soon as possible to
11958 ensure that they are using recommended escaping techniques. In
11959 most cases, applications should be using subroutines provided by
11960 libraries or drivers (such as <application>libpq</>'s
11961 <function>PQescapeStringConn()</>) to perform string escaping,
11962 rather than relying on <foreignphrase>ad hoc</> code to do it.
11963 </para>
11964 </sect2>
11966 <sect2>
11967 <title>Changes</title>
11969 <itemizedlist>
11970 <listitem><para>Change the server to reject invalidly-encoded multibyte
11971 characters in all cases (Tatsuo, Tom)</para>
11972 <para>While <productname>PostgreSQL</> has been moving in this direction for
11973 some time, the checks are now applied uniformly to all encodings and all
11974 textual input, and are now always errors not merely warnings. This change
11975 defends against SQL-injection attacks of the type described in CVE-2006-2313.
11976 </para></listitem>
11978 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
11979 <para>As a server-side defense against SQL-injection attacks of the type
11980 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
11981 <literal>\'</> as a representation of ASCII single quote in SQL string
11982 literals. By default, <literal>\'</> is rejected only when
11983 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
11984 GB18030, or UHC), which is the scenario in which SQL injection is possible.
11985 A new configuration parameter <varname>backslash_quote</> is available to
11986 adjust this behavior when needed. Note that full security against
11987 CVE-2006-2314 might require client-side changes; the purpose of
11988 <varname>backslash_quote</> is in part to make it obvious that insecure
11989 clients are insecure.
11990 </para></listitem>
11992 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
11993 aware of encoding considerations and
11994 <varname>standard_conforming_strings</></para>
11995 <para>This fixes <application>libpq</>-using applications for the security
11996 issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
11997 them against the planned changeover to SQL-standard string literal syntax.
11998 Applications that use multiple <productname>PostgreSQL</> connections
11999 concurrently should migrate to <function>PQescapeStringConn()</> and
12000 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
12001 for the settings in use in each database connection. Applications that
12002 do string escaping <quote>by hand</> should be modified to rely on library
12003 routines instead.
12004 </para></listitem>
12006 <listitem><para>Fix some incorrect encoding conversion functions</para>
12007 <para><function>win1251_to_iso</>, <function>alt_to_iso</>,
12008 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
12009 <function>mic_to_euc_tw</> were all broken to varying
12010 extents.
12011 </para></listitem>
12013 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
12014 (Bruce, Jan)</para></listitem>
12016 <listitem><para>Fix bug that sometimes caused OR'd index scans to
12017 miss rows they should have returned</para></listitem>
12019 <listitem><para>Fix WAL replay for case where a btree index has been
12020 truncated</para></listitem>
12022 <listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
12023 <literal>|</> (Tom)</para></listitem>
12025 <listitem><para>Fix <command>SELECT INTO</> and <command>CREATE TABLE AS</> to
12026 create tables in the default tablespace, not the base directory (Kris
12027 Jurka)</para></listitem>
12029 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
12030 Fuhr)</para></listitem>
12032 <listitem><para>Fix for Bonjour on Intel Macs (Ashley Clark)</para></listitem>
12034 <listitem><para>Fix various minor memory leaks</para></listitem>
12036 <listitem><para>Fix problem with password prompting on some Win32 systems
12037 (Robert Kinberg)</para></listitem>
12038 </itemizedlist>
12040 </sect2>
12041 </sect1>
12043 <sect1 id="release-8-0-7">
12044 <title>Release 8.0.7</title>
12046 <note>
12047 <title>Release date</title>
12048 <simpara>2006-02-14</simpara>
12049 </note>
12051 <para>
12052 This release contains a variety of fixes from 8.0.6.
12053 For information about new features in the 8.0 major release, see
12054 <xref linkend="release-8-0">.
12055 </para>
12057 <sect2>
12058 <title>Migration to Version 8.0.7</title>
12060 <para>
12061 A dump/restore is not required for those running 8.0.X. However,
12062 if you are upgrading from a version earlier than 8.0.6, see the release
12063 notes for 8.0.6.
12064 </para>
12065 </sect2>
12067 <sect2>
12068 <title>Changes</title>
12070 <itemizedlist>
12072 <listitem><para>Fix potential crash in <command>SET
12073 SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
12074 <para>An unprivileged user could crash the server process, resulting in
12075 momentary denial of service to other users, if the server has been compiled
12076 with Asserts enabled (which is not the default).
12077 Thanks to Akio Ishida for reporting this problem.
12078 </para></listitem>
12080 <listitem><para>Fix bug with row visibility logic in self-inserted
12081 rows (Tom)</para>
12082 <para>Under rare circumstances a row inserted by the current command
12083 could be seen as already valid, when it should not be. Repairs bug
12084 created in 8.0.4, 7.4.9, and 7.3.11 releases.
12085 </para></listitem>
12087 <listitem><para>Fix race condition that could lead to <quote>file already
12088 exists</> errors during pg_clog and pg_subtrans file creation
12089 (Tom)</para></listitem>
12091 <listitem><para>Fix cases that could lead to crashes if a cache-invalidation
12092 message arrives at just the wrong time (Tom)</para></listitem>
12094 <listitem><para>Properly check <literal>DOMAIN</> constraints for
12095 <literal>UNKNOWN</> parameters in prepared statements
12096 (Neil)</para></listitem>
12098 <listitem><para>Ensure <command>ALTER COLUMN TYPE</> will process
12099 <literal>FOREIGN KEY</>, <literal>UNIQUE</>, and <literal>PRIMARY KEY</>
12100 constraints in the proper order (Nakano Yoshihisa)</para></listitem>
12102 <listitem><para>Fixes to allow restoring dumps that have cross-schema
12103 references to custom operators or operator classes (Tom)</para></listitem>
12105 <listitem><para>Allow <application>pg_restore</> to continue properly after a
12106 <command>COPY</> failure; formerly it tried to treat the remaining
12107 <command>COPY</> data as SQL commands (Stephen Frost)</para></listitem>
12109 <listitem><para>Fix <application>pg_ctl</> <literal>unregister</> crash
12110 when the data directory is not specified (Magnus)</para></listitem>
12112 <listitem><para>Fix <application>ecpg</> crash on AMD64 and PPC
12113 (Neil)</para></listitem>
12115 <listitem><para>Recover properly if error occurs during argument passing
12116 in <application>PL/python</> (Neil)</para></listitem>
12118 <listitem><para>Fix <application>PL/perl</>'s handling of locales on
12119 Win32 to match the backend (Andrew)</para></listitem>
12121 <listitem><para>Fix crash when <literal>log_min_messages</> is set to
12122 <literal>DEBUG3</> or above in <filename>postgresql.conf</> on Win32
12123 (Bruce)</para></listitem>
12125 <listitem><para>Fix <application>pgxs</> <literal>-L</> library path
12126 specification for Win32, Cygwin, OS X, AIX (Bruce)</para></listitem>
12128 <listitem><para>Check that SID is enabled while checking for Win32 admin
12129 privileges (Magnus)</para></listitem>
12131 <listitem><para>Properly reject out-of-range date inputs (Kris
12132 Jurka)</para></listitem>
12134 <listitem><para>Portability fix for testing presence of <function>finite</>
12135 and <function>isinf</> during configure (Tom)</para></listitem>
12137 </itemizedlist>
12139 </sect2>
12140 </sect1>
12142 <sect1 id="release-8-0-6">
12143 <title>Release 8.0.6</title>
12145 <note>
12146 <title>Release date</title>
12147 <simpara>2006-01-09</simpara>
12148 </note>
12150 <para>
12151 This release contains a variety of fixes from 8.0.5.
12152 For information about new features in the 8.0 major release, see
12153 <xref linkend="release-8-0">.
12154 </para>
12156 <sect2>
12157 <title>Migration to Version 8.0.6</title>
12159 <para>
12160 A dump/restore is not required for those running 8.0.X. However,
12161 if you are upgrading from a version earlier than 8.0.3, see the release
12162 notes for 8.0.3.
12163 Also, you might need to <command>REINDEX</> indexes on textual
12164 columns after updating, if you are affected by the locale or
12165 <application>plperl</> issues described below.
12166 </para>
12167 </sect2>
12169 <sect2>
12170 <title>Changes</title>
12172 <itemizedlist>
12174 <listitem><para>Fix Windows code so that postmaster will continue rather
12175 than exit if there is no more room in ShmemBackendArray (Magnus)</para>
12176 <para>The previous behavior could lead to a denial-of-service situation if too
12177 many connection requests arrive close together. This applies
12178 <emphasis>only</> to the Windows port.</para></listitem>
12180 <listitem><para>Fix bug introduced in 8.0 that could allow ReadBuffer
12181 to return an already-used page as new, potentially causing loss of
12182 recently-committed data (Tom)</para></listitem>
12184 <listitem><para>Fix for protocol-level Describe messages issued
12185 outside a transaction or in a failed transaction (Tom)</para></listitem>
12187 <listitem><para>Fix character string comparison for locales that consider
12188 different character combinations as equal, such as Hungarian (Tom)</para>
12189 <para>This might require <command>REINDEX</> to fix existing indexes on
12190 textual columns.</para></listitem>
12192 <listitem><para>Set locale environment variables during postmaster startup
12193 to ensure that <application>plperl</> won't change the locale later</para>
12194 <para>This fixes a problem that occurred if the <application>postmaster</> was
12195 started with environment variables specifying a different locale than what
12196 <application>initdb</> had been told. Under these conditions, any use of
12197 <application>plperl</> was likely to lead to corrupt indexes. You might need
12198 <command>REINDEX</> to fix existing indexes on
12199 textual columns if this has happened to you.</para></listitem>
12201 <listitem><para>Allow more flexible relocation of installation
12202 directories (Tom)</para>
12203 <para>Previous releases supported relocation only if all installation
12204 directory paths were the same except for the last component.</para></listitem>
12206 <listitem><para>Fix longstanding bug in strpos() and regular expression
12207 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
12208 </para></listitem>
12210 <listitem><para>Various fixes for functions returning <literal>RECORD</>s
12211 (Tom) </para></listitem>
12213 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
12214 which caused it not to use all available salt space for MD5 and
12215 XDES algorithms (Marko Kreen, Solar Designer)</para>
12216 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
12218 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
12219 rather than crashing, when the number of columns specified is different from
12220 what's actually returned by the query (Joe)</para></listitem>
12222 </itemizedlist>
12224 </sect2>
12225 </sect1>
12227 <sect1 id="release-8-0-5">
12228 <title>Release 8.0.5</title>
12230 <note>
12231 <title>Release date</title>
12232 <simpara>2005-12-12</simpara>
12233 </note>
12235 <para>
12236 This release contains a variety of fixes from 8.0.4.
12237 For information about new features in the 8.0 major release, see
12238 <xref linkend="release-8-0">.
12239 </para>
12241 <sect2>
12242 <title>Migration to Version 8.0.5</title>
12244 <para>
12245 A dump/restore is not required for those running 8.0.X. However,
12246 if you are upgrading from a version earlier than 8.0.3, see the release
12247 notes for 8.0.3.
12248 </para>
12249 </sect2>
12251 <sect2>
12252 <title>Changes</title>
12254 <itemizedlist>
12256 <listitem><para>Fix race condition in transaction log management</para>
12257 <para>There was a narrow window in which an I/O operation could be initiated
12258 for the wrong page, leading to an Assert failure or data
12259 corruption.</para>
12260 </listitem>
12262 <listitem><para>Fix bgwriter problems after recovering from errors
12263 (Tom)</para>
12264 <para>
12265 The background writer was found to leak buffer pins after write errors.
12266 While not fatal in itself, this might lead to mysterious blockages of
12267 later VACUUM commands.
12268 </para>
12269 </listitem>
12271 <listitem><para>Prevent failure if client sends Bind protocol message
12272 when current transaction is already aborted</para></listitem>
12274 <listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
12276 <listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
12278 <listitem><para>Retry file reads and writes after Windows
12279 NO_SYSTEM_RESOURCES error (Qingqing Zhou)</para></listitem>
12281 <listitem><para>Fix intermittent failure when <varname>log_line_prefix</>
12282 includes <literal>%i</></para></listitem>
12284 <listitem><para>Fix <application>psql</> performance issue with long scripts
12285 on Windows (Merlin Moncure)</para></listitem>
12287 <listitem><para>Fix missing updates of <filename>pg_group</> flat
12288 file</para></listitem>
12290 <listitem><para>Fix longstanding planning error for outer joins</para>
12291 <para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
12292 only supported with merge-joinable join conditions</>.</para></listitem>
12294 <listitem><para>Postpone timezone initialization until after
12295 <filename>postmaster.pid</> is created</para>
12296 <para>This avoids confusing startup scripts that expect the pid file to appear
12297 quickly.</para></listitem>
12299 <listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
12300 table has been dropped</para></listitem>
12302 <listitem><para>Fix problems with whole-row references (<literal>foo.*</>)
12303 to subquery results</para></listitem>
12304 </itemizedlist>
12306 </sect2>
12307 </sect1>
12309 <sect1 id="release-8-0-4">
12310 <title>Release 8.0.4</title>
12312 <note>
12313 <title>Release date</title>
12314 <simpara>2005-10-04</simpara>
12315 </note>
12317 <para>
12318 This release contains a variety of fixes from 8.0.3.
12319 For information about new features in the 8.0 major release, see
12320 <xref linkend="release-8-0">.
12321 </para>
12323 <sect2>
12324 <title>Migration to Version 8.0.4</title>
12326 <para>
12327 A dump/restore is not required for those running 8.0.X. However,
12328 if you are upgrading from a version earlier than 8.0.3, see the release
12329 notes for 8.0.3.
12330 </para>
12331 </sect2>
12333 <sect2>
12334 <title>Changes</title>
12336 <itemizedlist>
12337 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
12338 <literal>ctid</> chains too soon, and add more checking in code that follows
12339 <literal>ctid</> links</para>
12340 <para>This fixes a long-standing problem that could cause crashes in very rare
12341 circumstances.</para></listitem>
12342 <listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
12343 length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
12344 <para>In prior releases, the padding of <type>CHAR()</> was incorrect
12345 because it only padded to the specified number of bytes without
12346 considering how many characters were stored.</para></listitem>
12347 <listitem><para>Force a checkpoint before committing <command>CREATE
12348 DATABASE</></para>
12349 <para>This should fix recent reports of <quote>index is not a btree</>
12350 failures when a crash occurs shortly after <command>CREATE
12351 DATABASE</>.</para></listitem>
12352 <listitem><para>Fix the sense of the test for read-only transaction
12353 in <command>COPY</></para>
12354 <para>The code formerly prohibited <command>COPY TO</>, where it should
12355 prohibit <command>COPY FROM</>.
12356 </para></listitem>
12357 <listitem><para>Handle consecutive embedded newlines in <command>COPY</>
12358 CSV-mode input</para></listitem>
12359 <listitem><para>Fix <function>date_trunc(week)</> for dates near year
12360 end</para></listitem>
12361 <listitem><para>Fix planning problem with outer-join ON clauses that reference
12362 only the inner-side relation</para></listitem>
12363 <listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
12364 cases</para></listitem>
12365 <listitem><para>Fix overenthusiastic optimization of <literal>x IN (SELECT
12366 DISTINCT ...)</> and related cases</para></listitem>
12367 <listitem><para>Fix mis-planning of queries with small <literal>LIMIT</>
12368 values due to poorly thought out <quote>fuzzy</> cost
12369 comparison</para></listitem>
12370 <listitem><para>Make <function>array_in</> and <function>array_recv</> more
12371 paranoid about validating their OID parameter</para></listitem>
12372 <listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
12373 a...</> with GiST index on column <literal>a</></para></listitem>
12374 <listitem><para>Improve robustness of datetime parsing</para></listitem>
12375 <listitem><para>Improve checking for partially-written WAL
12376 pages</para></listitem>
12377 <listitem><para>Improve robustness of signal handling when SSL is
12378 enabled</para></listitem>
12379 <listitem><para>Improve MIPS and M68K spinlock code</para></listitem>
12380 <listitem><para>Don't try to open more than <literal>max_files_per_process</>
12381 files during postmaster startup</para></listitem>
12382 <listitem><para>Various memory leakage fixes</para></listitem>
12383 <listitem><para>Various portability improvements</para></listitem>
12384 <listitem><para>Update timezone data files</para></listitem>
12385 <listitem><para>Improve handling of DLL load failures on Windows</para></listitem>
12386 <listitem><para>Improve random-number generation on Windows</para></listitem>
12387 <listitem><para>Make <literal>psql -f filename</> return a nonzero exit code
12388 when opening the file fails</para></listitem>
12389 <listitem><para>Change <application>pg_dump</> to handle inherited check
12390 constraints more reliably</para></listitem>
12391 <listitem><para>Fix password prompting in <application>pg_restore</> on
12392 Windows</para></listitem>
12393 <listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
12394 the variable is of pass-by-reference type</para></listitem>
12395 <listitem><para>Fix PL/Perl <literal>%_SHARED</> so it's actually
12396 shared</para></listitem>
12397 <listitem><para>Fix <filename>contrib/pg_autovacuum</> to allow sleep
12398 intervals over 2000 sec</para></listitem>
12399 <listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
12400 code</para></listitem>
12401 </itemizedlist>
12403 </sect2>
12404 </sect1>
12406 <sect1 id="release-8-0-3">
12407 <title>Release 8.0.3</title>
12409 <note>
12410 <title>Release date</title>
12411 <simpara>2005-05-09</simpara>
12412 </note>
12414 <para>
12415 This release contains a variety of fixes from 8.0.2, including several
12416 security-related issues.
12417 For information about new features in the 8.0 major release, see
12418 <xref linkend="release-8-0">.
12419 </para>
12421 <sect2>
12422 <title>Migration to Version 8.0.3</title>
12424 <para>
12425 A dump/restore is not required for those running 8.0.X. However,
12426 it is one possible way of handling two significant security problems
12427 that have been found in the initial contents of 8.0.X system
12428 catalogs. A dump/initdb/reload sequence using 8.0.3's initdb will
12429 automatically correct these problems.
12430 </para>
12432 <para>
12433 The larger security problem is that the built-in character set encoding
12434 conversion functions can be invoked from SQL commands by unprivileged
12435 users, but the functions were not designed for such use and are not
12436 secure against malicious choices of arguments. The fix involves changing
12437 the declared parameter list of these functions so that they can no longer
12438 be invoked from SQL commands. (This does not affect their normal use
12439 by the encoding conversion machinery.)
12440 </para>
12442 <para>
12443 The lesser problem is that the <filename>contrib/tsearch2</> module
12444 creates several functions that are improperly declared to return
12445 <type>internal</> when they do not accept <type>internal</> arguments.
12446 This breaks type safety for all functions using <type>internal</>
12447 arguments.
12448 </para>
12450 <para>
12451 It is strongly recommended that all installations repair these errors,
12452 either by initdb or by following the manual repair procedure given
12453 below. The errors at least allow unprivileged database users to crash
12454 their server process, and might allow unprivileged users to gain the
12455 privileges of a database superuser.
12456 </para>
12458 <para>
12459 If you wish not to do an initdb, perform the same manual repair
12460 procedures shown in the <link linkend="release-7-4-8">7.4.8 release
12461 notes</link>.
12462 </para>
12463 </sect2>
12465 <sect2>
12466 <title>Changes</title>
12468 <itemizedlist>
12469 <listitem><para>Change encoding function signature to prevent
12470 misuse</para></listitem>
12471 <listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
12472 <type>INTERNAL</> function results</para></listitem>
12473 <listitem><para>Guard against incorrect second parameter to
12474 <function>record_out</></para></listitem>
12475 <listitem><para>Repair ancient race condition that allowed a transaction to be
12476 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
12477 than for other purposes</para>
12478 <para>This is an extremely serious bug since it could lead to apparent
12479 data inconsistencies being briefly visible to applications.</para></listitem>
12480 <listitem><para>Repair race condition between relation extension and
12481 VACUUM</para>
12482 <para>This could theoretically have caused loss of a page's worth of
12483 freshly-inserted data, although the scenario seems of very low probability.
12484 There are no known cases of it having caused more than an Assert failure.
12485 </para></listitem>
12486 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
12487 <para>
12488 The comparison code was wrong in the case where the
12489 <literal>--enable-integer-datetimes</> configuration switch had been used.
12490 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
12491 it will need to be <command>REINDEX</>ed after installing this update, because
12492 the fix corrects the sort order of column values.
12493 </para></listitem>
12494 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
12495 <type>TIME WITH TIME ZONE</> values</para></listitem>
12496 <listitem><para>Fix mis-display of negative fractional seconds in
12497 <type>INTERVAL</> values</para>
12498 <para>
12499 This error only occurred when the
12500 <literal>--enable-integer-datetimes</> configuration switch had been used.
12501 </para></listitem>
12502 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
12503 correctly (Neil)</para></listitem>
12504 <listitem><para>Still more 64-bit fixes for
12505 <filename>contrib/intagg</></para></listitem>
12506 <listitem><para>Prevent incorrect optimization of functions returning
12507 <type>RECORD</></para></listitem>
12508 <listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
12509 <listitem><para>Fix Borland makefile for libpq</para></listitem>
12510 <listitem><para>Fix <filename>contrib/btree_gist</> for <type>timetz</> type
12511 (Teodor)</para></listitem>
12512 <listitem><para>Make <command>pg_ctl</> check the PID found in
12513 <filename>postmaster.pid</> to see if it is still a live
12514 process</para></listitem>
12515 <listitem><para>Fix <command>pg_dump</>/<command>pg_restore</> problems caused
12516 by addition of dump timestamps</para></listitem>
12517 <listitem><para>Fix interaction between materializing holdable cursors and
12518 firing deferred triggers during transaction commit</para></listitem>
12519 <listitem><para>Fix memory leak in SQL functions returning pass-by-reference
12520 data types</para></listitem>
12521 </itemizedlist>
12523 </sect2>
12524 </sect1>
12526 <sect1 id="release-8-0-2">
12527 <title>Release 8.0.2</title>
12529 <note>
12530 <title>Release date</title>
12531 <simpara>2005-04-07</simpara>
12532 </note>
12534 <para>
12535 This release contains a variety of fixes from 8.0.1.
12536 For information about new features in the 8.0 major release, see
12537 <xref linkend="release-8-0">.
12538 </para>
12540 <sect2>
12541 <title>Migration to Version 8.0.2</title>
12543 <para>
12544 A dump/restore is not required for those running 8.0.*.
12545 This release updates the major version number of the
12546 <productname>PostgreSQL</productname> libraries, so it might be
12547 necessary to re-link some user applications if they cannot
12548 find the properly-numbered shared library.
12549 </para>
12550 </sect2>
12552 <sect2>
12553 <title>Changes</title>
12555 <itemizedlist>
12556 <listitem><para>Increment the major version number of all interface
12557 libraries (Bruce)</para>
12558 <para>
12559 This should have been done in 8.0.0. It is required so 7.4.X versions
12560 of PostgreSQL client applications, like <application>psql</>,
12561 can be used on the same machine as 8.0.X applications. This might require
12562 re-linking user applications that use these libraries.
12563 </para></listitem>
12564 <listitem><para>Add Windows-only <varname>wal_sync_method</> setting of
12565 <option>fsync_writethrough</> (Magnus, Bruce)</para>
12566 <para>
12567 This setting causes <productname>PostgreSQL</productname> to write through
12568 any disk-drive write cache when writing to WAL.
12569 This behavior was formerly called <option>fsync</>, but was
12570 renamed because it acts quite differently from <option>fsync</> on other
12571 platforms.
12572 </para>
12573 </listitem>
12574 <listitem><para>Enable the <varname>wal_sync_method</> setting of
12575 <option>open_datasync</> on Windows, and make it the default for that
12576 platform (Magnus, Bruce)</para>
12577 <para>
12578 Because the default is no longer <option>fsync_writethrough</>,
12579 data loss is possible during a power failure if the disk drive has
12580 write caching enabled. To turn off the write cache on Windows,
12581 from the <application>Device Manager</>, choose the drive properties,
12582 then <literal>Policies</>.
12583 </para>
12584 </listitem>
12585 <listitem><para>New cache management algorithm <acronym>2Q</> replaces
12586 <acronym>ARC</> (Tom)</para>
12587 <para>
12588 This was done to avoid a pending US patent on <acronym>ARC</>. The
12589 <acronym>2Q</> code might be a few percentage points slower than
12590 <acronym>ARC</> for some work loads. A better cache management algorithm
12591 will appear in 8.1.
12592 </para></listitem>
12593 <listitem><para>Planner adjustments to improve behavior on freshly-created
12594 tables (Tom)</para></listitem>
12595 <listitem><para>Allow plpgsql to assign to an element of an array that is
12596 initially <literal>NULL</> (Tom)</para>
12597 <para>
12598 Formerly the array would remain <literal>NULL</>, but now it becomes a
12599 single-element array. The main SQL engine was changed to handle
12600 <command>UPDATE</> of a null array value this way in 8.0, but the similar
12601 case in plpgsql was overlooked.
12602 </para>
12603 </listitem>
12604 <listitem><para>Convert <literal>\r\n</> and <literal>\r</> to <literal>\n</>
12605 in plpython function bodies (Michael Fuhr)</para>
12606 <para>
12607 This prevents syntax errors when plpython code is written on a Windows or
12608 Mac client.
12609 </para>
12610 </listitem>
12611 <listitem><para>Allow SPI cursors to handle utility commands that return rows,
12612 such as <command>EXPLAIN</> (Tom)</para></listitem>
12613 <listitem><para>Fix <command>CLUSTER</> failure after <command>ALTER TABLE
12614 SET WITHOUT OIDS</> (Tom)</para></listitem>
12615 <listitem><para>Reduce memory usage of <command>ALTER TABLE ADD COLUMN</>
12616 (Neil)</para></listitem>
12617 <listitem><para>Fix <command>ALTER LANGUAGE RENAME</> (Tom)</para></listitem>
12618 <listitem><para>Document the Windows-only <literal>register</> and
12619 <literal>unregister</> options of <application>pg_ctl</> (Magnus)</para></listitem>
12620 <listitem><para>Ensure operations done during backend shutdown are counted by
12621 statistics collector</para>
12622 <para>
12623 This is expected to resolve reports of <application>pg_autovacuum</>
12624 not vacuuming the system catalogs often enough &mdash; it was not being
12625 told about catalog deletions caused by temporary table removal during
12626 backend exit.
12627 </para></listitem>
12628 <listitem><para>Change the Windows default for configuration parameter
12629 <varname>log_destination</> to <option>eventlog</> (Magnus)</para>
12630 <para>
12631 By default, a server running on Windows will now send log output to the
12632 Windows event logger rather than standard error.
12633 </para></listitem>
12634 <listitem><para>Make Kerberos authentication work on Windows (Magnus)</para></listitem>
12635 <listitem><para>Allow <command>ALTER DATABASE RENAME</> by superusers
12636 who aren't flagged as having CREATEDB privilege (Tom)</para></listitem>
12637 <listitem><para>Modify WAL log entries for <command>CREATE</> and
12638 <command>DROP DATABASE</> to not specify absolute paths (Tom)</para>
12639 <para>This allows point-in-time recovery on a different machine with possibly
12640 different database location. Note that <command>CREATE TABLESPACE</> still
12641 poses a hazard in such situations.
12642 </para></listitem>
12643 <listitem><para>Fix crash from a backend exiting with an open transaction
12644 that created a table and opened a cursor on it (Tom)</para></listitem>
12645 <listitem><para>Fix <function>array_map()</> so it can call PL functions
12646 (Tom)</para></listitem>
12647 <listitem><para>Several <filename>contrib/tsearch2</> and
12648 <filename>contrib/btree_gist</> fixes (Teodor)
12649 </para></listitem>
12650 <listitem><para>Fix crash of some <filename>contrib/pgcrypto</>
12651 functions on some platforms (Marko Kreen)</para></listitem>
12652 <listitem><para>Fix <filename>contrib/intagg</> for 64-bit platforms
12653 (Tom)</para></listitem>
12654 <listitem><para>Fix ecpg bugs in parsing of <command>CREATE</> statement
12655 (Michael)</para></listitem>
12656 <listitem><para>Work around gcc bug on powerpc and amd64 causing problems in
12657 ecpg (Christof Petig)</para></listitem>
12658 <listitem><para>Do not use locale-aware versions of <function>upper()</>,
12659 <function>lower()</>, and <function>initcap()</> when the locale is
12660 <literal>C</> (Bruce)</para>
12661 <para>
12662 This allows these functions to work on platforms that generate errors
12663 for non-7-bit data when the locale is <literal>C</>.
12664 </para></listitem>
12665 <listitem><para>Fix <function>quote_ident()</> to quote names that match keywords (Tom)</para></listitem>
12666 <listitem><para>Fix <function>to_date()</> to behave reasonably when
12667 <literal>CC</> and <literal>YY</> fields are both used (Karel)</para></listitem>
12668 <listitem><para>Prevent <function>to_char(interval)</> from failing
12669 when given a zero-month interval (Tom)</para></listitem>
12670 <listitem><para>Fix wrong week returned by <function>date_trunc('week')</>
12671 (Bruce)</para>
12672 <para>
12673 <function>date_trunc('week')</>
12674 returned the wrong year for the first few days of January in some years.
12675 </para></listitem>
12676 <listitem><para>Use the correct default mask length for class <literal>D</>
12677 addresses in <type>INET</> data types (Tom)</para></listitem>
12678 </itemizedlist>
12680 </sect2>
12681 </sect1>
12683 <sect1 id="release-8-0-1">
12684 <title>Release 8.0.1</title>
12686 <note>
12687 <title>Release date</title>
12688 <simpara>2005-01-31</simpara>
12689 </note>
12691 <para>
12692 This release contains a variety of fixes from 8.0.0, including several
12693 security-related issues.
12694 For information about new features in the 8.0 major release, see
12695 <xref linkend="release-8-0">.
12696 </para>
12698 <sect2>
12699 <title>Migration to Version 8.0.1</title>
12701 <para>
12702 A dump/restore is not required for those running 8.0.0.
12703 </para>
12704 </sect2>
12706 <sect2>
12707 <title>Changes</title>
12709 <itemizedlist>
12710 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
12711 <para>
12712 On platforms that will automatically execute initialization functions of a
12713 shared library (this includes at least Windows and ELF-based Unixen),
12714 <command>LOAD</> can be used to make the server execute arbitrary code.
12715 Thanks to NGS Software for reporting this.</para></listitem>
12716 <listitem><para>Check that creator of an aggregate function has the right to
12717 execute the specified transition functions</para>
12718 <para>
12719 This oversight made it possible to bypass denial of EXECUTE
12720 permission on a function.</para></listitem>
12721 <listitem><para>Fix security and 64-bit issues in
12722 contrib/intagg</para></listitem>
12723 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
12724 Jurka)</para></listitem>
12725 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
12726 many parameters (Neil)</para></listitem>
12727 <listitem><para>Make <command>ALTER TABLE ADD COLUMN</> enforce domain
12728 constraints in all cases</para></listitem>
12729 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
12730 <para>
12731 The result of the join was mistakenly supposed to be sorted the same as the
12732 left input. This could not only deliver mis-sorted output to the user, but
12733 in case of nested merge joins could give outright wrong answers.
12734 </para></listitem>
12735 <listitem><para>Improve planning of grouped aggregate queries</para></listitem>
12736 <listitem><para><command>ROLLBACK TO <replaceable>savepoint</></command>
12737 closes cursors created since the savepoint</para></listitem>
12738 <listitem><para>Fix inadequate backend stack size on Windows</para></listitem>
12739 <listitem><para>Avoid SHGetSpecialFolderPath() on Windows
12740 (Magnus)</para></listitem>
12741 <listitem><para>Fix some problems in running pg_autovacuum as a Windows
12742 service (Dave Page)</para></listitem>
12743 <listitem><para>Multiple minor bug fixes in
12744 pg_dump/pg_restore</para></listitem>
12745 <listitem><para>Fix ecpg segfault with named structs used in
12746 typedefs (Michael)</para></listitem>
12747 </itemizedlist>
12749 </sect2>
12750 </sect1>
12752 <sect1 id="release-8-0">
12753 <title>Release 8.0</title>
12755 <note>
12756 <title>Release date</title>
12757 <simpara>2005-01-19</simpara>
12758 </note>
12760 <sect2>
12761 <title>Overview</title>
12763 <para>
12764 Major changes in this release:
12765 </para>
12767 <variablelist>
12768 <varlistentry>
12769 <term>
12770 Microsoft Windows Native Server
12771 </term>
12773 <listitem>
12774 <para>
12775 This is the first <productname>PostgreSQL</productname> release
12776 to run natively on <trademark class="registered">Microsoft Windows</> as
12777 a server. It can run as a <productname>Windows</> service. This
12778 release supports NT-based Windows releases like
12779 <productname>Windows 2000 SP4</>, <productname>Windows XP</>, and
12780 <productname>Windows 2003</>. Older releases like
12781 <productname>Windows 95</>, <productname>Windows 98</>, and
12782 <productname>Windows ME</> are not supported because these operating
12783 systems do not have the infrastructure to support
12784 <productname>PostgreSQL</productname>. A separate installer
12785 project has been created to ease installation on
12786 <productname>Windows</> &mdash; see <ulink
12787 url="http://www.postgresql.org/ftp/win32/"></ulink>.
12788 </para>
12790 <para>
12791 Although tested throughout our release cycle, the Windows port
12792 does not have the benefit of years of use in production
12793 environments that <productname>PostgreSQL</productname> has on
12794 Unix platforms. Therefore it should be treated with the same
12795 level of caution as you would a new product.
12796 </para>
12798 <para>
12799 Previous releases required the Unix emulation toolkit
12800 <productname>Cygwin</> in order to run the server on Windows
12801 operating systems. <productname>PostgreSQL</productname> has
12802 supported native clients on Windows for many years.
12803 </para>
12804 </listitem>
12805 </varlistentry>
12807 <varlistentry>
12808 <term>
12809 Savepoints
12810 </term>
12812 <listitem>
12813 <para>
12814 Savepoints allow specific parts of a transaction to be aborted
12815 without affecting the remainder of the transaction. Prior
12816 releases had no such capability; there was no way to recover
12817 from a statement failure within a transaction except by
12818 aborting the whole transaction. This feature is valuable for
12819 application writers who require error recovery within a
12820 complex transaction.
12821 </para>
12822 </listitem>
12823 </varlistentry>
12825 <varlistentry>
12826 <term>
12827 Point-In-Time Recovery
12828 </term>
12830 <listitem>
12831 <para>
12832 In previous releases there was no way to recover from disk
12833 drive failure except to restore from a previous backup or use
12834 a standby replication server. Point-in-time recovery allows
12835 continuous backup of the server. You can recover either to
12836 the point of failure or to some transaction in the past.
12837 </para>
12838 </listitem>
12839 </varlistentry>
12841 <varlistentry>
12842 <term>
12843 Tablespaces
12844 </term>
12846 <listitem>
12847 <para>
12848 Tablespaces allow administrators to select different file systems
12849 for storage of individual tables, indexes, and databases.
12850 This improves performance and control over disk space
12851 usage. Prior releases used <application>initlocation</> and
12852 manual symlink management for such tasks.
12853 </para>
12854 </listitem>
12855 </varlistentry>
12857 <varlistentry>
12858 <term>
12859 Improved Buffer Management, <command>CHECKPOINT</command>,
12860 <command>VACUUM</command>
12861 </term>
12863 <listitem>
12864 <para>
12865 This release has a more intelligent buffer replacement strategy,
12866 which will make better use of available shared buffers and
12867 improve performance. The performance impact of vacuum and
12868 checkpoints is also lessened.
12869 </para>
12870 </listitem>
12871 </varlistentry>
12873 <varlistentry>
12874 <term>
12875 Change Column Types
12876 </term>
12878 <listitem>
12879 <para>
12880 A column's data type can now be changed with <command>ALTER
12881 TABLE</command>.
12882 </para>
12883 </listitem>
12884 </varlistentry>
12886 <varlistentry>
12887 <term>
12888 New Perl Server-Side Language
12889 </term>
12891 <listitem>
12892 <para>
12893 A new version of the <application>plperl</> server-side language now
12894 supports a persistent shared storage area, triggers, returning records
12895 and arrays of records, and SPI calls to access the database.
12896 </para>
12897 </listitem>
12898 </varlistentry>
12900 <varlistentry>
12901 <term>
12902 Comma-separated-value (CSV) support in <command>COPY</command>
12903 </term>
12905 <listitem>
12906 <para>
12907 <command>COPY</command> can now read and write
12908 comma-separated-value files. It has the flexibility to
12909 interpret nonstandard quoting and separation characters too.
12910 </para>
12911 </listitem>
12912 </varlistentry>
12914 </variablelist>
12915 </sect2>
12917 <sect2>
12918 <title>Migration to Version 8.0</title>
12920 <para>
12921 A dump/restore using <application>pg_dump</application> is
12922 required for those wishing to migrate data from any previous
12923 release.
12924 </para>
12926 <para>
12927 Observe the following incompatibilities:
12928 </para>
12930 <itemizedlist>
12932 <listitem>
12933 <para>
12934 In <option>READ COMMITTED</> serialization mode, volatile functions
12935 now see the results of concurrent transactions committed up to the
12936 beginning of each statement within the function, rather than up to the
12937 beginning of the interactive command that called the function.
12938 </para>
12939 </listitem>
12941 <listitem>
12942 <para>
12943 Functions declared <option>STABLE</> or <option>IMMUTABLE</> always
12944 use the snapshot of the calling query, and therefore do not see the
12945 effects of actions taken after the calling query starts, whether in
12946 their own transaction or other transactions. Such a function must be
12947 read-only, too, meaning that it cannot use any SQL commands other than
12948 <command>SELECT</>.
12949 </para>
12950 </listitem>
12952 <listitem>
12953 <para>
12954 Nondeferred <option>AFTER</> triggers are now fired immediately
12955 after completion of the triggering query, rather than upon
12956 finishing the current interactive command. This makes a
12957 difference when the triggering query occurred within a function:
12958 the trigger is invoked before the function proceeds to its next
12959 operation.
12960 </para>
12961 </listitem>
12963 <listitem>
12964 <para>
12965 Server configuration parameters <varname>virtual_host</> and
12966 <varname>tcpip_socket</> have been replaced with a more general
12967 parameter <varname>listen_addresses</>. Also, the server now listens on
12968 <literal>localhost</> by default, which eliminates the need for the
12969 <literal>-i</> postmaster switch in many scenarios.
12970 </para>
12971 </listitem>
12973 <listitem>
12974 <para>
12975 Server configuration parameters <varname>SortMem</> and
12976 <varname>VacuumMem</> have been renamed to <varname>work_mem</>
12977 and <varname>maintenance_work_mem</> to better reflect their
12978 use. The original names are still supported in
12979 <command>SET</command> and <command>SHOW</command>.
12980 </para>
12981 </listitem>
12983 <listitem>
12984 <para>
12985 Server configuration parameters <varname>log_pid</>,
12986 <varname>log_timestamp</>, and <varname>log_source_port</> have been
12987 replaced with a more general parameter <varname>log_line_prefix</>.
12988 </para>
12989 </listitem>
12991 <listitem>
12992 <para>
12993 Server configuration parameter <varname>syslog</> has been
12994 replaced with a more logical <varname>log_destination</> variable to
12995 control the log output destination.
12996 </para>
12997 </listitem>
12999 <listitem>
13000 <para>
13001 Server configuration parameter <varname>log_statement</> has been
13002 changed so it can selectively log just database modification or
13003 data definition statements. Server configuration parameter
13004 <varname>log_duration</> now prints only when <varname>log_statement</>
13005 prints the query.
13006 </para>
13007 </listitem>
13009 <listitem>
13010 <para>
13011 Server configuration parameter <varname>max_expr_depth</> parameter has
13012 been replaced with <varname>max_stack_depth</> which measures the
13013 physical stack size rather than the expression nesting depth. This
13014 helps prevent session termination due to stack overflow caused by
13015 recursive functions.
13016 </para>
13017 </listitem>
13019 <listitem>
13020 <para>
13021 The <function>length()</> function no longer counts trailing spaces in
13022 <type>CHAR(n)</> values.
13023 </para>
13024 </listitem>
13026 <listitem>
13027 <para>
13028 Casting an integer to <type>BIT(N)</> selects the rightmost N bits of the
13029 integer, not the leftmost N bits as before.
13030 </para>
13031 </listitem>
13033 <listitem>
13034 <para>
13035 Updating an element or slice of a NULL array value now produces
13036 a nonnull array result, namely an array containing
13037 just the assigned-to positions.
13038 </para>
13039 </listitem>
13041 <listitem>
13042 <para>
13043 Syntax checking of array input values has been tightened up
13044 considerably. Junk that was previously allowed in odd places with
13045 odd results now causes an error. Empty-string element values
13046 must now be written as <literal>""</>, rather than writing nothing.
13047 Also changed behavior with respect to whitespace surrounding
13048 array elements: trailing whitespace is now ignored, for symmetry
13049 with leading whitespace (which has always been ignored).
13050 </para>
13051 </listitem>
13053 <listitem>
13054 <para>
13055 Overflow in integer arithmetic operations is now detected and
13056 reported as an error.
13057 </para>
13058 </listitem>
13060 <listitem>
13061 <para>
13062 The arithmetic operators associated with the single-byte
13063 <type>"char"</> data type have been removed.
13064 </para>
13065 </listitem>
13067 <listitem>
13068 <para>
13069 The <function>extract()</> function (also called
13070 <function>date_part</>) now returns the proper year for BC dates.
13071 It previously returned one less than the correct year. The
13072 function now also returns the proper values for millennium and
13073 century.
13074 </para>
13075 </listitem>
13077 <listitem>
13078 <para>
13079 <type>CIDR</> values now must have their nonmasked bits be zero.
13080 For example, we no longer allow
13081 <literal>204.248.199.1/31</literal> as a <type>CIDR</> value. Such
13082 values should never have been accepted by
13083 <productname>PostgreSQL</productname> and will now be rejected.
13084 </para>
13085 </listitem>
13087 <listitem>
13088 <para>
13089 <command>EXECUTE</command> now returns a completion tag that
13090 matches the executed statement.
13091 </para>
13092 </listitem>
13094 <listitem>
13095 <para>
13096 <application>psql</>'s <command>\copy</> command now reads or
13097 writes to the query's <literal>stdin/stdout</>, rather than
13098 <application>psql</>'s <literal>stdin/stdout</>. The previous
13099 behavior can be accessed via new
13100 <option>pstdin</>/<option>pstdout</> parameters.
13101 </para>
13102 </listitem>
13104 <listitem>
13105 <para>
13106 The JDBC client interface has been removed from the core
13107 distribution, and is now hosted at <ulink url=
13108 "http://jdbc.postgresql.org"></ulink>.
13109 </para>
13110 </listitem>
13112 <listitem>
13113 <para>
13114 The Tcl client interface has also been removed. There are several
13115 Tcl interfaces now hosted at <ulink url=
13116 "http://gborg.postgresql.org"></ulink>.
13117 </para>
13118 </listitem>
13120 <listitem>
13121 <para>
13122 The server now uses its own time zone database, rather than the
13123 one supplied by the operating system. This will provide consistent
13124 behavior across all platforms. In most cases, there should be
13125 little noticeable difference in time zone behavior, except that
13126 the time zone names used by <command>SET</>/<command>SHOW</>
13127 <varname>TimeZone</> might be different from what your platform provides.
13128 </para>
13129 </listitem>
13131 <listitem>
13132 <para>
13133 <application>Configure</>'s threading option no longer requires
13134 users to run tests or edit configuration files; threading options
13135 are now detected automatically.
13136 </para>
13137 </listitem>
13139 <listitem>
13140 <para>
13141 Now that tablespaces have been implemented,
13142 <application>initlocation</> has been removed.
13143 </para>
13144 </listitem>
13146 <listitem>
13147 <para>
13148 The API for user-defined GiST indexes has been changed. The
13149 Union and PickSplit methods are now passed a pointer to a
13150 special <structname>GistEntryVector</structname> structure,
13151 rather than a <type>bytea</type>.
13152 </para>
13153 </listitem>
13155 </itemizedlist>
13156 </sect2>
13158 <sect2>
13159 <title>Deprecated Features</title>
13161 <para>
13162 Some aspects of <productname>PostgreSQL</productname>'s behavior
13163 have been determined to be suboptimal. For the sake of backward
13164 compatibility these have not been removed in 8.0, but they are
13165 considered deprecated and will be removed in the next major
13166 release.
13167 </para>
13169 <itemizedlist>
13170 <listitem>
13171 <para>
13172 The 8.1 release will remove the <function>to_char()</> function
13173 for intervals.
13174 </para>
13175 </listitem>
13177 <listitem>
13178 <para>
13179 The server now warns of empty strings passed to
13180 <type>oid</type>/<type>float4</type>/<type>float8</type> data
13181 types, but continues to interpret them as zeroes as before.
13182 In the next major release, empty strings will be considered
13183 invalid input for these data types.
13184 </para>
13185 </listitem>
13187 <listitem>
13188 <para>
13189 By default, tables in <productname>PostgreSQL</productname> 8.0
13190 and earlier are created with <type>OID</>s. In the next release,
13191 this will <emphasis>not</emphasis> be the case: to create a table
13192 that contains <type>OID</>s, the <option>WITH OIDS</> clause must
13193 be specified or the <varname>default_with_oids</varname>
13194 configuration parameter must be set. Users are encouraged to
13195 explicitly specify <option>WITH OIDS</> if their tables
13196 require OIDs for compatibility with future releases of
13197 <productname>PostgreSQL</productname>.
13198 </para>
13199 </listitem>
13201 </itemizedlist>
13202 </sect2>
13204 <sect2>
13205 <title>Changes</title>
13207 <para>
13208 Below you will find a detailed account of the changes between
13209 release 8.0 and the previous major release.
13210 </para>
13212 <sect3>
13213 <title>Performance Improvements</title>
13214 <itemizedlist>
13216 <listitem>
13217 <para>
13218 Support cross-data-type index usage (Tom)
13219 </para>
13220 <para>
13221 Before this change, many queries would not use an index if the data
13222 types did not match exactly. This improvement makes index usage more
13223 intuitive and consistent.
13224 </para>
13225 </listitem>
13227 <listitem>
13228 <para>
13229 New buffer replacement strategy that improves caching (Jan)
13230 </para>
13231 <para>
13232 Prior releases used a least-recently-used (LRU) cache to keep
13233 recently referenced pages in memory. The LRU algorithm
13234 did not consider the number of times a specific cache entry was
13235 accessed, so large table scans could force out useful cache pages.
13236 The new cache algorithm uses four separate lists to track most
13237 recently used and most frequently used cache pages and dynamically
13238 optimize their replacement based on the work load. This should
13239 lead to much more efficient use of the shared buffer cache.
13240 Administrators who have tested shared buffer sizes in the past
13241 should retest with this new cache replacement policy.
13242 </para>
13243 </listitem>
13245 <listitem>
13246 <para>
13247 Add subprocess to write dirty buffers periodically to reduce
13248 checkpoint writes (Jan)
13249 </para>
13250 <para>
13251 In previous releases, the checkpoint process, which runs every few
13252 minutes, would write all dirty buffers to the operating system's
13253 buffer cache then flush all dirty operating system buffers to
13254 disk. This resulted in a periodic spike in disk usage that often
13255 hurt performance. The new code uses a background writer to trickle
13256 disk writes at a steady pace so checkpoints have far fewer dirty
13257 pages to write to disk. Also, the new code does not issue a global
13258 <function>sync()</> call, but instead <function>fsync()</>s just
13259 the files written since the last checkpoint. This should improve
13260 performance and minimize degradation during checkpoints.
13261 </para>
13262 </listitem>
13264 <listitem>
13265 <para>
13266 Add ability to prolong vacuum to reduce performance impact (Jan)
13267 </para>
13268 <para>
13269 On busy systems, <command>VACUUM</command> performs many I/O
13270 requests which can hurt performance for other users. This
13271 release allows you to slow down <command>VACUUM</command> to
13272 reduce its impact on other users, though this increases the
13273 total duration of <command>VACUUM</command>.
13274 </para>
13275 </listitem>
13277 <listitem>
13278 <para>
13279 Improve B-tree index performance for duplicate keys (Dmitry Tkach, Tom)
13280 </para>
13281 <para>
13282 This improves the way indexes are scanned when many duplicate
13283 values exist in the index.
13284 </para>
13285 </listitem>
13287 <listitem>
13288 <para>
13289 Use dynamically-generated table size estimates while planning (Tom)
13290 </para>
13291 <para>
13292 Formerly the planner estimated table sizes using the values seen
13293 by the last <command>VACUUM</command> or <command>ANALYZE</command>,
13294 both as to physical table size (number of pages) and number of rows.
13295 Now, the current physical table size is obtained from the kernel,
13296 and the number of rows is estimated by multiplying the table size
13297 by the row density (rows per page) seen by the last
13298 <command>VACUUM</command> or <command>ANALYZE</command>. This should
13299 produce more reliable estimates in cases where the table size has
13300 changed significantly since the last housekeeping command.
13301 </para>
13302 </listitem>
13304 <listitem>
13305 <para>
13306 Improved index usage with <literal>OR</> clauses (Tom)
13307 </para>
13308 <para>
13309 This allows the optimizer to use indexes in statements with many OR
13310 clauses that would not have been indexed in the past. It can also use
13311 multi-column indexes where the first column is specified and the second
13312 column is part of an <literal>OR</> clause.
13313 </para>
13314 </listitem>
13316 <listitem>
13317 <para>
13318 Improve matching of partial index clauses (Tom)
13319 </para>
13320 <para>
13321 The server is now smarter about using partial indexes in queries
13322 involving complex <option>WHERE</> clauses.
13323 </para>
13324 </listitem>
13326 <listitem>
13327 <para>
13328 Improve performance of the GEQO optimizer (Tom)
13329 </para>
13330 <para>
13331 The GEQO optimizer is used to plan queries involving many tables (by
13332 default, twelve or more). This release speeds up the way queries are
13333 analyzed to decrease time spent in optimization.
13334 </para>
13335 </listitem>
13337 <listitem>
13338 <para>
13339 Miscellaneous optimizer improvements
13340 </para>
13341 <para>
13342 There is not room here to list all the minor improvements made, but
13343 numerous special cases work better than in prior releases.
13344 </para>
13345 </listitem>
13347 <listitem>
13348 <para>
13349 Improve lookup speed for C functions (Tom)
13350 </para>
13351 <para>
13352 This release uses a hash table to lookup information for dynamically
13353 loaded C functions. This improves their speed so they perform nearly as
13354 quickly as functions that are built into the server executable.
13355 </para>
13356 </listitem>
13358 <listitem>
13359 <para>
13360 Add type-specific <command>ANALYZE</command> statistics
13361 capability (Mark Cave-Ayland)
13362 </para>
13363 <para>
13364 This feature allows more flexibility in generating statistics
13365 for nonstandard data types.
13366 </para>
13367 </listitem>
13369 <listitem>
13370 <para>
13371 <command>ANALYZE</command> now collects statistics for
13372 expression indexes (Tom)
13373 </para>
13374 <para>
13375 Expression indexes (also called functional indexes) allow users to
13376 index not just columns but the results of expressions and function
13377 calls. With this release, the optimizer can gather and use statistics
13378 about the contents of expression indexes. This will greatly improve
13379 the quality of planning for queries in which an expression index is
13380 relevant.
13381 </para>
13382 </listitem>
13384 <listitem>
13385 <para>
13386 New two-stage sampling method for <command>ANALYZE</command>
13387 (Manfred Koizar)
13388 </para>
13389 <para>
13390 This gives better statistics when the density of valid rows is very
13391 different in different regions of a table.
13392 </para>
13393 </listitem>
13395 <listitem>
13396 <para>
13397 Speed up <command>TRUNCATE</command> (Tom)
13398 </para>
13399 <para>
13400 This buys back some of the performance loss observed in 7.4, while still
13401 keeping <command>TRUNCATE</command> transaction-safe.
13402 </para>
13403 </listitem>
13405 </itemizedlist>
13406 </sect3>
13409 <sect3>
13410 <title>Server Changes</title>
13411 <itemizedlist>
13413 <listitem>
13414 <para>
13415 Add WAL file archiving and point-in-time recovery (Simon Riggs)
13416 </para>
13417 </listitem>
13419 <listitem>
13420 <para>
13421 Add tablespaces so admins can control disk layout (Gavin)
13422 </para>
13423 </listitem>
13425 <listitem>
13426 <para>
13427 Add a built-in log rotation program (Andreas Pflug)
13428 </para>
13429 <para>
13430 It is now possible to log server messages conveniently without
13431 relying on either <application>syslog</> or an external log
13432 rotation program.
13433 </para>
13434 </listitem>
13436 <listitem>
13437 <para>
13438 Add new read-only server configuration parameters to show server
13439 compile-time settings: <varname>block_size</>,
13440 <varname>integer_datetimes</>, <varname>max_function_args</>,
13441 <varname>max_identifier_length</>, <varname>max_index_keys</> (Joe)
13442 </para>
13443 </listitem>
13445 <listitem>
13446 <para>
13447 Make quoting of <literal>sameuser</>, <literal>samegroup</>, and
13448 <literal>all</> remove special meaning of these terms in
13449 <filename>pg_hba.conf</> (Andrew)
13450 </para>
13451 </listitem>
13453 <listitem>
13454 <para>
13455 Use clearer IPv6 name <literal>::1/128</> for
13456 <literal>localhost</> in default <filename>pg_hba.conf</> (Andrew)
13457 </para>
13458 </listitem>
13460 <listitem>
13461 <para>
13462 Use CIDR format in <filename>pg_hba.conf</> examples (Andrew)
13463 </para>
13464 </listitem>
13466 <listitem>
13467 <para>
13468 Rename server configuration parameters <varname>SortMem</> and
13469 <varname>VacuumMem</> to <varname>work_mem</> and
13470 <varname>maintenance_work_mem</> (Old names still supported) (Tom)
13471 </para>
13472 <para>
13473 This change was made to clarify that bulk operations such as index and
13474 foreign key creation use <varname>maintenance_work_mem</>, while
13475 <varname>work_mem</> is for workspaces used during query execution.
13476 </para>
13477 </listitem>
13479 <listitem>
13480 <para>
13481 Allow logging of session disconnections using server configuration
13482 <varname>log_disconnections</> (Andrew)
13483 </para>
13484 </listitem>
13486 <listitem>
13487 <para>
13488 Add new server configuration parameter <varname>log_line_prefix</> to
13489 allow control of information emitted in each log line (Andrew)
13490 </para>
13491 <para>
13492 Available information includes user name, database name, remote IP
13493 address, and session start time.
13494 </para>
13495 </listitem>
13497 <listitem>
13498 <para>
13499 Remove server configuration parameters <varname>log_pid</>,
13500 <varname>log_timestamp</>, <varname>log_source_port</>; functionality
13501 superseded by <varname>log_line_prefix</> (Andrew)
13502 </para>
13503 </listitem>
13505 <listitem>
13506 <para>
13507 Replace the <varname>virtual_host</> and <varname>tcpip_socket</>
13508 parameters with a unified <varname>listen_addresses</> parameter
13509 (Andrew, Tom)
13510 </para>
13511 <para>
13512 <varname>virtual_host</> could only specify a single IP address to
13513 listen on. <varname>listen_addresses</> allows multiple addresses
13514 to be specified.
13515 </para>
13516 </listitem>
13518 <listitem>
13519 <para>
13520 Listen on localhost by default, which eliminates the need for the
13521 <option>-i</> postmaster switch in many scenarios (Andrew)
13522 </para>
13523 <para>
13524 Listening on localhost (<literal>127.0.0.1</>) opens no new
13525 security holes but allows configurations like Windows and JDBC,
13526 which do not support local sockets, to work without special
13527 adjustments.
13528 </para>
13529 </listitem>
13531 <listitem>
13532 <para>
13533 Remove <varname>syslog</> server configuration parameter, and add more
13534 logical <varname>log_destination</> variable to control log output
13535 location (Magnus)
13536 </para>
13537 </listitem>
13539 <listitem>
13540 <para>
13541 Change server configuration parameter <varname>log_statement</> to take
13542 values <varname>all</>, <varname>mod</>, <varname>ddl</>, or
13543 <varname>none</> to select which queries are logged (Bruce)
13544 </para>
13545 <para>
13546 This allows administrators to log only data definition changes or
13547 only data modification statements.
13548 </para>
13549 </listitem>
13551 <listitem>
13552 <para>
13553 Some logging-related configuration parameters could formerly be adjusted
13554 by ordinary users, but only in the <quote>more verbose</> direction.
13555 They are now treated more strictly: only superusers can set them.
13556 However, a superuser can use <command>ALTER USER</> to provide per-user
13557 settings of these values for non-superusers. Also, it is now possible
13558 for superusers to set values of superuser-only configuration parameters
13559 via <literal>PGOPTIONS</>.
13560 </para>
13561 </listitem>
13563 <listitem>
13564 <para>
13565 Allow configuration files to be placed outside the data directory (mlw)
13566 </para>
13567 <para>
13568 By default, configuration files are kept in the cluster's top directory.
13569 With this addition, configuration files can be placed outside the
13570 data directory, easing administration.
13571 </para>
13572 </listitem>
13574 <listitem>
13575 <para>
13576 Plan prepared queries only when first executed so constants can be
13577 used for statistics (Oliver Jowett)
13578 </para>
13579 <para>
13580 Prepared statements plan queries once and execute them many
13581 times. While prepared queries avoid the overhead of re-planning
13582 on each use, the quality of the plan suffers from not knowing the exact
13583 parameters to be used in the query. In this release, planning of
13584 unnamed prepared statements is delayed until the first execution,
13585 and the actual parameter values of that execution are used as
13586 optimization hints. This allows use of out-of-line parameter passing
13587 without incurring a performance penalty.
13588 </para>
13589 </listitem>
13591 <listitem>
13592 <para>
13593 Allow <command>DECLARE CURSOR</command> to take parameters
13594 (Oliver Jowett)
13595 </para>
13596 <para>
13597 It is now useful to issue <command>DECLARE CURSOR</command> in a
13598 <function>Parse</> message with parameters. The parameter values
13599 sent at <function>Bind</> time will be substituted into the
13600 execution of the cursor's query.
13601 </para>
13602 </listitem>
13604 <listitem>
13605 <para>
13606 Fix hash joins and aggregates of <type>inet</type> and
13607 <type>cidr</type> data types (Tom)
13608 </para>
13609 <para>
13610 Release 7.4 handled hashing of mixed <type>inet</type> and
13611 <type>cidr</type> values incorrectly. (This bug did not exist
13612 in prior releases because they wouldn't try to hash either
13613 data type.)
13614 </para>
13615 </listitem>
13617 <listitem>
13618 <para>
13619 Make <varname>log_duration</> print only when <varname>log_statement</>
13620 prints the query (Ed L.)
13621 </para>
13622 </listitem>
13624 </itemizedlist>
13625 </sect3>
13628 <sect3>
13629 <title>Query Changes</title>
13630 <itemizedlist>
13632 <listitem>
13633 <para>
13634 Add savepoints (nested transactions) (Alvaro)
13635 </para>
13636 </listitem>
13638 <listitem>
13639 <para>
13640 Unsupported isolation levels are now accepted and promoted to the
13641 nearest supported level (Peter)
13642 </para>
13643 <para>
13644 The SQL specification states that if a database doesn't support a
13645 specific isolation level, it should use the next more restrictive level.
13646 This change complies with that recommendation.
13647 </para>
13648 </listitem>
13650 <listitem>
13651 <para>
13652 Allow <command>BEGIN WORK</command> to specify transaction
13653 isolation levels like <command>START TRANSACTION</command> does
13654 (Bruce)
13655 </para>
13656 </listitem>
13658 <listitem>
13659 <para>
13660 Fix table permission checking for cases in which rules generate
13661 a query type different from the originally submitted query (Tom)
13662 </para>
13663 </listitem>
13665 <listitem>
13666 <para>
13667 Implement dollar quoting to simplify single-quote usage (Andrew, Tom,
13668 David Fetter)
13669 </para>
13670 <para>
13671 In previous releases, because single quotes had to be used to
13672 quote a function's body, the use of single quotes inside the
13673 function text required use of two single quotes or other error-prone
13674 notations. With this release we add the ability to use "dollar
13675 quoting" to quote a block of text. The ability to use different
13676 quoting delimiters at different nesting levels greatly simplifies
13677 the task of quoting correctly, especially in complex functions.
13678 Dollar quoting can be used anywhere quoted text is needed.
13679 </para>
13680 </listitem>
13682 <listitem>
13683 <para>
13684 Make <literal>CASE val WHEN compval1 THEN ...</> evaluate <literal>val</> only once (Tom)
13685 </para>
13686 <para>
13687 <option>CASE</> no longer evaluates the tested expression multiple
13688 times. This has benefits when the expression is complex or is
13689 volatile.
13690 </para>
13691 </listitem>
13693 <listitem>
13694 <para>
13695 Test <option>HAVING</> before computing target list of an
13696 aggregate query (Tom)
13697 </para>
13698 <para>
13699 Fixes improper failure of cases such as <literal>SELECT SUM(win)/SUM(lose)
13700 ... GROUP BY ... HAVING SUM(lose) &gt; 0</>. This should work but formerly
13701 could fail with divide-by-zero.
13702 </para>
13703 </listitem>
13705 <listitem>
13706 <para>
13707 Replace <varname>max_expr_depth</> parameter with
13708 <varname>max_stack_depth</> parameter, measured in kilobytes of stack
13709 size (Tom)
13710 </para>
13711 <para>
13712 This gives us a fairly bulletproof defense against crashing due to
13713 runaway recursive functions. Instead of measuring the depth of expression
13714 nesting, we now directly measure the size of the execution stack.
13715 </para>
13716 </listitem>
13718 <listitem>
13719 <para>
13720 Allow arbitrary row expressions (Tom)
13721 </para>
13722 <para>
13723 This release allows SQL expressions to contain arbitrary composite
13724 types, that is, row values. It also allows functions to more easily
13725 take rows as arguments and return row values.
13726 </para>
13727 </listitem>
13729 <listitem>
13730 <para>
13731 Allow <option>LIKE</>/<option>ILIKE</> to be used as the operator
13732 in row and subselect comparisons (Fabien Coelho)
13733 </para>
13734 </listitem>
13736 <listitem>
13737 <para>
13738 Avoid locale-specific case conversion of basic ASCII letters in
13739 identifiers and keywords (Tom)
13740 </para>
13741 <para>
13742 This solves the <quote>Turkish problem</> with mangling of words
13743 containing <literal>I</> and <literal>i</>. Folding of characters
13744 outside the 7-bit-ASCII set is still locale-aware.
13745 </para>
13746 </listitem>
13748 <listitem>
13749 <para>
13750 Improve syntax error reporting (Fabien, Tom)
13751 </para>
13752 <para>
13753 Syntax error reports are more useful than before.
13754 </para>
13755 </listitem>
13757 <listitem>
13758 <para>
13759 Change <command>EXECUTE</command> to return a completion tag
13760 matching the executed statement (Kris Jurka)
13761 </para>
13762 <para>
13763 Previous releases return an <command>EXECUTE</command> tag for
13764 any <command>EXECUTE</command> call. In this release, the tag
13765 returned will reflect the command executed.
13766 </para>
13767 </listitem>
13769 <listitem>
13770 <para>
13771 Avoid emitting <option>NATURAL CROSS JOIN</> in rule listings (Tom)
13772 </para>
13773 <para>
13774 Such a clause makes no logical sense, but in some cases the rule
13775 decompiler formerly produced this syntax.
13776 </para>
13777 </listitem>
13779 </itemizedlist>
13780 </sect3>
13783 <sect3>
13784 <title>Object Manipulation Changes</title>
13785 <itemizedlist>
13787 <listitem>
13788 <para>
13789 Add <command>COMMENT ON</> for casts, conversions, languages,
13790 operator classes, and large objects (Christopher)
13791 </para>
13792 </listitem>
13794 <listitem>
13795 <para>
13796 Add new server configuration parameter <varname>default_with_oids</> to
13797 control whether tables are created with <type>OID</>s by default (Neil)
13798 </para>
13799 <para>
13800 This allows administrators to control whether <command>CREATE
13801 TABLE</command> commands create tables with or without <type>OID</>
13802 columns by default. (Note: the current factory default setting for
13803 <varname>default_with_oids</> is <literal>TRUE</>, but the default
13804 will become <literal>FALSE</> in future releases.)
13805 </para>
13806 </listitem>
13808 <listitem>
13809 <para>
13810 Add <option>WITH</> / <option>WITHOUT OIDS</> clause to
13811 <command>CREATE TABLE AS</command> (Neil)
13812 </para>
13813 </listitem>
13815 <listitem>
13816 <para>
13817 Allow <command>ALTER TABLE DROP COLUMN</> to drop an <type>OID</>
13818 column (<command>ALTER TABLE SET WITHOUT OIDS</> still works)
13819 (Tom)
13820 </para>
13821 </listitem>
13823 <listitem>
13824 <para>
13825 Allow composite types as table columns (Tom)
13826 </para>
13827 </listitem>
13829 <listitem>
13830 <para>
13831 Allow <command>ALTER ... ADD COLUMN</> with defaults and
13832 <option>NOT NULL</> constraints; works per SQL spec (Rod)
13833 </para>
13834 <para>
13835 It is now possible for <option>ADD COLUMN</> to create a column
13836 that is not initially filled with NULLs, but with a specified
13837 default value.
13838 </para>
13839 </listitem>
13841 <listitem>
13842 <para>
13843 Add <command>ALTER COLUMN TYPE</> to change column's type (Rod)
13844 </para>
13845 <para>
13846 It is now possible to alter a column's data type without dropping
13847 and re-adding the column.
13848 </para>
13849 </listitem>
13851 <listitem>
13852 <para>
13853 Allow multiple <command>ALTER</> actions in a single <command>ALTER
13854 TABLE</command> command (Rod)
13855 </para>
13856 <para>
13857 This is particularly useful for <command>ALTER</> commands that
13858 rewrite the table (which include <option>ALTER COLUMN TYPE</> and
13859 <option>ADD COLUMN</> with a default). By grouping
13860 <command>ALTER</> commands together, the table need be rewritten
13861 only once.
13862 </para>
13863 </listitem>
13865 <listitem>
13866 <para>
13867 Allow <command>ALTER TABLE</command> to add <type>SERIAL</type>
13868 columns (Tom)
13869 </para>
13870 <para>
13871 This falls out from the new capability of specifying defaults for new
13872 columns.
13873 </para>
13874 </listitem>
13876 <listitem>
13877 <para>
13878 Allow changing the owners of aggregates, conversions, databases,
13879 functions, operators, operator classes, schemas, types, and tablespaces
13880 (Christopher, Euler Taveira de Oliveira)
13881 </para>
13882 <para>
13883 Previously this required modifying the system tables directly.
13884 </para>
13885 </listitem>
13887 <listitem>
13888 <para>
13889 Allow temporary object creation to be limited to <option>SECURITY
13890 DEFINER</> functions (Sean Chittenden)
13891 </para>
13892 </listitem>
13894 <listitem>
13895 <para>
13896 Add <option>ALTER TABLE ... SET WITHOUT CLUSTER</> (Christopher)
13897 </para>
13898 <para>
13899 Prior to this release, there was no way to clear an auto-cluster
13900 specification except to modify the system tables.
13901 </para>
13902 </listitem>
13904 <listitem>
13905 <para>
13906 Constraint/Index/<type>SERIAL</> names are now
13907 <replaceable>table_column_type</>
13908 with numbers appended to guarantee uniqueness within the schema
13909 (Tom)
13910 </para>
13911 <para>
13912 The SQL specification states that such names should be unique
13913 within a schema.
13914 </para>
13915 </listitem>
13917 <listitem>
13918 <para>
13919 Add <function>pg_get_serial_sequence()</> to return a
13920 <type>SERIAL</> column's sequence name (Christopher)
13921 </para>
13922 <para>
13923 This allows automated scripts to reliably find the <type>SERIAL</>
13924 sequence name.
13925 </para>
13926 </listitem>
13928 <listitem>
13929 <para>
13930 Warn when primary/foreign key data type mismatch requires costly lookup
13931 </para>
13932 </listitem>
13934 <listitem>
13935 <para>
13936 New <command>ALTER INDEX</> command to allow moving of indexes
13937 between tablespaces (Gavin)
13938 </para>
13939 </listitem>
13941 <listitem>
13942 <para>
13943 Make <command>ALTER TABLE OWNER</> change dependent sequence
13944 ownership too (Alvaro)
13945 </para>
13946 </listitem>
13949 </itemizedlist>
13950 </sect3>
13953 <sect3>
13954 <title>Utility Command Changes</title>
13955 <itemizedlist>
13957 <listitem>
13958 <para>
13959 Allow <command>CREATE SCHEMA</command> to create triggers,
13960 indexes, and sequences (Neil)
13961 </para>
13962 </listitem>
13964 <listitem>
13965 <para>
13966 Add <option>ALSO</> keyword to <command>CREATE RULE</command> (Fabien
13967 Coelho)
13968 </para>
13969 <para>
13970 This allows <option>ALSO</> to be added to rule creation to contrast it with
13971 <option>INSTEAD</> rules.
13972 </para>
13973 </listitem>
13975 <listitem>
13976 <para>
13977 Add <option>NOWAIT</> option to <command>LOCK</command> (Tatsuo)
13978 </para>
13979 <para>
13980 This allows the <command>LOCK</command> command to fail if it
13981 would have to wait for the requested lock.
13982 </para>
13983 </listitem>
13985 <listitem>
13986 <para>
13987 Allow <command>COPY</command> to read and write
13988 comma-separated-value (CSV) files (Andrew, Bruce)
13989 </para>
13990 </listitem>
13992 <listitem>
13993 <para>
13994 Generate error if the <command>COPY</command> delimiter and NULL
13995 string conflict (Bruce)
13996 </para>
13997 </listitem>
13999 <listitem>
14000 <para>
14001 <command>GRANT</command>/<command>REVOKE</command> behavior
14002 follows the SQL spec more closely
14003 </para>
14004 </listitem>
14006 <listitem>
14007 <para>
14008 Avoid locking conflict between <command>CREATE INDEX</command>
14009 and <command>CHECKPOINT</command> (Tom)
14010 </para>
14011 <para>
14012 In 7.3 and 7.4, a long-running B-tree index build could block concurrent
14013 <command>CHECKPOINT</>s from completing, thereby causing WAL bloat because the
14014 WAL log could not be recycled.
14015 </para>
14016 </listitem>
14018 <listitem>
14019 <para>
14020 Database-wide <command>ANALYZE</command> does not hold locks
14021 across tables (Tom)
14022 </para>
14023 <para>
14024 This reduces the potential for deadlocks against other backends
14025 that want exclusive locks on tables. To get the benefit of this
14026 change, do not execute database-wide <command>ANALYZE</command>
14027 inside a transaction block (<command>BEGIN</command> block); it
14028 must be able to commit and start a new transaction for each
14029 table.
14030 </para>
14031 </listitem>
14033 <listitem>
14034 <para>
14035 <command>REINDEX</command> does not exclusively lock the index's
14036 parent table anymore
14037 </para>
14038 <para>
14039 The index itself is still exclusively locked, but readers of the
14040 table can continue if they are not using the particular index
14041 being rebuilt.
14042 </para>
14043 </listitem>
14045 <listitem>
14046 <para>
14047 Erase MD5 user passwords when a user is renamed (Bruce)
14048 </para>
14049 <para>
14050 <productname>PostgreSQL</productname> uses the user name as salt
14051 when encrypting passwords via MD5. When a user's name is changed,
14052 the salt will no longer match the stored MD5 password, so the
14053 stored password becomes useless. In this release a notice is
14054 generated and the password is cleared. A new password must then
14055 be assigned if the user is to be able to log in with a password.
14056 </para>
14057 </listitem>
14059 <listitem>
14060 <para>
14061 New <application>pg_ctl</> <option>kill</> option for Windows (Andrew)
14062 </para>
14063 <para>
14064 Windows does not have a <literal>kill</> command to send signals to
14065 backends so this capability was added to <application>pg_ctl</>.
14066 </para>
14067 </listitem>
14069 <listitem>
14070 <para>
14071 Information schema improvements
14072 </para>
14073 </listitem>
14075 <listitem>
14076 <para>
14077 Add <option>--pwfile</> option to
14078 <application>initdb</application> so the initial password can be
14079 set by GUI tools (Magnus)
14080 </para>
14081 </listitem>
14083 <listitem>
14084 <para>
14085 Detect locale/encoding mismatch in
14086 <application>initdb</application> (Peter)
14087 </para>
14088 </listitem>
14090 <listitem>
14091 <para>
14092 Add <option>register</> command to <application>pg_ctl</> to
14093 register Windows operating system service (Dave Page)
14094 </para>
14095 </listitem>
14097 </itemizedlist>
14098 </sect3>
14101 <sect3>
14102 <title>Data Type and Function Changes</title>
14103 <itemizedlist>
14105 <listitem>
14106 <para>
14107 More complete support for composite types (row types) (Tom)
14108 </para>
14109 <para>
14110 Composite values can be used in many places where only scalar values
14111 worked before.
14112 </para>
14113 </listitem>
14115 <listitem>
14116 <para>
14117 Reject nonrectangular array values as erroneous (Joe)
14118 </para>
14119 <para>
14120 Formerly, <function>array_in</> would silently build a
14121 surprising result.
14122 </para>
14123 </listitem>
14125 <listitem>
14126 <para>
14127 Overflow in integer arithmetic operations is now detected (Tom)
14128 </para>
14129 </listitem>
14131 <listitem>
14132 <para>
14133 The arithmetic operators associated with the single-byte
14134 <type>"char"</> data type have been removed.
14135 </para>
14136 <para>
14137 Formerly, the parser would select these operators in many situations
14138 where an <quote>unable to select an operator</> error would be more
14139 appropriate, such as <literal>null * null</>. If you actually want
14140 to do arithmetic on a <type>"char"</> column, you can cast it to
14141 integer explicitly.
14142 </para>
14143 </listitem>
14145 <listitem>
14146 <para>
14147 Syntax checking of array input values considerably tightened up (Joe)
14148 </para>
14149 <para>
14150 Junk that was previously allowed in odd places with odd results
14151 now causes an <literal>ERROR</>, for example, non-whitespace
14152 after the closing right brace.
14153 </para>
14154 </listitem>
14156 <listitem>
14157 <para>
14158 Empty-string array element values must now be written as
14159 <literal>""</>, rather than writing nothing (Joe)
14160 </para>
14161 <para>
14162 Formerly, both ways of writing an empty-string element value were
14163 allowed, but now a quoted empty string is required. The case where
14164 nothing at all appears will probably be considered to be a NULL
14165 element value in some future release.
14166 </para>
14167 </listitem>
14169 <listitem>
14170 <para>
14171 Array element trailing whitespace is now ignored (Joe)
14172 </para>
14173 <para>
14174 Formerly leading whitespace was ignored, but trailing whitespace
14175 between an element value and the delimiter or right brace was
14176 significant. Now trailing whitespace is also ignored.
14177 </para>
14178 </listitem>
14180 <listitem>
14181 <para>
14182 Emit array values with explicit array bounds when lower bound is not one
14183 (Joe)
14184 </para>
14185 </listitem>
14187 <listitem>
14188 <para>
14189 Accept <literal>YYYY-monthname-DD</> as a date string (Tom)
14190 </para>
14191 </listitem>
14193 <listitem>
14194 <para>
14195 Make <function>netmask</> and <function>hostmask</> functions
14196 return maximum-length mask length (Tom)
14197 </para>
14198 </listitem>
14200 <listitem>
14201 <para>
14202 Change factorial function to return <type>numeric</type> (Gavin)
14203 </para>
14204 <para>
14205 Returning <type>numeric</type> allows the factorial function to
14206 work for a wider range of input values.
14207 </para>
14208 </listitem>
14210 <listitem>
14211 <para>
14212 <function>to_char</>/<function>to_date()</> date conversion
14213 improvements (Kurt Roeckx, Fabien Coelho)
14214 </para>
14215 </listitem>
14217 <listitem>
14218 <para>
14219 Make <function>length()</> disregard trailing spaces in
14220 <type>CHAR(n)</> (Gavin)
14221 </para>
14222 <para>
14223 This change was made to improve consistency: trailing spaces are
14224 semantically insignificant in <type>CHAR(n)</> data, so they
14225 should not be counted by <function>length()</>.
14226 </para>
14227 </listitem>
14229 <listitem>
14230 <para>
14231 Warn about empty string being passed to
14232 <type>OID</>/<type>float4</>/<type>float8</> data types (Neil)
14233 </para>
14234 <para>
14235 8.1 will throw an error instead.
14236 </para>
14237 </listitem>
14239 <listitem>
14240 <para>
14241 Allow leading or trailing whitespace in
14242 <type>int2</>/<type>int4</>/<type>int8</>/<type>float4</>/<type>float8</>
14243 input routines
14244 (Neil)
14245 </para>
14246 </listitem>
14248 <listitem>
14249 <para>
14250 Better support for IEEE <literal>Infinity</> and <literal>NaN</>
14251 values in <type>float4</type>/<type>float8</type> (Neil)
14252 </para>
14253 <para>
14254 These should now work on all platforms that support IEEE-compliant
14255 floating point arithmetic.
14256 </para>
14257 </listitem>
14259 <listitem>
14260 <para>
14261 Add <option>week</> option to <function>date_trunc()</> (Robert Creager)
14262 </para>
14263 </listitem>
14265 <listitem>
14266 <para>
14267 Fix <function>to_char</function> for <literal>1 BC</>
14268 (previously it returned <literal>1 AD</>) (Bruce)
14269 </para>
14270 </listitem>
14272 <listitem>
14273 <para>
14274 Fix <function>date_part(year)</> for BC dates (previously it
14275 returned one less than the correct year) (Bruce)
14276 </para>
14277 </listitem>
14279 <listitem>
14280 <para>
14281 Fix <function>date_part()</> to return the proper millennium and
14282 century (Fabien Coelho)
14283 </para>
14284 <para>
14285 In previous versions, the century and millennium results had a wrong
14286 number and started in the wrong year, as compared to standard
14287 reckoning of such things.
14288 </para>
14289 </listitem>
14291 <listitem>
14292 <para>
14293 Add <function>ceiling()</> as an alias for <function>ceil()</>,
14294 and <function>power()</> as an alias for <function>pow()</> for
14295 standards compliance (Neil)
14296 </para>
14297 </listitem>
14299 <listitem>
14300 <para>
14301 Change <function>ln()</>, <function>log()</>,
14302 <function>power()</>, and <function>sqrt()</> to emit the correct
14303 <literal>SQLSTATE</> error codes for certain error conditions, as
14304 specified by SQL:2003 (Neil)
14305 </para>
14306 </listitem>
14308 <listitem>
14309 <para>
14310 Add <function>width_bucket()</> function as defined by SQL:2003 (Neil)
14311 </para>
14312 </listitem>
14314 <listitem>
14315 <para>
14316 Add <function>generate_series()</> functions to simplify working
14317 with numeric sets (Joe)
14318 </para>
14319 </listitem>
14321 <listitem>
14322 <para>
14323 Fix <function>upper/lower/initcap()</> functions to work with
14324 multibyte encodings (Tom)
14325 </para>
14326 </listitem>
14328 <listitem>
14329 <para>
14330 Add boolean and bitwise integer <option>AND</>/<option>OR</>
14331 aggregates (Fabien Coelho)
14332 </para>
14333 </listitem>
14335 <listitem>
14336 <para>
14337 New session information functions to return network addresses for client
14338 and server (Sean Chittenden)
14339 </para>
14340 </listitem>
14342 <listitem>
14343 <para>
14344 Add function to determine the area of a closed path (Sean Chittenden)
14345 </para>
14346 </listitem>
14348 <listitem>
14349 <para>
14350 Add function to send cancel request to other backends (Magnus)
14351 </para>
14352 </listitem>
14354 <listitem>
14355 <para>
14356 Add <type>interval</> plus <type>datetime</> operators (Tom)
14357 </para>
14358 <para>
14359 The reverse ordering, <type>datetime</> plus <type>interval</>,
14360 was already supported, but both are required by the SQL standard.
14361 </para>
14362 </listitem>
14364 <listitem>
14365 <para>
14366 Casting an integer to <type>BIT(N)</> selects the rightmost N bits
14367 of the integer
14368 (Tom)
14369 </para>
14370 <para>
14371 In prior releases, the leftmost N bits were selected, but this was
14372 deemed unhelpful, not to mention inconsistent with casting from bit
14373 to int.
14374 </para>
14375 </listitem>
14377 <listitem>
14378 <para>
14379 Require <type>CIDR</> values to have all nonmasked bits be zero
14380 (Kevin Brintnall)
14381 </para>
14382 </listitem>
14384 </itemizedlist>
14385 </sect3>
14388 <sect3>
14389 <title>Server-Side Language Changes</title>
14390 <itemizedlist>
14392 <listitem>
14393 <para>
14394 In <literal>READ COMMITTED</> serialization mode, volatile functions
14395 now see the results of concurrent transactions committed up to the
14396 beginning of each statement within the function, rather than up to the
14397 beginning of the interactive command that called the function.
14398 </para>
14399 </listitem>
14401 <listitem>
14402 <para>
14403 Functions declared <literal>STABLE</> or <literal>IMMUTABLE</> always
14404 use the snapshot of the calling query, and therefore do not see the
14405 effects of actions taken after the calling query starts, whether in
14406 their own transaction or other transactions. Such a function must be
14407 read-only, too, meaning that it cannot use any SQL commands other than
14408 <command>SELECT</>. There is a considerable performance gain from
14409 declaring a function <literal>STABLE</> or <literal>IMMUTABLE</>
14410 rather than <literal>VOLATILE</>.
14411 </para>
14412 </listitem>
14414 <listitem>
14415 <para>
14416 Nondeferred <option>AFTER</> triggers are now fired immediately
14417 after completion of the triggering query, rather than upon
14418 finishing the current interactive command. This makes a difference
14419 when the triggering query occurred within a function: the trigger
14420 is invoked before the function proceeds to its next operation. For
14421 example, if a function inserts a new row into a table, any
14422 nondeferred foreign key checks occur before proceeding with the
14423 function.
14424 </para>
14425 </listitem>
14427 <listitem>
14428 <para>
14429 Allow function parameters to be declared with names (Dennis Bj&ouml;rklund)
14430 </para>
14431 <para>
14432 This allows better documentation of functions. Whether the names
14433 actually do anything depends on the specific function language
14434 being used.
14435 </para>
14436 </listitem>
14438 <listitem>
14439 <para>
14440 Allow PL/pgSQL parameter names to be referenced in the function (Dennis Bj&ouml;rklund)
14441 </para>
14442 <para>
14443 This basically creates an automatic alias for each named parameter.
14444 </para>
14445 </listitem>
14447 <listitem>
14448 <para>
14449 Do minimal syntax checking of PL/pgSQL functions at creation time (Tom)
14450 </para>
14451 <para>
14452 This allows us to catch simple syntax errors sooner.
14453 </para>
14454 </listitem>
14456 <listitem>
14457 <para>
14458 More support for composite types (row and record variables) in PL/pgSQL
14459 </para>
14460 <para>
14461 For example, it now works to pass a rowtype variable to another function
14462 as a single variable.
14463 </para>
14464 </listitem>
14466 <listitem>
14467 <para>
14468 Default values for PL/pgSQL variables can now reference previously
14469 declared variables
14470 </para>
14471 </listitem>
14473 <listitem>
14474 <para>
14475 Improve parsing of PL/pgSQL FOR loops (Tom)
14476 </para>
14477 <para>
14478 Parsing is now driven by presence of <literal>".."</> rather than
14479 data type of <option>FOR</> variable. This makes no difference for
14480 correct functions, but should result in more understandable error
14481 messages when a mistake is made.
14482 </para>
14483 </listitem>
14485 <listitem>
14486 <para>
14487 Major overhaul of PL/Perl server-side language (Command Prompt, Andrew Dunstan)
14488 </para>
14489 </listitem>
14491 <listitem>
14492 <para>
14493 In PL/Tcl, SPI commands are now run in subtransactions. If an error
14494 occurs, the subtransaction is cleaned up and the error is reported
14495 as an ordinary Tcl error, which can be trapped with <literal>catch</>.
14496 Formerly, it was not possible to catch such errors.
14497 </para>
14498 </listitem>
14500 <listitem>
14501 <para>
14502 Accept <command>ELSEIF</> in PL/pgSQL (Neil)
14503 </para>
14504 <para>
14505 Previously PL/pgSQL only allowed <command>ELSIF</>, but many people
14506 are accustomed to spelling this keyword <command>ELSEIF</>.
14507 </para>
14508 </listitem>
14510 </itemizedlist>
14511 </sect3>
14514 <sect3>
14515 <title><application>psql</> Changes</title>
14516 <itemizedlist>
14518 <listitem>
14519 <para>
14520 Improve <application>psql</> information display about database
14521 objects (Christopher)
14522 </para>
14523 </listitem>
14525 <listitem>
14526 <para>
14527 Allow <application>psql</> to display group membership in
14528 <command>\du</> and <command>\dg</> (Markus Bertheau)
14529 </para>
14530 </listitem>
14532 <listitem>
14533 <para>
14534 Prevent <application>psql</> <command>\dn</command> from showing
14535 temporary schemas (Bruce)
14536 </para>
14537 </listitem>
14539 <listitem>
14540 <para>
14541 Allow <application>psql</> to handle tilde user expansion for file
14542 names (Zach Irmen)
14543 </para>
14544 </listitem>
14546 <listitem>
14547 <para>
14548 Allow <application>psql</> to display fancy prompts, including
14549 color, via <application>readline</> (Reece Hart, Chet Ramey)
14550 </para>
14551 </listitem>
14553 <listitem>
14554 <para>
14555 Make <application>psql</> <command>\copy</> match <command>COPY</command> command syntax
14556 fully (Tom)
14557 </para>
14558 </listitem>
14560 <listitem>
14561 <para>
14562 Show the location of syntax errors (Fabien Coelho, Tom)
14563 </para>
14564 </listitem>
14566 <listitem>
14567 <para>
14568 Add <command>CLUSTER</command> information to <application>psql</>
14569 <command>\d</> display
14570 (Bruce)
14571 </para>
14572 </listitem>
14574 <listitem>
14575 <para>
14576 Change <application>psql</> <command>\copy stdin/stdout</> to read
14577 from command input/output (Bruce)
14578 </para>
14579 </listitem>
14581 <listitem>
14582 <para>
14583 Add <option>pstdin</>/<option>pstdout</> to read from
14584 <application>psql</>'s <literal>stdin</>/<literal>stdout</> (Mark
14585 Feit)
14586 </para>
14587 </listitem>
14589 <listitem>
14590 <para>
14591 Add global <application>psql</> configuration file, <filename>psqlrc.sample</filename>
14592 (Bruce)
14593 </para>
14594 <para>
14595 This allows a central file where global <application>psql</> startup commands can
14596 be stored.
14597 </para>
14598 </listitem>
14600 <listitem>
14601 <para>
14602 Have <application>psql</> <command>\d+</> indicate if the table
14603 has an <type>OID</> column (Neil)
14604 </para>
14605 </listitem>
14607 <listitem>
14608 <para>
14609 On Windows, use binary mode in <application>psql</> when reading files so control-Z
14610 is not seen as end-of-file
14611 </para>
14612 </listitem>
14614 <listitem>
14615 <para>
14616 Have <command>\dn+</> show permissions and description for schemas (Dennis
14617 Bj&ouml;rklund)
14618 </para>
14619 </listitem>
14621 <listitem>
14622 <para>
14623 Improve tab completion support (Stefan Kaltenbrunn, Greg Sabino Mullane)
14624 </para>
14625 </listitem>
14627 <listitem>
14628 <para>
14629 Allow boolean settings to be set using upper or lower case (Michael Paesold)
14630 </para>
14631 </listitem>
14633 </itemizedlist>
14634 </sect3>
14637 <sect3>
14638 <title><application>pg_dump</> Changes</title>
14639 <itemizedlist>
14641 <listitem>
14642 <para>
14643 Use dependency information to improve the reliability of
14644 <application>pg_dump</> (Tom)
14645 </para>
14646 <para>
14647 This should solve the longstanding problems with related objects
14648 sometimes being dumped in the wrong order.
14649 </para>
14650 </listitem>
14652 <listitem>
14653 <para>
14654 Have <application>pg_dump</> output objects in alphabetical order if possible (Tom)
14655 </para>
14656 <para>
14657 This should make it easier to identify changes between
14658 dump files.
14659 </para>
14660 </listitem>
14662 <listitem>
14663 <para>
14664 Allow <application>pg_restore</> to ignore some SQL errors (Fabien Coelho)
14665 </para>
14666 <para>
14667 This makes <application>pg_restore</>'s behavior similar to the
14668 results of feeding a <application>pg_dump</> output script to
14669 <application>psql</>. In most cases, ignoring errors and plowing
14670 ahead is the most useful thing to do. Also added was a pg_restore
14671 option to give the old behavior of exiting on an error.
14672 </para>
14673 </listitem>
14675 <listitem>
14676 <para>
14677 <application>pg_restore</> <option>-l</> display now includes
14678 objects' schema names
14679 </para>
14680 </listitem>
14682 <listitem>
14683 <para>
14684 New begin/end markers in <application>pg_dump</> text output (Bruce)
14685 </para>
14686 </listitem>
14688 <listitem>
14689 <para>
14690 Add start/stop times for
14691 <application>pg_dump</>/<application>pg_dumpall</> in verbose mode
14692 (Bruce)
14693 </para>
14694 </listitem>
14696 <listitem>
14697 <para>
14698 Allow most <application>pg_dump</> options in
14699 <application>pg_dumpall</> (Christopher)
14700 </para>
14701 </listitem>
14703 <listitem>
14704 <para>
14705 Have <application>pg_dump</> use <command>ALTER OWNER</> rather
14706 than <command>SET SESSION AUTHORIZATION</> by default
14707 (Christopher)
14708 </para>
14709 </listitem>
14711 </itemizedlist>
14712 </sect3>
14715 <sect3>
14716 <title>libpq Changes</title>
14717 <itemizedlist>
14719 <listitem>
14720 <para>
14721 Make libpq's <option>SIGPIPE</> handling thread-safe (Bruce)
14722 </para>
14723 </listitem>
14725 <listitem>
14726 <para>
14727 Add <function>PQmbdsplen()</> which returns the display length
14728 of a character (Tatsuo)
14729 </para>
14730 </listitem>
14732 <listitem>
14733 <para>
14734 Add thread locking to <application>SSL</> and
14735 <application>Kerberos</> connections (Manfred Spraul)
14736 </para>
14737 </listitem>
14739 <listitem>
14740 <para>
14741 Allow <function>PQoidValue()</>, <function>PQcmdTuples()</>, and
14742 <function>PQoidStatus()</> to work on <command>EXECUTE</command>
14743 commands (Neil)
14744 </para>
14745 </listitem>
14747 <listitem>
14748 <para>
14749 Add <function>PQserverVersion()</> to provide more convenient
14750 access to the server version number (Greg Sabino Mullane)
14751 </para>
14752 </listitem>
14754 <listitem>
14755 <para>
14756 Add <function>PQprepare/PQsendPrepared()</> functions to support
14757 preparing statements without necessarily specifying the data types
14758 of their parameters (Abhijit Menon-Sen)
14759 </para>
14760 </listitem>
14762 <listitem>
14763 <para>
14764 Many ECPG improvements, including <command>SET DESCRIPTOR</> (Michael)
14765 </para>
14766 </listitem>
14768 </itemizedlist>
14769 </sect3>
14772 <sect3>
14773 <title>Source Code Changes</title>
14774 <itemizedlist>
14776 <listitem>
14777 <para>
14778 Allow the database server to run natively on Windows (Claudio, Magnus, Andrew)
14779 </para>
14780 </listitem>
14782 <listitem>
14783 <para>
14784 Shell script commands converted to C versions for Windows support (Andrew)
14785 </para>
14786 </listitem>
14788 <listitem>
14789 <para>
14790 Create an extension makefile framework (Fabien Coelho, Peter)
14791 </para>
14792 <para>
14793 This simplifies the task of building extensions outside the original
14794 source tree.
14795 </para>
14796 </listitem>
14798 <listitem>
14799 <para>
14800 Support relocatable installations (Bruce)
14801 </para>
14802 <para>
14803 Directory paths for installed files (such as the
14804 <filename>/share</> directory) are now computed relative to the
14805 actual location of the executables, so that an installation tree
14806 can be moved to another place without reconfiguring and
14807 rebuilding.
14808 </para>
14809 </listitem>
14811 <listitem>
14812 <para>
14813 Use <option>--with-docdir</> to choose installation location of documentation; also
14814 allow <option>--infodir</> (Peter)
14815 </para>
14816 </listitem>
14818 <listitem>
14819 <para>
14820 Add <option>--without-docdir</> to prevent installation of documentation (Peter)
14821 </para>
14822 </listitem>
14824 <listitem>
14825 <para>
14826 Upgrade to <application>DocBook</> V4.2 SGML (Peter)
14827 </para>
14828 </listitem>
14830 <listitem>
14831 <para>
14832 New <literal>PostgreSQL</> <application>CVS</> tag (Marc)
14833 </para>
14834 <para>
14835 This was done to make it easier for organizations to manage their
14836 own copies of the <productname>PostgreSQL</productname>
14837 <application>CVS</> repository. File version stamps from the master
14838 repository will not get munged by checking into or out of a copied
14839 repository.
14840 </para>
14841 </listitem>
14843 <listitem>
14844 <para>
14845 Clarify locking code (Manfred Koizar)
14846 </para>
14847 </listitem>
14849 <listitem>
14850 <para>
14851 Buffer manager cleanup (Neil)
14852 </para>
14853 </listitem>
14855 <listitem>
14856 <para>
14857 Decouple platform tests from CPU spinlock code (Bruce, Tom)
14858 </para>
14859 </listitem>
14861 <listitem>
14862 <para>
14863 Add inlined test-and-set code on PA-RISC for <application>gcc</>
14864 (ViSolve, Tom)
14865 </para>
14866 </listitem>
14868 <listitem>
14869 <para>
14870 Improve i386 spinlock code (Manfred Spraul)
14871 </para>
14872 </listitem>
14874 <listitem>
14875 <para>
14876 Clean up spinlock assembly code to avoid warnings from newer
14877 <application>gcc</> releases (Tom)
14878 </para>
14879 </listitem>
14881 <listitem>
14882 <para>
14883 Remove JDBC from source tree; now a separate project
14884 </para>
14885 </listitem>
14887 <listitem>
14888 <para>
14889 Remove the libpgtcl client interface; now a separate project
14890 </para>
14891 </listitem>
14893 <listitem>
14894 <para>
14895 More accurately estimate memory and file descriptor usage (Tom)
14896 </para>
14897 </listitem>
14899 <listitem>
14900 <para>
14901 Improvements to the Mac OS X startup scripts (Ray A.)
14902 </para>
14903 </listitem>
14905 <listitem>
14906 <para>
14907 New <function>fsync()</> test program (Bruce)
14908 </para>
14909 </listitem>
14911 <listitem>
14912 <para>
14913 Major documentation improvements (Neil, Peter)
14914 </para>
14915 </listitem>
14917 <listitem>
14918 <para>
14919 Remove <application>pg_encoding</application>; not needed
14920 anymore
14921 </para>
14922 </listitem>
14924 <listitem>
14925 <para>
14926 Remove <application>pg_id</application>; not needed anymore
14927 </para>
14928 </listitem>
14930 <listitem>
14931 <para>
14932 Remove <application>initlocation</application>; not needed
14933 anymore
14934 </para>
14935 </listitem>
14937 <listitem>
14938 <para>
14939 Auto-detect thread flags (no more manual testing) (Bruce)
14940 </para>
14941 </listitem>
14943 <listitem>
14944 <para>
14945 Use Olson's public domain <application>timezone</> library (Magnus)
14946 </para>
14947 </listitem>
14949 <listitem>
14950 <para>
14951 With threading enabled, use thread flags on Unixware for
14952 backend executables too (Bruce)
14953 </para>
14954 <para>
14955 Unixware cannot mix threaded and nonthreaded object files in the
14956 same executable, so everything must be compiled as threaded.
14957 </para>
14958 </listitem>
14960 <listitem>
14961 <para>
14962 <application>psql</> now uses a <application>flex</>-generated
14963 lexical analyzer to process command strings
14964 </para>
14965 </listitem>
14967 <listitem>
14968 <para>
14969 Reimplement the linked list data structure used throughout the
14970 backend (Neil)
14971 </para>
14972 <para>
14973 This improves performance by allowing list append and length
14974 operations to be more efficient.
14975 </para>
14976 </listitem>
14978 <listitem>
14979 <para>
14980 Allow dynamically loaded modules to create their own server configuration
14981 parameters (Thomas Hallgren)
14982 </para>
14983 </listitem>
14985 <listitem>
14986 <para>
14987 New Brazilian version of FAQ (Euler Taveira de Oliveira)
14988 </para>
14989 </listitem>
14991 <listitem>
14992 <para>
14993 Add French FAQ (Guillaume Lelarge)
14994 </para>
14995 </listitem>
14997 <listitem>
14998 <para>
14999 New <application>pgevent</> for Windows logging
15000 </para>
15001 </listitem>
15003 <listitem>
15004 <para>
15005 Make libpq and ECPG build as proper shared libraries on OS X (Tom)
15006 </para>
15007 </listitem>
15009 </itemizedlist>
15010 </sect3>
15013 <sect3>
15014 <title>Contrib Changes</title>
15015 <itemizedlist>
15017 <listitem>
15018 <para>
15019 Overhaul of <filename>contrib/dblink</> (Joe)
15020 </para>
15021 </listitem>
15023 <listitem>
15024 <para>
15025 <filename>contrib/dbmirror</> improvements (Steven Singer)
15026 </para>
15027 </listitem>
15029 <listitem>
15030 <para>
15031 New <filename>contrib/xml2</> (John Gray, Torchbox)
15032 </para>
15033 </listitem>
15035 <listitem>
15036 <para>
15037 Updated <filename>contrib/mysql</filename>
15038 </para>
15039 </listitem>
15041 <listitem>
15042 <para>
15043 New version of <filename>contrib/btree_gist</> (Teodor)
15044 </para>
15045 </listitem>
15047 <listitem>
15048 <para>
15049 New <filename>contrib/trgm</>, trigram matching for
15050 <productname>PostgreSQL</productname> (Teodor)
15051 </para>
15052 </listitem>
15054 <listitem>
15055 <para>
15056 Many <filename>contrib/tsearch2</> improvements (Teodor)
15057 </para>
15058 </listitem>
15060 <listitem>
15061 <para>
15062 Add double metaphone to <filename>contrib/fuzzystrmatch</> (Andrew)
15063 </para>
15064 </listitem>
15066 <listitem>
15067 <para>
15068 Allow <filename>contrib/pg_autovacuum</> to run as a Windows service (Dave Page)
15069 </para>
15070 </listitem>
15072 <listitem>
15073 <para>
15074 Add functions to <filename>contrib/dbsize</> (Andreas Pflug)
15075 </para>
15076 </listitem>
15078 <listitem>
15079 <para>
15080 Removed <filename>contrib/pg_logger</>: obsoleted by integrated logging
15081 subprocess
15082 </para>
15083 </listitem>
15085 <listitem>
15086 <para>
15087 Removed <filename>contrib/rserv</>: obsoleted by various separate projects
15088 </para>
15089 </listitem>
15091 </itemizedlist>
15092 </sect3>
15094 </sect2>
15095 </sect1>
15097 <sect1 id="release-7-4-20">
15098 <title>Release 7.4.20</title>
15100 <note>
15101 <title>Release date</title>
15102 <simpara>2008-06-09</simpara>
15103 </note>
15105 <para>
15106 This release contains a variety of fixes from 7.4.19.
15107 For information about new features in the 7.4 major release, see
15108 <xref linkend="release-7-4">.
15109 </para>
15111 <sect2>
15112 <title>Migration to Version 7.4.20</title>
15114 <para>
15115 A dump/restore is not required for those running 7.4.X.
15116 However, if you are upgrading from a version earlier than 7.4.11,
15117 see the release notes for 7.4.11.
15118 </para>
15120 </sect2>
15122 <sect2>
15123 <title>Changes</title>
15125 <itemizedlist>
15127 <listitem>
15128 <para>
15129 Fix conversions between ISO-8859-5 and other encodings to handle
15130 Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
15131 two dots) (Sergey Burladyan)
15132 </para>
15133 </listitem>
15135 <listitem>
15136 <para>
15137 Fix a few datatype input functions
15138 that were allowing unused bytes in their results to contain
15139 uninitialized, unpredictable values (Tom)
15140 </para>
15142 <para>
15143 This could lead to failures in which two apparently identical literal
15144 values were not seen as equal, resulting in the parser complaining
15145 about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
15146 expressions.
15147 </para>
15148 </listitem>
15150 <listitem>
15151 <para>
15152 Fix a corner case in regular-expression substring matching
15153 (<literal>substring(<replaceable>string</> from
15154 <replaceable>pattern</>)</literal>) (Tom)
15155 </para>
15157 <para>
15158 The problem occurs when there is a match to the pattern overall but
15159 the user has specified a parenthesized subexpression and that
15160 subexpression hasn't got a match. An example is
15161 <literal>substring('foo' from 'foo(bar)?')</>.
15162 This should return NULL, since <literal>(bar)</> isn't matched, but
15163 it was mistakenly returning the whole-pattern match instead (ie,
15164 <literal>foo</>).
15165 </para>
15166 </listitem>
15168 <listitem>
15169 <para>
15170 Fix incorrect result from <application>ecpg</>'s
15171 <function>PGTYPEStimestamp_sub()</> function (Michael)
15172 </para>
15173 </listitem>
15175 <listitem>
15176 <para>
15177 Fix <literal>DatumGetBool</> macro to not fail with <application>gcc</>
15178 4.3 (Tom)
15179 </para>
15181 <para>
15182 This problem affects <quote>old style</> (V0) C functions that
15183 return boolean. The fix is already in 8.3, but the need to
15184 back-patch it was not realized at the time.
15185 </para>
15186 </listitem>
15188 <listitem>
15189 <para>
15190 Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
15191 race condition (Tom)
15192 </para>
15194 <para>
15195 In rare cases a session that had just executed a
15196 <command>LISTEN</> might not get a notification, even though
15197 one would be expected because the concurrent transaction executing
15198 <command>NOTIFY</> was observed to commit later.
15199 </para>
15201 <para>
15202 A side effect of the fix is that a transaction that has executed
15203 a not-yet-committed <command>LISTEN</> command will not see any
15204 row in <structname>pg_listener</> for the <command>LISTEN</>,
15205 should it choose to look; formerly it would have. This behavior
15206 was never documented one way or the other, but it is possible that
15207 some applications depend on the old behavior.
15208 </para>
15209 </listitem>
15211 <listitem>
15212 <para>
15213 Fix display of constant expressions in <literal>ORDER BY</>
15214 and <literal>GROUP BY</> (Tom)
15215 </para>
15217 <para>
15218 An explictly casted constant would be shown incorrectly. This could
15219 for example lead to corruption of a view definition during
15220 dump and reload.
15221 </para>
15222 </listitem>
15224 <listitem>
15225 <para>
15226 Fix <application>libpq</> to handle NOTICE messages correctly
15227 during COPY OUT (Tom)
15228 </para>
15230 <para>
15231 This failure has only been observed to occur when a user-defined
15232 datatype's output routine issues a NOTICE, but there is no
15233 guarantee it couldn't happen due to other causes.
15234 </para>
15235 </listitem>
15237 </itemizedlist>
15239 </sect2>
15240 </sect1>
15242 <sect1 id="release-7-4-19">
15243 <title>Release 7.4.19</title>
15245 <note>
15246 <title>Release date</title>
15247 <simpara>2008-01-07</simpara>
15248 </note>
15250 <para>
15251 This release contains a variety of fixes from 7.4.18,
15252 including fixes for significant security issues.
15253 For information about new features in the 7.4 major release, see
15254 <xref linkend="release-7-4">.
15255 </para>
15257 <sect2>
15258 <title>Migration to Version 7.4.19</title>
15260 <para>
15261 A dump/restore is not required for those running 7.4.X. However,
15262 if you are upgrading from a version earlier than 7.4.11, see the release
15263 notes for 7.4.11.
15264 </para>
15266 </sect2>
15268 <sect2>
15269 <title>Changes</title>
15271 <itemizedlist>
15273 <listitem>
15274 <para>
15275 Prevent functions in indexes from executing with the privileges of
15276 the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
15277 </para>
15279 <para>
15280 Functions used in index expressions and partial-index
15281 predicates are evaluated whenever a new table entry is made. It has
15282 long been understood that this poses a risk of trojan-horse code
15283 execution if one modifies a table owned by an untrustworthy user.
15284 (Note that triggers, defaults, check constraints, etc. pose the
15285 same type of risk.) But functions in indexes pose extra danger
15286 because they will be executed by routine maintenance operations
15287 such as <command>VACUUM FULL</>, which are commonly performed
15288 automatically under a superuser account. For example, a nefarious user
15289 can execute code with superuser privileges by setting up a
15290 trojan-horse index definition and waiting for the next routine vacuum.
15291 The fix arranges for standard maintenance operations
15292 (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
15293 and <command>CLUSTER</>) to execute as the table owner rather than
15294 the calling user, using the same privilege-switching mechanism already
15295 used for <literal>SECURITY DEFINER</> functions. To prevent bypassing
15296 this security measure, execution of <command>SET SESSION
15297 AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
15298 <literal>SECURITY DEFINER</> context. (CVE-2007-6600)
15299 </para>
15300 </listitem>
15302 <listitem>
15303 <para>
15304 Repair assorted bugs in the regular-expression package (Tom, Will Drewry)
15305 </para>
15307 <para>
15308 Suitably crafted regular-expression patterns could cause crashes,
15309 infinite or near-infinite looping, and/or massive memory consumption,
15310 all of which pose denial-of-service hazards for applications that
15311 accept regex search patterns from untrustworthy sources.
15312 (CVE-2007-4769, CVE-2007-4772, CVE-2007-6067)
15313 </para>
15314 </listitem>
15316 <listitem>
15317 <para>
15318 Require non-superusers who use <filename>/contrib/dblink</> to use only
15319 password authentication, as a security measure (Joe)
15320 </para>
15322 <para>
15323 The fix that appeared for this in 7.4.18 was incomplete, as it plugged
15324 the hole for only some <filename>dblink</> functions. (CVE-2007-6601,
15325 CVE-2007-3278)
15326 </para>
15327 </listitem>
15329 <listitem>
15330 <para>
15331 Fix planner failure in some cases of <literal>WHERE false AND var IN
15332 (SELECT ...)</> (Tom)
15333 </para>
15334 </listitem>
15336 <listitem>
15337 <para>
15338 Fix potential crash in <function>translate()</> when using a multibyte
15339 database encoding (Tom)
15340 </para>
15341 </listitem>
15343 <listitem>
15344 <para>
15345 Fix PL/Python to not crash on long exception messages (Alvaro)
15346 </para>
15347 </listitem>
15349 <listitem>
15350 <para>
15351 <application>ecpg</> parser fixes (Michael)
15352 </para>
15353 </listitem>
15355 <listitem>
15356 <para>
15357 Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
15358 NULL rowid as a category in its own right, rather than crashing (Joe)
15359 </para>
15360 </listitem>
15362 <listitem>
15363 <para>
15364 Fix <type>tsvector</> and <type>tsquery</> output routines to
15365 escape backslashes correctly (Teodor, Bruce)
15366 </para>
15367 </listitem>
15369 <listitem>
15370 <para>
15371 Fix crash of <function>to_tsvector()</> on huge input strings (Teodor)
15372 </para>
15373 </listitem>
15375 <listitem>
15376 <para>
15377 Require a specific version of <productname>Autoconf</> to be used
15378 when re-generating the <command>configure</> script (Peter)
15379 </para>
15381 <para>
15382 This affects developers and packagers only. The change was made
15383 to prevent accidental use of untested combinations of
15384 <productname>Autoconf</> and <productname>PostgreSQL</> versions.
15385 You can remove the version check if you really want to use a
15386 different <productname>Autoconf</> version, but it's
15387 your responsibility whether the result works or not.
15388 </para>
15389 </listitem>
15391 </itemizedlist>
15393 </sect2>
15394 </sect1>
15396 <sect1 id="release-7-4-18">
15397 <title>Release 7.4.18</title>
15399 <note>
15400 <title>Release date</title>
15401 <simpara>2007-09-17</simpara>
15402 </note>
15404 <para>
15405 This release contains fixes from 7.4.17.
15406 For information about new features in the 7.4 major release, see
15407 <xref linkend="release-7-4">.
15408 </para>
15410 <sect2>
15411 <title>Migration to Version 7.4.18</title>
15413 <para>
15414 A dump/restore is not required for those running 7.4.X. However,
15415 if you are upgrading from a version earlier than 7.4.11, see the release
15416 notes for 7.4.11.
15417 </para>
15419 </sect2>
15421 <sect2>
15422 <title>Changes</title>
15424 <itemizedlist>
15426 <listitem>
15427 <para>
15428 Prevent index corruption when a transaction inserts rows and
15429 then aborts close to the end of a concurrent <command>VACUUM</>
15430 on the same table (Tom)
15431 </para>
15432 </listitem>
15434 <listitem>
15435 <para>
15436 Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
15437 </para>
15438 </listitem>
15440 <listitem>
15441 <para>
15442 Fix excessive logging of <acronym>SSL</> error messages (Tom)
15443 </para>
15444 </listitem>
15446 <listitem>
15447 <para>
15448 Fix crash when <varname>log_min_error_statement</> logging runs out
15449 of memory (Tom)
15450 </para>
15451 </listitem>
15453 <listitem>
15454 <para>
15455 Prevent <command>CLUSTER</> from failing
15456 due to attempting to process temporary tables of other sessions (Alvaro)
15457 </para>
15458 </listitem>
15460 <listitem>
15461 <para>
15462 Require non-superusers who use <filename>/contrib/dblink</> to use only
15463 password authentication, as a security measure (Joe)
15464 </para>
15465 </listitem>
15467 </itemizedlist>
15469 </sect2>
15470 </sect1>
15472 <sect1 id="release-7-4-17">
15473 <title>Release 7.4.17</title>
15475 <note>
15476 <title>Release date</title>
15477 <simpara>2007-04-23</simpara>
15478 </note>
15480 <para>
15481 This release contains fixes from 7.4.16,
15482 including a security fix.
15483 For information about new features in the 7.4 major release, see
15484 <xref linkend="release-7-4">.
15485 </para>
15487 <sect2>
15488 <title>Migration to Version 7.4.17</title>
15490 <para>
15491 A dump/restore is not required for those running 7.4.X. However,
15492 if you are upgrading from a version earlier than 7.4.11, see the release
15493 notes for 7.4.11.
15494 </para>
15496 </sect2>
15498 <sect2>
15499 <title>Changes</title>
15501 <itemizedlist>
15503 <listitem>
15504 <para>
15505 Support explicit placement of the temporary-table schema within
15506 <varname>search_path</>, and disable searching it for functions
15507 and operators (Tom)
15508 </para>
15509 <para>
15510 This is needed to allow a security-definer function to set a
15511 truly secure value of <varname>search_path</>. Without it,
15512 an unprivileged SQL user can use temporary objects to execute code
15513 with the privileges of the security-definer function (CVE-2007-2138).
15514 See <command>CREATE FUNCTION</> for more information.
15515 </para>
15516 </listitem>
15518 <listitem>
15519 <para>
15520 <filename>/contrib/tsearch2</> crash fixes (Teodor)
15521 </para>
15522 </listitem>
15524 <listitem>
15525 <para>
15526 Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
15527 <command>UPDATE</> chains (Tom, Pavan Deolasee)
15528 </para>
15529 </listitem>
15531 <listitem>
15532 <para>
15533 Fix PANIC during enlargement of a hash index (bug introduced in 7.4.15)
15534 (Tom)
15535 </para>
15536 </listitem>
15538 </itemizedlist>
15540 </sect2>
15541 </sect1>
15543 <sect1 id="release-7-4-16">
15544 <title>Release 7.4.16</title>
15546 <note>
15547 <title>Release date</title>
15548 <simpara>2007-02-05</simpara>
15549 </note>
15551 <para>
15552 This release contains a variety of fixes from 7.4.15, including
15553 a security fix.
15554 For information about new features in the 7.4 major release, see
15555 <xref linkend="release-7-4">.
15556 </para>
15558 <sect2>
15559 <title>Migration to Version 7.4.16</title>
15561 <para>
15562 A dump/restore is not required for those running 7.4.X. However,
15563 if you are upgrading from a version earlier than 7.4.11, see the release
15564 notes for 7.4.11.
15565 </para>
15567 </sect2>
15569 <sect2>
15570 <title>Changes</title>
15572 <itemizedlist>
15574 <listitem>
15575 <para>
15576 Remove security vulnerability that allowed connected users
15577 to read backend memory (Tom)
15578 </para>
15579 <para>
15580 The vulnerability involves suppressing the normal check that a SQL
15581 function returns the data type it's declared to, or changing the
15582 data type of a table column used in a SQL function (CVE-2007-0555).
15583 This error can easily be exploited to cause a backend crash, and in
15584 principle might be used to read database content that the user
15585 should not be able to access.
15586 </para>
15587 </listitem>
15589 <listitem>
15590 <para>
15591 Fix rare bug wherein btree index page splits could fail
15592 due to choosing an infeasible split point (Heikki Linnakangas)
15593 </para>
15594 </listitem>
15596 <listitem>
15597 <para>
15598 Fix for rare Assert() crash triggered by <literal>UNION</> (Tom)
15599 </para>
15600 </listitem>
15602 <listitem>
15603 <para>
15604 Tighten security of multi-byte character processing for UTF8 sequences
15605 over three bytes long (Tom)
15606 </para>
15607 </listitem>
15609 </itemizedlist>
15611 </sect2>
15612 </sect1>
15614 <sect1 id="release-7-4-15">
15615 <title>Release 7.4.15</title>
15617 <note>
15618 <title>Release date</title>
15619 <simpara>2007-01-08</simpara>
15620 </note>
15622 <para>
15623 This release contains a variety of fixes from 7.4.14.
15624 For information about new features in the 7.4 major release, see
15625 <xref linkend="release-7-4">.
15626 </para>
15628 <sect2>
15629 <title>Migration to Version 7.4.15</title>
15631 <para>
15632 A dump/restore is not required for those running 7.4.X. However,
15633 if you are upgrading from a version earlier than 7.4.11, see the release
15634 notes for 7.4.11.
15635 </para>
15637 </sect2>
15639 <sect2>
15640 <title>Changes</title>
15642 <itemizedlist>
15644 <listitem>
15645 <para>
15646 Improve handling of <function>getaddrinfo()</> on AIX (Tom)
15647 </para>
15649 <para>
15650 This fixes a problem with starting the statistics collector,
15651 among other things.
15652 </para>
15653 </listitem>
15655 <listitem>
15656 <para>
15657 Fix <quote>failed to re-find parent key</> errors in
15658 <command>VACUUM</> (Tom)
15659 </para>
15660 </listitem>
15662 <listitem>
15663 <para>
15664 Fix bugs affecting multi-gigabyte hash indexes (Tom)
15665 </para>
15666 </listitem>
15668 <listitem>
15669 <para>
15670 Fix error when constructing an <literal>ARRAY[]</> made up of multiple
15671 empty elements (Tom)
15672 </para>
15673 </listitem>
15675 <listitem>
15676 <para>
15677 <function>to_number()</> and <function>to_char(numeric)</>
15678 are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
15679 new <application>initdb</> installs (Tom)
15680 </para>
15682 <para>
15683 This is because <varname>lc_numeric</> can potentially
15684 change the output of these functions.
15685 </para>
15686 </listitem>
15688 <listitem>
15689 <para>
15690 Improve index usage of regular expressions that use parentheses (Tom)
15691 </para>
15693 <para>
15694 This improves <application>psql</> <literal>\d</> performance also.
15695 </para>
15696 </listitem>
15698 </itemizedlist>
15700 </sect2>
15701 </sect1>
15703 <sect1 id="release-7-4-14">
15704 <title>Release 7.4.14</title>
15706 <note>
15707 <title>Release date</title>
15708 <simpara>2006-10-16</simpara>
15709 </note>
15711 <para>
15712 This release contains a variety of fixes from 7.4.13.
15713 For information about new features in the 7.4 major release, see
15714 <xref linkend="release-7-4">.
15715 </para>
15717 <sect2>
15718 <title>Migration to Version 7.4.14</title>
15720 <para>
15721 A dump/restore is not required for those running 7.4.X. However,
15722 if you are upgrading from a version earlier than 7.4.11, see the release
15723 notes for 7.4.11.
15724 </para>
15726 </sect2>
15728 <sect2>
15729 <title>Changes</title>
15731 <itemizedlist>
15732 <listitem><para>Fix core dump when an untyped literal is taken as
15733 ANYARRAY</para></listitem>
15734 <listitem><para>Fix <function>string_to_array()</> to handle overlapping
15735 matches for the separator string</para>
15736 <para>For example, <literal>string_to_array('123xx456xxx789', 'xx')</>.
15737 </para></listitem>
15738 <listitem><para>Fix corner cases in pattern matching for
15739 <application>psql</>'s <literal>\d</> commands</para></listitem>
15740 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
15741 (Teodor)</para></listitem>
15742 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
15743 <listitem><para>Adjust regression tests for recent changes in US DST laws
15744 </para> </listitem>
15745 </itemizedlist>
15747 </sect2>
15748 </sect1>
15750 <sect1 id="release-7-4-13">
15751 <title>Release 7.4.13</title>
15753 <note>
15754 <title>Release date</title>
15755 <simpara>2006-05-23</simpara>
15756 </note>
15758 <para>
15759 This release contains a variety of fixes from 7.4.12,
15760 including patches for extremely serious security issues.
15761 For information about new features in the 7.4 major release, see
15762 <xref linkend="release-7-4">.
15763 </para>
15765 <sect2>
15766 <title>Migration to Version 7.4.13</title>
15768 <para>
15769 A dump/restore is not required for those running 7.4.X. However,
15770 if you are upgrading from a version earlier than 7.4.11, see the release
15771 notes for 7.4.11.
15772 </para>
15774 <para>
15775 Full security against the SQL-injection attacks described in
15776 CVE-2006-2313 and CVE-2006-2314 might require changes in application
15777 code. If you have applications that embed untrustworthy strings
15778 into SQL commands, you should examine them as soon as possible to
15779 ensure that they are using recommended escaping techniques. In
15780 most cases, applications should be using subroutines provided by
15781 libraries or drivers (such as <application>libpq</>'s
15782 <function>PQescapeStringConn()</>) to perform string escaping,
15783 rather than relying on <foreignphrase>ad hoc</> code to do it.
15784 </para>
15785 </sect2>
15787 <sect2>
15788 <title>Changes</title>
15790 <itemizedlist>
15791 <listitem><para>Change the server to reject invalidly-encoded multibyte
15792 characters in all cases (Tatsuo, Tom)</para>
15793 <para>While <productname>PostgreSQL</> has been moving in this direction for
15794 some time, the checks are now applied uniformly to all encodings and all
15795 textual input, and are now always errors not merely warnings. This change
15796 defends against SQL-injection attacks of the type described in CVE-2006-2313.
15797 </para></listitem>
15799 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
15800 <para>As a server-side defense against SQL-injection attacks of the type
15801 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
15802 <literal>\'</> as a representation of ASCII single quote in SQL string
15803 literals. By default, <literal>\'</> is rejected only when
15804 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
15805 GB18030, or UHC), which is the scenario in which SQL injection is possible.
15806 A new configuration parameter <varname>backslash_quote</> is available to
15807 adjust this behavior when needed. Note that full security against
15808 CVE-2006-2314 might require client-side changes; the purpose of
15809 <varname>backslash_quote</> is in part to make it obvious that insecure
15810 clients are insecure.
15811 </para></listitem>
15813 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
15814 aware of encoding considerations and
15815 <varname>standard_conforming_strings</></para>
15816 <para>This fixes <application>libpq</>-using applications for the security
15817 issues described in CVE-2006-2313 and CVE-2006-2314, and also future-proofs
15818 them against the planned changeover to SQL-standard string literal syntax.
15819 Applications that use multiple <productname>PostgreSQL</> connections
15820 concurrently should migrate to <function>PQescapeStringConn()</> and
15821 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
15822 for the settings in use in each database connection. Applications that
15823 do string escaping <quote>by hand</> should be modified to rely on library
15824 routines instead.
15825 </para></listitem>
15827 <listitem><para>Fix some incorrect encoding conversion functions</para>
15828 <para><function>win1251_to_iso</>, <function>alt_to_iso</>,
15829 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
15830 <function>mic_to_euc_tw</> were all broken to varying
15831 extents.
15832 </para></listitem>
15834 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
15835 (Bruce, Jan)</para></listitem>
15837 <listitem><para>Fix bug that sometimes caused OR'd index scans to
15838 miss rows they should have returned</para></listitem>
15840 <listitem><para>Fix WAL replay for case where a btree index has been
15841 truncated</para></listitem>
15843 <listitem><para>Fix <literal>SIMILAR TO</> for patterns involving
15844 <literal>|</> (Tom)</para></listitem>
15846 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
15847 Fuhr)</para></listitem>
15849 <listitem><para>Fix for Bonjour on Intel Macs (Ashley Clark)</para></listitem>
15851 <listitem><para>Fix various minor memory leaks</para></listitem>
15852 </itemizedlist>
15854 </sect2>
15855 </sect1>
15857 <sect1 id="release-7-4-12">
15858 <title>Release 7.4.12</title>
15860 <note>
15861 <title>Release date</title>
15862 <simpara>2006-02-14</simpara>
15863 </note>
15865 <para>
15866 This release contains a variety of fixes from 7.4.11.
15867 For information about new features in the 7.4 major release, see
15868 <xref linkend="release-7-4">.
15869 </para>
15871 <sect2>
15872 <title>Migration to Version 7.4.12</title>
15874 <para>
15875 A dump/restore is not required for those running 7.4.X. However,
15876 if you are upgrading from a version earlier than 7.4.11, see the release
15877 notes for 7.4.11.
15878 </para>
15879 </sect2>
15881 <sect2>
15882 <title>Changes</title>
15884 <itemizedlist>
15886 <listitem><para>Fix potential crash in <command>SET
15887 SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
15888 <para>An unprivileged user could crash the server process, resulting in
15889 momentary denial of service to other users, if the server has been compiled
15890 with Asserts enabled (which is not the default).
15891 Thanks to Akio Ishida for reporting this problem.
15892 </para></listitem>
15894 <listitem><para>Fix bug with row visibility logic in self-inserted
15895 rows (Tom)</para>
15896 <para>Under rare circumstances a row inserted by the current command
15897 could be seen as already valid, when it should not be. Repairs bug
15898 created in 7.4.9 and 7.3.11 releases.
15899 </para></listitem>
15901 <listitem><para>Fix race condition that could lead to <quote>file already
15902 exists</> errors during pg_clog file creation
15903 (Tom)</para></listitem>
15905 <listitem><para>Properly check <literal>DOMAIN</> constraints for
15906 <literal>UNKNOWN</> parameters in prepared statements
15907 (Neil)</para></listitem>
15909 <listitem><para>Fix to allow restoring dumps that have cross-schema
15910 references to custom operators (Tom)</para></listitem>
15912 <listitem><para>Portability fix for testing presence of <function>finite</>
15913 and <function>isinf</> during configure (Tom)</para></listitem>
15915 </itemizedlist>
15917 </sect2>
15918 </sect1>
15920 <sect1 id="release-7-4-11">
15921 <title>Release 7.4.11</title>
15923 <note>
15924 <title>Release date</title>
15925 <simpara>2006-01-09</simpara>
15926 </note>
15928 <para>
15929 This release contains a variety of fixes from 7.4.10.
15930 For information about new features in the 7.4 major release, see
15931 <xref linkend="release-7-4">.
15932 </para>
15934 <sect2>
15935 <title>Migration to Version 7.4.11</title>
15937 <para>
15938 A dump/restore is not required for those running 7.4.X. However,
15939 if you are upgrading from a version earlier than 7.4.8, see the release
15940 notes for 7.4.8.
15941 Also, you might need to <command>REINDEX</> indexes on textual
15942 columns after updating, if you are affected by the locale or
15943 <application>plperl</> issues described below.
15944 </para>
15945 </sect2>
15947 <sect2>
15948 <title>Changes</title>
15950 <itemizedlist>
15952 <listitem><para>Fix for protocol-level Describe messages issued
15953 outside a transaction or in a failed transaction (Tom)</para></listitem>
15955 <listitem><para>Fix character string comparison for locales that consider
15956 different character combinations as equal, such as Hungarian (Tom)</para>
15957 <para>This might require <command>REINDEX</> to fix existing indexes on
15958 textual columns.</para></listitem>
15960 <listitem><para>Set locale environment variables during postmaster startup
15961 to ensure that <application>plperl</> won't change the locale later</para>
15962 <para>This fixes a problem that occurred if the <application>postmaster</> was
15963 started with environment variables specifying a different locale than what
15964 <application>initdb</> had been told. Under these conditions, any use of
15965 <application>plperl</> was likely to lead to corrupt indexes. You might need
15966 <command>REINDEX</> to fix existing indexes on
15967 textual columns if this has happened to you.</para></listitem>
15969 <listitem><para>Fix longstanding bug in strpos() and regular expression
15970 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
15971 </para></listitem>
15973 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
15974 which caused it not to use all available salt space for MD5 and
15975 XDES algorithms (Marko Kreen, Solar Designer)</para>
15976 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
15978 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
15979 rather than crashing, when the number of columns specified is different from
15980 what's actually returned by the query (Joe)</para></listitem>
15982 </itemizedlist>
15984 </sect2>
15985 </sect1>
15987 <sect1 id="release-7-4-10">
15988 <title>Release 7.4.10</title>
15990 <note>
15991 <title>Release date</title>
15992 <simpara>2005-12-12</simpara>
15993 </note>
15995 <para>
15996 This release contains a variety of fixes from 7.4.9.
15997 For information about new features in the 7.4 major release, see
15998 <xref linkend="release-7-4">.
15999 </para>
16001 <sect2>
16002 <title>Migration to Version 7.4.10</title>
16004 <para>
16005 A dump/restore is not required for those running 7.4.X. However,
16006 if you are upgrading from a version earlier than 7.4.8, see the release
16007 notes for 7.4.8.
16008 </para>
16009 </sect2>
16011 <sect2>
16012 <title>Changes</title>
16014 <itemizedlist>
16016 <listitem><para>Fix race condition in transaction log management</para>
16017 <para>There was a narrow window in which an I/O operation could be initiated
16018 for the wrong page, leading to an Assert failure or data
16019 corruption.</para>
16020 </listitem>
16022 <listitem><para>Prevent failure if client sends Bind protocol message
16023 when current transaction is already aborted</para></listitem>
16025 <listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
16027 <listitem><para>AIX and HPUX compile fixes (Tom)</para></listitem>
16029 <listitem><para>Fix longstanding planning error for outer joins</para>
16030 <para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
16031 only supported with merge-joinable join conditions</>.</para></listitem>
16033 <listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
16034 table has been dropped</para></listitem>
16035 </itemizedlist>
16037 </sect2>
16038 </sect1>
16040 <sect1 id="release-7-4-9">
16041 <title>Release 7.4.9</title>
16043 <note>
16044 <title>Release date</title>
16045 <simpara>2005-10-04</simpara>
16046 </note>
16048 <para>
16049 This release contains a variety of fixes from 7.4.8.
16050 For information about new features in the 7.4 major release, see
16051 <xref linkend="release-7-4">.
16052 </para>
16054 <sect2>
16055 <title>Migration to Version 7.4.9</title>
16057 <para>
16058 A dump/restore is not required for those running 7.4.X. However,
16059 if you are upgrading from a version earlier than 7.4.8, see the release
16060 notes for 7.4.8.
16061 </para>
16062 </sect2>
16064 <sect2>
16065 <title>Changes</title>
16067 <itemizedlist>
16068 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
16069 <literal>ctid</> chains too soon, and add more checking in code that follows
16070 <literal>ctid</> links</para>
16071 <para>This fixes a long-standing problem that could cause crashes in very rare
16072 circumstances.</para></listitem>
16073 <listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
16074 length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
16075 <para>In prior releases, the padding of <type>CHAR()</> was incorrect
16076 because it only padded to the specified number of bytes without
16077 considering how many characters were stored.</para></listitem>
16078 <listitem><para>Fix the sense of the test for read-only transaction
16079 in <command>COPY</></para>
16080 <para>The code formerly prohibited <command>COPY TO</>, where it should
16081 prohibit <command>COPY FROM</>.
16082 </para></listitem>
16083 <listitem><para>Fix planning problem with outer-join ON clauses that reference
16084 only the inner-side relation</para></listitem>
16085 <listitem><para>Further fixes for <literal>x FULL JOIN y ON true</> corner
16086 cases</para></listitem>
16087 <listitem><para>Make <function>array_in</> and <function>array_recv</> more
16088 paranoid about validating their OID parameter</para></listitem>
16089 <listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
16090 a...</> with GiST index on column <literal>a</></para></listitem>
16091 <listitem><para>Improve robustness of datetime parsing</para></listitem>
16092 <listitem><para>Improve checking for partially-written WAL
16093 pages</para></listitem>
16094 <listitem><para>Improve robustness of signal handling when SSL is
16095 enabled</para></listitem>
16096 <listitem><para>Don't try to open more than <literal>max_files_per_process</>
16097 files during postmaster startup</para></listitem>
16098 <listitem><para>Various memory leakage fixes</para></listitem>
16099 <listitem><para>Various portability improvements</para></listitem>
16100 <listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
16101 the variable is of pass-by-reference type</para></listitem>
16102 <listitem><para>Update <filename>contrib/tsearch2</> to use current Snowball
16103 code</para></listitem>
16104 </itemizedlist>
16106 </sect2>
16107 </sect1>
16109 <sect1 id="release-7-4-8">
16110 <title>Release 7.4.8</title>
16112 <note>
16113 <title>Release date</title>
16114 <simpara>2005-05-09</simpara>
16115 </note>
16117 <para>
16118 This release contains a variety of fixes from 7.4.7, including several
16119 security-related issues.
16120 For information about new features in the 7.4 major release, see
16121 <xref linkend="release-7-4">.
16122 </para>
16124 <sect2>
16125 <title>Migration to Version 7.4.8</title>
16127 <para>
16128 A dump/restore is not required for those running 7.4.X. However,
16129 it is one possible way of handling two significant security problems
16130 that have been found in the initial contents of 7.4.X system
16131 catalogs. A dump/initdb/reload sequence using 7.4.8's initdb will
16132 automatically correct these problems.
16133 </para>
16135 <para>
16136 The larger security problem is that the built-in character set encoding
16137 conversion functions can be invoked from SQL commands by unprivileged
16138 users, but the functions were not designed for such use and are not
16139 secure against malicious choices of arguments. The fix involves changing
16140 the declared parameter list of these functions so that they can no longer
16141 be invoked from SQL commands. (This does not affect their normal use
16142 by the encoding conversion machinery.)
16143 </para>
16145 <para>
16146 The lesser problem is that the <filename>contrib/tsearch2</> module
16147 creates several functions that are misdeclared to return
16148 <type>internal</> when they do not accept <type>internal</> arguments.
16149 This breaks type safety for all functions using <type>internal</>
16150 arguments.
16151 </para>
16153 <para>
16154 It is strongly recommended that all installations repair these errors,
16155 either by initdb or by following the manual repair procedures given
16156 below. The errors at least allow unprivileged database users to crash
16157 their server process, and might allow unprivileged users to gain the
16158 privileges of a database superuser.
16159 </para>
16161 <para>
16162 If you wish not to do an initdb, perform the following procedures instead.
16163 As the database superuser, do:
16165 <programlisting>
16166 BEGIN;
16167 UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
16168 WHERE pronamespace = 11 AND pronargs = 5
16169 AND proargtypes[2] = 'cstring'::regtype;
16170 -- The command should report having updated 90 rows;
16171 -- if not, rollback and investigate instead of committing!
16172 COMMIT;
16173 </programlisting>
16175 Next, if you have installed <filename>contrib/tsearch2</>, do:
16177 <programlisting>
16178 BEGIN;
16179 UPDATE pg_proc SET proargtypes[0] = 'internal'::regtype
16180 WHERE oid IN (
16181 'dex_init(text)'::regprocedure,
16182 'snb_en_init(text)'::regprocedure,
16183 'snb_ru_init(text)'::regprocedure,
16184 'spell_init(text)'::regprocedure,
16185 'syn_init(text)'::regprocedure
16187 -- The command should report having updated 5 rows;
16188 -- if not, rollback and investigate instead of committing!
16189 COMMIT;
16190 </programlisting>
16192 If this command fails with a message like <quote>function
16193 "dex_init(text)" does not exist</>, then either <filename>tsearch2</>
16194 is not installed in this database, or you already did the update.
16195 </para>
16197 <para>
16198 The above procedures must be carried out in <emphasis>each</> database
16199 of an installation, including <literal>template1</>, and ideally
16200 including <literal>template0</> as well. If you do not fix the
16201 template databases then any subsequently created databases will contain
16202 the same errors. <literal>template1</> can be fixed in the same way
16203 as any other database, but fixing <literal>template0</> requires
16204 additional steps. First, from any database issue:
16205 <programlisting>
16206 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
16207 </programlisting>
16208 Next connect to <literal>template0</> and perform the above repair
16209 procedures. Finally, do:
16210 <programlisting>
16211 -- re-freeze template0:
16212 VACUUM FREEZE;
16213 -- and protect it against future alterations:
16214 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
16215 </programlisting>
16216 </para>
16217 </sect2>
16219 <sect2>
16220 <title>Changes</title>
16222 <itemizedlist>
16223 <listitem><para>Change encoding function signature to prevent
16224 misuse</para></listitem>
16225 <listitem><para>Change <filename>contrib/tsearch2</> to avoid unsafe use of
16226 <type>INTERNAL</> function results</para></listitem>
16227 <listitem><para>Repair ancient race condition that allowed a transaction to be
16228 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
16229 than for other purposes</para>
16230 <para>This is an extremely serious bug since it could lead to apparent
16231 data inconsistencies being briefly visible to applications.</para></listitem>
16232 <listitem><para>Repair race condition between relation extension and
16233 VACUUM</para>
16234 <para>This could theoretically have caused loss of a page's worth of
16235 freshly-inserted data, although the scenario seems of very low probability.
16236 There are no known cases of it having caused more than an Assert failure.
16237 </para></listitem>
16238 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
16239 <para>
16240 The comparison code was wrong in the case where the
16241 <literal>--enable-integer-datetimes</> configuration switch had been used.
16242 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
16243 it will need to be <command>REINDEX</>ed after installing this update, because
16244 the fix corrects the sort order of column values.
16245 </para></listitem>
16246 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
16247 <type>TIME WITH TIME ZONE</> values</para></listitem>
16248 <listitem><para>Fix mis-display of negative fractional seconds in
16249 <type>INTERVAL</> values</para>
16250 <para>
16251 This error only occurred when the
16252 <literal>--enable-integer-datetimes</> configuration switch had been used.
16253 </para></listitem>
16254 <listitem><para>Ensure operations done during backend shutdown are counted by
16255 statistics collector</para>
16256 <para>
16257 This is expected to resolve reports of <application>pg_autovacuum</>
16258 not vacuuming the system catalogs often enough &mdash; it was not being
16259 told about catalog deletions caused by temporary table removal during
16260 backend exit.
16261 </para></listitem>
16262 <listitem><para>Additional buffer overrun checks in plpgsql
16263 (Neil)</para></listitem>
16264 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
16265 correctly (Neil)</para></listitem>
16266 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
16267 (Marko Kreen)</para></listitem>
16268 <listitem><para>Still more 64-bit fixes for
16269 <filename>contrib/intagg</></para></listitem>
16270 <listitem><para>Prevent incorrect optimization of functions returning
16271 <type>RECORD</></para></listitem>
16272 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
16273 month-related formats</para></listitem>
16274 <listitem><para>Prevent crash on <literal>COALESCE(NULL,NULL)</></para></listitem>
16275 <listitem><para>Fix <function>array_map</> to call PL functions correctly</para></listitem>
16276 <listitem><para>Fix permission checking in <command>ALTER DATABASE RENAME</></para></listitem>
16277 <listitem><para>Fix <command>ALTER LANGUAGE RENAME</></para></listitem>
16278 <listitem><para>Make <function>RemoveFromWaitQueue</> clean up after itself</para>
16279 <para>
16280 This fixes a lock management error that would only be visible if a transaction
16281 was kicked out of a wait for a lock (typically by query cancel) and then the
16282 holder of the lock released it within a very narrow window.
16283 </para></listitem>
16284 <listitem><para>Fix problem with untyped parameter appearing in
16285 <command>INSERT ... SELECT</></para></listitem>
16286 <listitem><para>Fix <command>CLUSTER</> failure after
16287 <command>ALTER TABLE SET WITHOUT OIDS</></para></listitem>
16288 </itemizedlist>
16290 </sect2>
16291 </sect1>
16293 <sect1 id="release-7-4-7">
16294 <title>Release 7.4.7</title>
16296 <note>
16297 <title>Release date</title>
16298 <simpara>2005-01-31</simpara>
16299 </note>
16301 <para>
16302 This release contains a variety of fixes from 7.4.6, including several
16303 security-related issues.
16304 For information about new features in the 7.4 major release, see
16305 <xref linkend="release-7-4">.
16306 </para>
16308 <sect2>
16309 <title>Migration to Version 7.4.7</title>
16311 <para>
16312 A dump/restore is not required for those running 7.4.X.
16313 </para>
16314 </sect2>
16316 <sect2>
16317 <title>Changes</title>
16319 <itemizedlist>
16320 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
16321 <para>
16322 On platforms that will automatically execute initialization functions of a
16323 shared library (this includes at least Windows and ELF-based Unixen),
16324 <command>LOAD</> can be used to make the server execute arbitrary code.
16325 Thanks to NGS Software for reporting this.</para></listitem>
16326 <listitem><para>Check that creator of an aggregate function has the right to
16327 execute the specified transition functions</para>
16328 <para>
16329 This oversight made it possible to bypass denial of EXECUTE
16330 permission on a function.</para></listitem>
16331 <listitem><para>Fix security and 64-bit issues in
16332 contrib/intagg</para></listitem>
16333 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
16334 Jurka)</para></listitem>
16335 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
16336 many parameters (Neil)</para></listitem>
16337 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
16338 <para>
16339 The result of the join was mistakenly supposed to be sorted the same as the
16340 left input. This could not only deliver mis-sorted output to the user, but
16341 in case of nested merge joins could give outright wrong answers.
16342 </para></listitem>
16343 <listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
16344 <listitem><para>Fix display of negative intervals in SQL and GERMAN
16345 datestyles</para></listitem>
16346 <listitem><para>Make age(timestamptz) do calculation in local timezone not
16347 GMT</para></listitem>
16348 </itemizedlist>
16350 </sect2>
16351 </sect1>
16353 <sect1 id="release-7-4-6">
16354 <title>Release 7.4.6</title>
16356 <note>
16357 <title>Release date</title>
16358 <simpara>2004-10-22</simpara>
16359 </note>
16361 <para>
16362 This release contains a variety of fixes from 7.4.5.
16363 For information about new features in the 7.4 major release, see
16364 <xref linkend="release-7-4">.
16365 </para>
16368 <sect2>
16369 <title>Migration to Version 7.4.6</title>
16371 <para>
16372 A dump/restore is not required for those running 7.4.X.
16373 </para>
16374 </sect2>
16376 <sect2>
16377 <title>Changes</title>
16379 <itemizedlist>
16380 <listitem><para>Repair possible failure to update hint bits on disk</para>
16381 <para>
16382 Under rare circumstances this oversight could lead to
16383 <quote>could not access transaction status</> failures, which qualifies
16384 it as a potential-data-loss bug.
16385 </para></listitem>
16386 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
16387 <para>
16388 Very large left joins using a hash join plan could fail to output unmatched
16389 left-side rows given just the right data distribution.
16390 </para></listitem>
16391 <listitem><para>Disallow running <application>pg_ctl</> as root</para>
16392 <para>
16393 This is to guard against any possible security issues.
16394 </para></listitem>
16395 <listitem><para>Avoid using temp files in <filename>/tmp</> in <command>make_oidjoins_check</command></para>
16396 <para>
16397 This has been reported as a security issue, though it's hardly worthy of
16398 concern since there is no reason for non-developers to use this script anyway.
16399 </para></listitem>
16400 <listitem><para>Prevent forced backend shutdown from re-emitting prior command
16401 result</para>
16402 <para>
16403 In rare cases, a client might think that its last command had succeeded when
16404 it really had been aborted by forced database shutdown.
16405 </para></listitem>
16406 <listitem><para>Repair bug in <function>pg_stat_get_backend_idset</function></para>
16407 <para>
16408 This could lead to misbehavior in some of the system-statistics views.
16409 </para></listitem>
16410 <listitem><para>Fix small memory leak in postmaster</para></listitem>
16411 <listitem><para>Fix <quote>expected both swapped tables to have TOAST
16412 tables</> bug</para>
16413 <para>
16414 This could arise in cases such as CLUSTER after ALTER TABLE DROP COLUMN.
16415 </para></listitem>
16416 <listitem><para>Prevent <literal>pg_ctl restart</> from adding <literal>-D</> multiple times</para></listitem>
16417 <listitem><para>Fix problem with NULL values in GiST indexes</para></listitem>
16418 <listitem><para><literal>::</> is no longer interpreted as a variable in an
16419 ECPG prepare statement</para></listitem>
16420 </itemizedlist>
16422 </sect2>
16423 </sect1>
16425 <sect1 id="release-7-4-5">
16426 <title>Release 7.4.5</title>
16428 <note>
16429 <title>Release date</title>
16430 <simpara>2004-08-18</simpara>
16431 </note>
16433 <para>
16434 This release contains one serious bug fix over 7.4.4.
16435 For information about new features in the 7.4 major release, see
16436 <xref linkend="release-7-4">.
16437 </para>
16440 <sect2>
16441 <title>Migration to Version 7.4.5</title>
16443 <para>
16444 A dump/restore is not required for those running 7.4.X.
16445 </para>
16446 </sect2>
16448 <sect2>
16449 <title>Changes</title>
16451 <itemizedlist>
16452 <listitem><para>Repair possible crash during concurrent B-tree index insertions</para>
16453 <para>
16454 This patch fixes a rare case in which concurrent insertions into a B-tree index
16455 could result in a server panic. No permanent damage would result, but it's
16456 still worth a re-release. The bug does not exist in pre-7.4 releases.
16457 </para></listitem>
16458 </itemizedlist>
16460 </sect2>
16461 </sect1>
16463 <sect1 id="release-7-4-4">
16464 <title>Release 7.4.4</title>
16466 <note>
16467 <title>Release date</title>
16468 <simpara>2004-08-16</simpara>
16469 </note>
16471 <para>
16472 This release contains a variety of fixes from 7.4.3.
16473 For information about new features in the 7.4 major release, see
16474 <xref linkend="release-7-4">.
16475 </para>
16478 <sect2>
16479 <title>Migration to Version 7.4.4</title>
16481 <para>
16482 A dump/restore is not required for those running 7.4.X.
16483 </para>
16484 </sect2>
16486 <sect2>
16487 <title>Changes</title>
16489 <itemizedlist>
16490 <listitem><para>Prevent possible loss of committed transactions during crash</para>
16491 <para>
16492 Due to insufficient interlocking between transaction commit and checkpointing,
16493 it was possible for transactions committed just before the most recent
16494 checkpoint to be lost, in whole or in part, following a database crash and
16495 restart. This is a serious bug that has existed
16496 since <productname>PostgreSQL</productname> 7.1.
16497 </para></listitem>
16498 <listitem><para>Check HAVING restriction before evaluating result list of an
16499 aggregate plan</para></listitem>
16500 <listitem><para>Avoid crash when session's current user ID is deleted</para></listitem>
16501 <listitem><para>Fix hashed crosstab for zero-rows case (Joe)</para></listitem>
16502 <listitem><para>Force cache update after renaming a column in a foreign key</para></listitem>
16503 <listitem><para>Pretty-print UNION queries correctly</para></listitem>
16504 <listitem><para>Make psql handle <literal>\r\n</> newlines properly in COPY IN</para></listitem>
16505 <listitem><para><application>pg_dump</> handled ACLs with grant options incorrectly</para></listitem>
16506 <listitem><para>Fix thread support for OS X and Solaris</para></listitem>
16507 <listitem><para>Updated JDBC driver (build 215) with various fixes</para></listitem>
16508 <listitem><para>ECPG fixes</para></listitem>
16509 <listitem><para>Translation updates (various contributors)</para></listitem>
16510 </itemizedlist>
16512 </sect2>
16513 </sect1>
16515 <sect1 id="release-7-4-3">
16516 <title>Release 7.4.3</title>
16518 <note>
16519 <title>Release date</title>
16520 <simpara>2004-06-14</simpara>
16521 </note>
16523 <para>
16524 This release contains a variety of fixes from 7.4.2.
16525 For information about new features in the 7.4 major release, see
16526 <xref linkend="release-7-4">.
16527 </para>
16530 <sect2>
16531 <title>Migration to Version 7.4.3</title>
16533 <para>
16534 A dump/restore is not required for those running 7.4.X.
16535 </para>
16536 </sect2>
16538 <sect2>
16539 <title>Changes</title>
16541 <itemizedlist>
16542 <listitem><para>Fix temporary memory leak when using non-hashed aggregates (Tom)</para></listitem>
16543 <listitem><para>ECPG fixes, including some for Informix compatibility (Michael)</para></listitem>
16544 <listitem><para>Fixes for compiling with thread-safety, particularly Solaris (Bruce)</para></listitem>
16545 <listitem><para>Fix error in COPY IN termination when using the old network protocol (ljb)</para></listitem>
16546 <listitem><para>Several important fixes in pg_autovacuum, including fixes for
16547 large tables, unsigned oids, stability, temp tables, and debug mode
16548 (Matthew T. O'Connor)</para></listitem>
16549 <listitem><para>Fix problem with reading tar-format dumps on NetBSD and BSD/OS (Bruce)</para></listitem>
16550 <listitem><para>Several JDBC fixes</para></listitem>
16551 <listitem><para>Fix ALTER SEQUENCE RESTART where last_value equals the restart value (Tom)</para></listitem>
16552 <listitem><para>Repair failure to recalculate nested sub-selects (Tom)</para></listitem>
16553 <listitem><para>Fix problems with non-constant expressions in LIMIT/OFFSET</para></listitem>
16554 <listitem><para>Support FULL JOIN with no join clause, such as X FULL JOIN Y ON TRUE (Tom)</para></listitem>
16555 <listitem><para>Fix another zero-column table bug (Tom)</para></listitem>
16556 <listitem><para>Improve handling of non-qualified identifiers in GROUP BY clauses in sub-selects (Tom)</para>
16557 <para>
16558 Select-list aliases within the sub-select will now take precedence over
16559 names from outer query levels.
16560 </para></listitem>
16561 <listitem><para>Do not generate <quote>NATURAL CROSS JOIN</> when decompiling rules (Tom)</para></listitem>
16562 <listitem><para>Add checks for invalid field length in binary COPY (Tom)</para>
16563 <para>
16564 This fixes a difficult-to-exploit security hole.
16565 </para></listitem>
16566 <listitem><para>Avoid locking conflict between <command>ANALYZE</command> and <command>LISTEN</command>/<command>NOTIFY</command></para></listitem>
16567 <listitem><para>Numerous translation updates (various contributors)</para></listitem>
16568 </itemizedlist>
16570 </sect2>
16571 </sect1>
16573 <sect1 id="release-7-4-2">
16574 <title>Release 7.4.2</title>
16576 <note>
16577 <title>Release date</title>
16578 <simpara>2004-03-08</simpara>
16579 </note>
16581 <para>
16582 This release contains a variety of fixes from 7.4.1.
16583 For information about new features in the 7.4 major release, see
16584 <xref linkend="release-7-4">.
16585 </para>
16588 <sect2>
16589 <title>Migration to Version 7.4.2</title>
16591 <para>
16592 A dump/restore is not required for those running 7.4.X. However,
16593 it might be advisable as the easiest method of incorporating fixes for
16594 two errors that have been found in the initial contents of 7.4.X system
16595 catalogs. A dump/initdb/reload sequence using 7.4.2's initdb will
16596 automatically correct these problems.
16597 </para>
16599 <para>
16600 The more severe of the two errors is that data type <type>anyarray</>
16601 has the wrong alignment label; this is a problem because the
16602 <structname>pg_statistic</> system catalog uses <type>anyarray</>
16603 columns. The mislabeling can cause planner misestimations and even
16604 crashes when planning queries that involve <literal>WHERE</> clauses on
16605 double-aligned columns (such as <type>float8</> and <type>timestamp</>).
16606 It is strongly recommended that all installations repair this error,
16607 either by initdb or by following the manual repair procedure given
16608 below.
16609 </para>
16611 <para>
16612 The lesser error is that the system view <structname>pg_settings</>
16613 ought to be marked as having public update access, to allow
16614 <literal>UPDATE pg_settings</> to be used as a substitute for
16615 <command>SET</>. This can also be fixed either by initdb or manually,
16616 but it is not necessary to fix unless you want to use <literal>UPDATE
16617 pg_settings</>.
16618 </para>
16620 <para>
16621 If you wish not to do an initdb, the following procedure will work
16622 for fixing <structname>pg_statistic</>. As the database superuser,
16625 <programlisting>
16626 -- clear out old data in pg_statistic:
16627 DELETE FROM pg_statistic;
16628 VACUUM pg_statistic;
16629 -- this should update 1 row:
16630 UPDATE pg_type SET typalign = 'd' WHERE oid = 2277;
16631 -- this should update 6 rows:
16632 UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277;
16634 -- At this point you MUST start a fresh backend to avoid a crash!
16636 -- repopulate pg_statistic:
16637 ANALYZE;
16638 </programlisting>
16640 This can be done in a live database, but beware that all backends
16641 running in the altered database must be restarted before it is safe to
16642 repopulate <structname>pg_statistic</>.
16643 </para>
16645 <para>
16646 To repair the <structname>pg_settings</> error, simply do:
16647 <programlisting>
16648 GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
16649 </programlisting>
16650 </para>
16652 <para>
16653 The above procedures must be carried out in <emphasis>each</> database
16654 of an installation, including <literal>template1</>, and ideally
16655 including <literal>template0</> as well. If you do not fix the
16656 template databases then any subsequently created databases will contain
16657 the same errors. <literal>template1</> can be fixed in the same way
16658 as any other database, but fixing <literal>template0</> requires
16659 additional steps. First, from any database issue:
16660 <programlisting>
16661 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
16662 </programlisting>
16663 Next connect to <literal>template0</> and perform the above repair
16664 procedures. Finally, do:
16665 <programlisting>
16666 -- re-freeze template0:
16667 VACUUM FREEZE;
16668 -- and protect it against future alterations:
16669 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
16670 </programlisting>
16671 </para>
16672 </sect2>
16674 <sect2>
16675 <title>Changes</title>
16677 <para>
16678 Release 7.4.2 incorporates all the fixes included in release 7.3.6,
16679 plus the following fixes:
16680 </para>
16682 <itemizedlist>
16683 <listitem><para>Fix <structname>pg_statistics</> alignment bug that could crash optimizer</para>
16684 <para>See above for details about this problem.</para></listitem>
16685 <listitem><para>Allow non-super users to update <structname>pg_settings</></para></listitem>
16686 <listitem><para>Fix several optimizer bugs, most of which led to
16687 <quote>variable not found in subplan target lists</> errors</para></listitem>
16688 <listitem><para>Avoid out-of-memory failure during startup of large multiple
16689 index scan</para></listitem>
16690 <listitem><para>Fix multibyte problem that could lead to <quote>out of
16691 memory</> error during <command>COPY IN</></para></listitem>
16692 <listitem><para>Fix problems with <command>SELECT INTO</> / <command>CREATE
16693 TABLE AS</> from tables without OIDs</para></listitem>
16694 <listitem><para>Fix problems with <filename>alter_table</> regression test
16695 during parallel testing</para></listitem>
16696 <listitem><para>Fix problems with hitting open file limit, especially on OS X (Tom)</para></listitem>
16697 <listitem><para>Partial fix for Turkish-locale issues</para>
16698 <para>initdb will succeed now in Turkish locale, but there are still some
16699 inconveniences associated with the <literal>i/I</> problem.</para></listitem>
16700 <listitem><para>Make pg_dump set client encoding on restore</para></listitem>
16701 <listitem><para>Other minor pg_dump fixes</para></listitem>
16702 <listitem><para>Allow ecpg to again use C keywords as column names (Michael)</para></listitem>
16703 <listitem><para>Added ecpg <literal>WHENEVER NOT_FOUND</> to
16704 <literal>SELECT/INSERT/UPDATE/DELETE</> (Michael)</para></listitem>
16705 <listitem><para>Fix ecpg crash for queries calling set-returning functions (Michael)</para></listitem>
16706 <listitem><para>Various other ecpg fixes (Michael)</para></listitem>
16707 <listitem><para>Fixes for Borland compiler</para></listitem>
16708 <listitem><para>Thread build improvements (Bruce)</para></listitem>
16709 <listitem><para>Various other build fixes</para></listitem>
16710 <listitem><para>Various JDBC fixes</para></listitem>
16711 </itemizedlist>
16713 </sect2>
16714 </sect1>
16716 <sect1 id="release-7-4-1">
16717 <title>Release 7.4.1</title>
16719 <note>
16720 <title>Release date</title>
16721 <simpara>2003-12-22</simpara>
16722 </note>
16724 <para>
16725 This release contains a variety of fixes from 7.4.
16726 For information about new features in the 7.4 major release, see
16727 <xref linkend="release-7-4">.
16728 </para>
16731 <sect2>
16732 <title>Migration to Version 7.4.1</title>
16734 <para>
16735 A dump/restore is <emphasis>not</emphasis> required for those
16736 running 7.4.
16737 </para>
16739 <para>
16740 If you want to install the fixes in the information schema
16741 you need to reload it into the database.
16742 This is either accomplished by initializing a new cluster
16743 by running <command>initdb</command>, or by running the following
16744 sequence of SQL commands in each database (ideally including
16745 <literal>template1</literal>) as a superuser in
16746 <application>psql</application>, after installing the new release:
16747 <programlisting>
16748 DROP SCHEMA information_schema CASCADE;
16749 \i /usr/local/pgsql/share/information_schema.sql
16750 </programlisting>
16751 Substitute your installation path in the second command.
16752 </para>
16754 </sect2>
16756 <sect2>
16757 <title>Changes</title>
16759 <itemizedlist>
16760 <listitem><para>Fixed bug in <command>CREATE SCHEMA</command> parsing in ECPG (Michael)</para></listitem>
16761 <listitem><para>Fix compile error when <option>--enable-thread-safety</option> and <option>--with-perl</option> are used together (Peter)</para></listitem>
16762 <listitem><para>Fix for subqueries that used hash joins (Tom)</para>
16763 <para>
16764 Certain subqueries that used hash joins would crash because of
16765 improperly shared structures.
16766 </para></listitem>
16767 <listitem><para>Fix free space map compaction bug (Tom)</para>
16768 <para>
16769 This fixes a bug where compaction of the free space map could lead
16770 to a database server shutdown.
16771 </para>
16772 </listitem>
16773 <listitem><para>Fix for Borland compiler build of libpq (Bruce)</para></listitem>
16774 <listitem><para>Fix <function>netmask()</function> and <function>hostmask()</function> to return the maximum-length masklen (Tom)</para>
16775 <para>
16776 Fix these functions to return values consistent with pre-7.4
16777 releases.
16778 </para>
16779 </listitem>
16780 <listitem><para>Several <filename>contrib/pg_autovacuum</filename> fixes</para>
16781 <para>
16782 Fixes include improper variable initialization, missing vacuum after
16783 <command>TRUNCATE</command>, and duration computation overflow for long vacuums.
16784 </para>
16785 </listitem>
16786 <listitem><para>Allow compile of <filename>contrib/cube</filename> under Cygwin (Jason Tishler)</para></listitem>
16787 <listitem><para>Fix Solaris use of password file when no passwords are defined (Tom)</para>
16788 <para>
16789 Fix crash on Solaris caused by use of any type of password
16790 authentication when no passwords were defined.
16791 </para>
16792 </listitem>
16793 <listitem><para>JDBC fix for thread problems, other fixes</para></listitem>
16794 <listitem><para>Fix for <type>bytea</type> index lookups (Joe)</para></listitem>
16795 <listitem><para>Fix information schema for bit data types (Peter)</para></listitem>
16796 <listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
16797 <listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
16798 <listitem><para>Make <function>PQescapeBytea</function> and <function>byteaout</function> consistent with each other (Joe)</para></listitem>
16799 <listitem><para>Escape <type>bytea</type> output for bytes &gt; 0x7e(Joe)</para>
16800 <para>
16801 If different client encodings are used for <type>bytea</type> output and input, it
16802 is possible for <type>bytea</type> values to be corrupted by the differing
16803 encodings. This fix escapes all bytes that might be affected.
16804 </para>
16805 </listitem>
16806 <listitem><para>Added missing <function>SPI_finish()</function> calls to dblink's <function>get_tuple_of_interest()</function> (Joe)</para></listitem>
16807 <listitem><para>New Czech FAQ</para></listitem>
16808 <listitem><para>Fix information schema view <literal>constraint_column_usage</literal> for foreign keys (Peter)</para></listitem>
16809 <listitem><para>ECPG fixes (Michael)</para></listitem>
16810 <listitem><para>Fix bug with multiple <literal>IN</literal> subqueries and joins in the subqueries (Tom)</para></listitem>
16811 <listitem><para>Allow <literal>COUNT('x')</literal> to work (Tom)</para></listitem>
16812 <listitem><para>Install ECPG include files for Informix compatibility into separate directory (Peter)</para>
16813 <para>
16814 Some names of ECPG include files for Informix compatibility conflicted with operating system include files.
16815 By installing them in their own directory, name conflicts have been reduced.
16816 </para>
16817 </listitem>
16818 <listitem><para>Fix SSL memory leak (Neil)</para>
16819 <para>
16820 This release fixes a bug in 7.4 where SSL didn't free all memory it allocated.
16821 </para>
16822 </listitem>
16823 <listitem><para>Prevent <filename>pg_service.conf</filename> from using service name as default dbname (Bruce)</para></listitem>
16824 <listitem><para>Fix local ident authentication on FreeBSD (Tom)</para></listitem>
16825 </itemizedlist>
16827 </sect2>
16828 </sect1>
16830 <sect1 id="release-7-4">
16831 <title>Release 7.4</title>
16833 <note>
16834 <title>Release date</title>
16835 <simpara>2003-11-17</simpara>
16836 </note>
16838 <sect2>
16839 <title>Overview</title>
16841 <para>
16842 Major changes in this release:
16843 </para>
16845 <variablelist>
16846 <varlistentry>
16847 <term>
16848 <literal>IN</literal> / <literal>NOT IN</literal> subqueries are
16849 now much more efficient
16850 </term>
16852 <listitem>
16853 <para>
16854 In previous releases, <literal>IN</literal>/<literal>NOT
16855 IN</literal> subqueries were joined to the upper query by
16856 sequentially scanning the subquery looking for a match. The
16857 7.4 code uses the same sophisticated techniques used by
16858 ordinary joins and so is much faster. An
16859 <literal>IN</literal> will now usually be as fast as or faster
16860 than an equivalent <literal>EXISTS</literal> subquery; this
16861 reverses the conventional wisdom that applied to previous
16862 releases.
16863 </para>
16864 </listitem>
16865 </varlistentry>
16867 <varlistentry>
16868 <term>
16869 Improved <literal>GROUP BY</literal> processing by using hash buckets
16870 </term>
16872 <listitem>
16873 <para>
16874 In previous releases, rows to be grouped had to be sorted
16875 first. The 7.4 code can do <literal>GROUP BY</literal>
16876 without sorting, by accumulating results into a hash table
16877 with one entry per group. It will still use the sort
16878 technique, however, if the hash table is estimated to be too
16879 large to fit in <varname>sort_mem</>.
16880 </para>
16881 </listitem>
16882 </varlistentry>
16884 <varlistentry>
16885 <term>
16886 New multikey hash join capability
16887 </term>
16889 <listitem>
16890 <para>
16891 In previous releases, hash joins could only occur on single
16892 keys. This release allows multicolumn hash joins.
16893 </para>
16894 </listitem>
16895 </varlistentry>
16897 <varlistentry>
16898 <term>
16899 Queries using the explicit <literal>JOIN</literal> syntax are
16900 now better optimized
16901 </term>
16903 <listitem>
16904 <para>
16905 Prior releases evaluated queries using the explicit
16906 <literal>JOIN</literal> syntax only in the order implied by
16907 the syntax. 7.4 allows full optimization of these queries,
16908 meaning the optimizer considers all possible join orderings
16909 and chooses the most efficient. Outer joins, however, must
16910 still follow the declared ordering.
16911 </para>
16912 </listitem>
16913 </varlistentry>
16915 <varlistentry>
16916 <term>
16917 Faster and more powerful regular expression code
16918 </term>
16920 <listitem>
16921 <para>
16922 The entire regular expression module has been replaced with a
16923 new version by Henry Spencer, originally written for Tcl. The
16924 code greatly improves performance and supports several flavors
16925 of regular expressions.
16926 </para>
16927 </listitem>
16928 </varlistentry>
16930 <varlistentry>
16931 <term>
16932 Function-inlining for simple SQL functions
16933 </term>
16935 <listitem>
16936 <para>
16937 Simple SQL functions can now be inlined by including their SQL
16938 in the main query. This improves performance by eliminating
16939 per-call overhead. That means simple SQL functions now
16940 behave like macros.
16941 </para>
16942 </listitem>
16943 </varlistentry>
16945 <varlistentry>
16946 <term>
16947 Full support for IPv6 connections and IPv6 address data types
16948 </term>
16950 <listitem>
16951 <para>
16952 Previous releases allowed only IPv4 connections, and the IP
16953 data types only supported IPv4 addresses. This release adds
16954 full IPv6 support in both of these areas.
16955 </para>
16956 </listitem>
16957 </varlistentry>
16959 <varlistentry>
16960 <term>
16961 Major improvements in SSL performance and reliability
16962 </term>
16964 <listitem>
16965 <para>
16966 Several people very familiar with the SSL API have overhauled
16967 our SSL code to improve SSL key negotiation and error
16968 recovery.
16969 </para>
16970 </listitem>
16971 </varlistentry>
16973 <varlistentry>
16974 <term>
16975 Make free space map efficiently reuse empty index pages,
16976 and other free space management improvements
16977 </term>
16979 <listitem>
16980 <para>
16981 In previous releases, B-tree index pages that were left empty
16982 because of deleted rows could only be reused by rows with
16983 index values similar to the rows originally indexed on that
16984 page. In 7.4, <command>VACUUM</command> records empty index
16985 pages and allows them to be reused for any future index rows.
16986 </para>
16987 </listitem>
16988 </varlistentry>
16990 <varlistentry>
16991 <term>
16992 SQL-standard information schema
16993 </term>
16995 <listitem>
16996 <para>
16997 The information schema provides a standardized and stable way
16998 to access information about the schema objects defined in a
16999 database.
17000 </para>
17001 </listitem>
17002 </varlistentry>
17004 <varlistentry>
17005 <term>
17006 Cursors conform more closely to the SQL standard
17007 </term>
17009 <listitem>
17010 <para>
17011 The commands <command>FETCH</command> and
17012 <command>MOVE</command> have been overhauled to conform more
17013 closely to the SQL standard.
17014 </para>
17015 </listitem>
17016 </varlistentry>
17018 <varlistentry>
17019 <term>
17020 Cursors can exist outside transactions
17021 </term>
17023 <listitem>
17024 <para>
17025 These cursors are also called holdable cursors.
17026 </para>
17027 </listitem>
17028 </varlistentry>
17030 <varlistentry>
17031 <term>
17032 New client-to-server protocol
17033 </term>
17035 <listitem>
17036 <para>
17037 The new protocol adds error codes, more status information,
17038 faster startup, better support for binary data transmission,
17039 parameter values separated from SQL commands, prepared
17040 statements available at the protocol level, and cleaner
17041 recovery from <command>COPY</command> failures. The older
17042 protocol is still supported by both server and clients.
17043 </para>
17044 </listitem>
17045 </varlistentry>
17047 <varlistentry>
17048 <term>
17049 <application>libpq</application> and
17050 <application>ECPG</application> applications are now fully
17051 thread-safe
17052 </term>
17054 <listitem>
17055 <para>
17056 While previous <application>libpq</application> releases
17057 already supported threads, this release improves thread safety
17058 by fixing some non-thread-safe code that was used during
17059 database connection startup. The <command>configure</command>
17060 option <option>--enable-thread-safety</option> must be used to
17061 enable this feature.
17062 </para>
17063 </listitem>
17064 </varlistentry>
17066 <varlistentry>
17067 <term>
17068 New version of full-text indexing
17069 </term>
17071 <listitem>
17072 <para>
17073 A new full-text indexing suite is available in
17074 <filename>contrib/tsearch2</filename>.
17075 </para>
17076 </listitem>
17077 </varlistentry>
17079 <varlistentry>
17080 <term>
17081 New autovacuum tool
17082 </term>
17084 <listitem>
17085 <para>
17086 The new autovacuum tool in
17087 <filename>contrib/autovacuum</filename> monitors the database
17088 statistics tables for
17089 <command>INSERT</command>/<command>UPDATE</command>/<command>DELETE</command>
17090 activity and automatically vacuums tables when needed.
17091 </para>
17092 </listitem>
17093 </varlistentry>
17095 <varlistentry>
17096 <term>
17097 Array handling has been improved and moved into the server core
17098 </term>
17100 <listitem>
17101 <para>
17102 Many array limitations have been removed, and arrays behave
17103 more like fully-supported data types.
17104 </para>
17105 </listitem>
17106 </varlistentry>
17108 </variablelist>
17109 </sect2>
17111 <sect2>
17112 <title>Migration to Version 7.4</title>
17114 <para>
17115 A dump/restore using <application>pg_dump</application> is
17116 required for those wishing to migrate data from any previous
17117 release.
17118 </para>
17120 <para>
17121 Observe the following incompatibilities:
17122 </para>
17124 <itemizedlist>
17125 <listitem>
17126 <para>
17127 The server-side autocommit setting was removed and
17128 reimplemented in client applications and languages.
17129 Server-side autocommit was causing too many problems with
17130 languages and applications that wanted to control their own
17131 autocommit behavior, so autocommit was removed from the server
17132 and added to individual client APIs as appropriate.
17133 </para>
17134 </listitem>
17136 <listitem>
17137 <para>
17138 Error message wording has changed substantially in this
17139 release. Significant effort was invested to make the messages
17140 more consistent and user-oriented. If your applications try to
17141 detect different error conditions by parsing the error message,
17142 you are strongly encouraged to use the new error code facility instead.
17143 </para>
17144 </listitem>
17146 <listitem>
17147 <para>
17148 Inner joins using the explicit <literal>JOIN</literal> syntax
17149 might behave differently because they are now better
17150 optimized.
17151 </para>
17152 </listitem>
17154 <listitem>
17155 <para>
17156 A number of server configuration parameters have been renamed
17157 for clarity, primarily those related to
17158 logging.
17159 </para>
17160 </listitem>
17162 <listitem>
17163 <para>
17164 <literal>FETCH 0</literal> or <literal>MOVE 0</literal> now
17165 does nothing. In prior releases, <literal>FETCH 0</literal>
17166 would fetch all remaining rows, and <literal>MOVE 0</literal>
17167 would move to the end of the cursor.
17168 </para>
17169 </listitem>
17171 <listitem>
17172 <para>
17173 <command>FETCH</command> and <command>MOVE</command> now return
17174 the actual number of rows fetched/moved, or zero if at the
17175 beginning/end of the cursor. Prior releases would return the
17176 row count passed to the command, not the number of rows
17177 actually fetched or moved.
17178 </para>
17179 </listitem>
17181 <listitem>
17182 <para>
17183 <command>COPY</command> now can process files that use
17184 carriage-return or carriage-return/line-feed end-of-line
17185 sequences. Literal carriage-returns and line-feeds are no
17186 longer accepted in data values; use <literal>\r</literal> and
17187 <literal>\n</literal> instead.
17188 </para>
17189 </listitem>
17191 <listitem>
17192 <para>
17193 Trailing spaces are now trimmed when converting from type
17194 <type>char(<replaceable>n</>)</type> to
17195 <type>varchar(<replaceable>n</>)</type> or <type>text</type>.
17196 This is what most people always expected to happen anyway.
17197 </para>
17198 </listitem>
17200 <listitem>
17201 <para>
17202 The data type <type>float(<replaceable>p</>)</type> now
17203 measures <replaceable>p</> in binary digits, not decimal
17204 digits. The new behavior follows the SQL standard.
17205 </para>
17206 </listitem>
17208 <listitem>
17209 <para>
17210 Ambiguous date values now must match the ordering specified by
17211 the <varname>datestyle</varname> setting. In prior releases, a
17212 date specification of <literal>10/20/03</> was interpreted as a
17213 date in October even if <varname>datestyle</> specified that
17214 the day should be first. 7.4 will throw an error if a date
17215 specification is invalid for the current setting of
17216 <varname>datestyle</>.
17217 </para>
17218 </listitem>
17220 <listitem>
17221 <para>
17222 The functions <function>oidrand</function>,
17223 <function>oidsrand</function>, and
17224 <function>userfntest</function> have been removed. These
17225 functions were determined to be no longer useful.
17226 </para>
17227 </listitem>
17229 <listitem>
17230 <para>
17231 String literals specifying time-varying date/time values, such
17232 as <literal>'now'</literal> or <literal>'today'</literal> will
17233 no longer work as expected in column default expressions; they
17234 now cause the time of the table creation to be the default, not
17235 the time of the insertion. Functions such as
17236 <function>now()</>, <function>current_timestamp</>, or
17237 <function>current_date</function> should be used instead.
17238 </para>
17240 <para>
17241 In previous releases, there was special code so that strings
17242 such as <literal>'now'</literal> were interpreted at
17243 <command>INSERT</> time and not at table creation time, but
17244 this work around didn't cover all cases. Release 7.4 now
17245 requires that defaults be defined properly using functions such
17246 as <function>now()</> or <function>current_timestamp</>. These
17247 will work in all situations.
17248 </para>
17249 </listitem>
17251 <listitem>
17252 <para>
17253 The dollar sign (<literal>$</>) is no longer allowed in
17254 operator names. It can instead be a non-first character in
17255 identifiers. This was done to improve compatibility with other
17256 database systems, and to avoid syntax problems when parameter
17257 placeholders (<literal>$<replaceable>n</></>) are written
17258 adjacent to operators.
17259 </para>
17260 </listitem>
17262 </itemizedlist>
17263 </sect2>
17265 <sect2>
17266 <title>Changes</title>
17268 <para>
17269 Below you will find a detailed account of the changes between
17270 release 7.4 and the previous major release.
17271 </para>
17273 <sect3>
17274 <title>Server Operation Changes</title>
17276 <itemizedlist>
17277 <listitem>
17278 <para>
17279 Allow IPv6 server connections (Nigel Kukard, Johan Jordaan,
17280 Bruce, Tom, Kurt Roeckx, Andrew Dunstan)
17281 </para>
17282 </listitem>
17284 <listitem>
17285 <para>
17286 Fix SSL to handle errors cleanly (Nathan Mueller)
17287 </para>
17288 <para>
17289 In prior releases, certain SSL API error reports were not
17290 handled correctly. This release fixes those problems.
17291 </para>
17292 </listitem>
17294 <listitem>
17295 <para>
17296 SSL protocol security and performance improvements (Sean Chittenden)
17297 </para>
17298 <para>
17299 SSL key renegotiation was happening too frequently, causing poor
17300 SSL performance. Also, initial key handling was improved.
17301 </para>
17302 </listitem>
17304 <listitem>
17305 <para>
17306 Print lock information when a deadlock is detected (Tom)
17307 </para>
17308 <para>
17309 This allows easier debugging of deadlock situations.
17310 </para>
17311 </listitem>
17313 <listitem>
17314 <para>
17315 Update <filename>/tmp</filename> socket modification times
17316 regularly to avoid their removal (Tom)
17317 </para>
17318 <para>
17319 This should help prevent <filename>/tmp</filename> directory
17320 cleaner administration scripts from removing server socket
17321 files.
17322 </para>
17323 </listitem>
17325 <listitem><para>Enable PAM for Mac OS X (Aaron Hillegass)</para></listitem>
17327 <listitem>
17328 <para>Make B-tree indexes fully WAL-safe (Tom)</para>
17329 <para>
17330 In prior releases, under certain rare cases, a server crash
17331 could cause B-tree indexes to become corrupt. This release
17332 removes those last few rare cases.
17333 </para>
17334 </listitem>
17336 <listitem><para>Allow B-tree index compaction and empty page reuse (Tom)</para></listitem>
17338 <listitem>
17339 <para>
17340 Fix inconsistent index lookups during split of first root page (Tom)
17341 </para>
17342 <para>
17343 In prior releases, when a single-page index split into two
17344 pages, there was a brief period when another database session
17345 could miss seeing an index entry. This release fixes that rare
17346 failure case.
17347 </para>
17348 </listitem>
17350 <listitem><para>Improve free space map allocation logic (Tom)</para></listitem>
17352 <listitem>
17353 <para>Preserve free space information between server restarts (Tom)</para>
17354 <para>
17355 In prior releases, the free space map was not saved when the
17356 postmaster was stopped, so newly started servers had no free
17357 space information. This release saves the free space map, and
17358 reloads it when the server is restarted.
17359 </para>
17360 </listitem>
17362 <listitem><para>Add start time to <literal>pg_stat_activity</literal> (Neil)</para></listitem>
17363 <listitem><para>New code to detect corrupt disk pages; erase with <varname>zero_damaged_pages</varname> (Tom)</para></listitem>
17364 <listitem><para>New client/server protocol: faster, no username length limit, allow clean exit from <command>COPY</command> (Tom)</para></listitem>
17365 <listitem><para>Add transaction status, table ID, column ID to client/server protocol (Tom)</para></listitem>
17366 <listitem><para>Add binary I/O to client/server protocol (Tom)</para></listitem>
17367 <listitem><para>Remove autocommit server setting; move to client applications (Tom)</para></listitem>
17368 <listitem><para>New error message wording, error codes, and three levels of error detail (Tom, Joe, Peter)</para></listitem>
17369 </itemizedlist>
17370 </sect3>
17372 <sect3>
17373 <title>Performance Improvements</title>
17375 <itemizedlist>
17376 <listitem><para>Add hashing for <literal>GROUP BY</literal> aggregates (Tom)</para></listitem>
17377 <listitem><para>Make nested-loop joins be smarter about multicolumn indexes (Tom)</para></listitem>
17378 <listitem><para>Allow multikey hash joins (Tom)</para></listitem>
17379 <listitem><para>Improve constant folding (Tom)</para></listitem>
17380 <listitem><para>Add ability to inline simple SQL functions (Tom)</para></listitem>
17382 <listitem>
17383 <para>Reduce memory usage for queries using complex functions (Tom)</para>
17384 <para>
17385 In prior releases, functions returning allocated memory would
17386 not free it until the query completed. This release allows the
17387 freeing of function-allocated memory when the function call
17388 completes, reducing the total memory used by functions.
17389 </para>
17390 </listitem>
17392 <listitem>
17393 <para>Improve GEQO optimizer performance (Tom)</para>
17394 <para>
17395 This release fixes several inefficiencies in the way the GEQO optimizer
17396 manages potential query paths.
17397 </para>
17398 </listitem>
17400 <listitem>
17401 <para>
17402 Allow <literal>IN</>/<literal>NOT IN</> to be handled via hash
17403 tables (Tom)
17404 </para>
17405 </listitem>
17407 <listitem>
17408 <para>
17409 Improve <literal>NOT IN (<replaceable>subquery</>)</literal>
17410 performance (Tom)
17411 </para>
17412 </listitem>
17414 <listitem>
17415 <para>
17416 Allow most <literal>IN</literal> subqueries to be processed as
17417 joins (Tom)
17418 </para>
17419 </listitem>
17421 <listitem>
17422 <para>
17423 Pattern matching operations can use indexes regardless of
17424 locale (Peter)
17425 </para>
17426 <para>
17427 There is no way for non-ASCII locales to use the standard
17428 indexes for <literal>LIKE</literal> comparisons. This release
17429 adds a way to create a special index for
17430 <literal>LIKE</literal>.
17431 </para>
17432 </listitem>
17434 <listitem>
17435 <para>Allow the postmaster to preload libraries using <varname>preload_libraries</varname> (Joe)</para>
17436 <para>
17437 For shared libraries that require a long time to load, this
17438 option is available so the library can be preloaded in the
17439 postmaster and inherited by all database sessions.
17440 </para>
17441 </listitem>
17443 <listitem>
17444 <para>
17445 Improve optimizer cost computations, particularly for subqueries (Tom)
17446 </para>
17447 </listitem>
17449 <listitem>
17450 <para>
17451 Avoid sort when subquery <literal>ORDER BY</literal> matches upper query (Tom)
17452 </para>
17453 </listitem>
17455 <listitem>
17456 <para>
17457 Deduce that <literal>WHERE a.x = b.y AND b.y = 42</literal> also
17458 means <literal>a.x = 42</literal> (Tom)
17459 </para>
17460 </listitem>
17462 <listitem>
17463 <para>
17464 Allow hash/merge joins on complex joins (Tom)
17465 </para>
17466 </listitem>
17468 <listitem>
17469 <para>
17470 Allow hash joins for more data types (Tom)
17471 </para>
17472 </listitem>
17474 <listitem>
17475 <para>
17476 Allow join optimization of explicit inner joins, disable with
17477 <varname>join_collapse_limit</varname> (Tom)
17478 </para>
17479 </listitem>
17481 <listitem>
17482 <para>
17483 Add parameter <varname>from_collapse_limit</varname> to control
17484 conversion of subqueries to joins (Tom)
17485 </para>
17486 </listitem>
17488 <listitem>
17489 <para>
17490 Use faster and more powerful regular expression code from Tcl
17491 (Henry Spencer, Tom)
17492 </para>
17493 </listitem>
17495 <listitem>
17496 <para>
17497 Use bit-mapped relation sets in the optimizer (Tom)
17498 </para>
17499 </listitem>
17501 <listitem>
17502 <para>Improve connection startup time (Tom)</para>
17503 <para>
17504 The new client/server protocol requires fewer network packets to
17505 start a database session.
17506 </para>
17507 </listitem>
17509 <listitem>
17510 <para>
17511 Improve trigger/constraint performance (Stephan)
17512 </para>
17513 </listitem>
17515 <listitem>
17516 <para>
17517 Improve speed of <literal>col IN (const, const, const, ...)</literal> (Tom)
17518 </para>
17519 </listitem>
17521 <listitem>
17522 <para>
17523 Fix hash indexes which were broken in rare cases (Tom)
17524 </para>
17525 </listitem>
17527 <listitem><para>Improve hash index concurrency and speed (Tom)</para>
17528 <para>
17529 Prior releases suffered from poor hash index performance,
17530 particularly for high concurrency situations. This release fixes
17531 that, and the development group is interested in reports
17532 comparing B-tree and hash index performance.
17533 </para>
17534 </listitem>
17536 <listitem>
17537 <para>Align shared buffers on 32-byte boundary for copy speed improvement (Manfred Spraul)</para>
17538 <para>
17539 Certain CPU's perform faster data copies when addresses are
17540 32-byte aligned.
17541 </para>
17542 </listitem>
17544 <listitem>
17545 <para>Data type <type>numeric</type> reimplemented for better performance (Tom)</para>
17546 <para>
17547 <type>numeric</type> used to be stored in base 100. The new code
17548 uses base 10000, for significantly better performance.
17549 </para>
17550 </listitem>
17551 </itemizedlist>
17552 </sect3>
17554 <sect3>
17555 <title>Server Configuration Changes</title>
17557 <itemizedlist>
17558 <listitem>
17559 <para>Rename server parameter <varname>server_min_messages</> to <varname>log_min_messages</> (Bruce)</para>
17560 <para>
17561 This was done so most parameters that control the server logs
17562 begin with <literal>log_</>.
17563 </para>
17564 </listitem>
17566 <listitem><para>Rename <varname>show_*_stats</> to <varname>log_*_stats</> (Bruce)</para></listitem>
17567 <listitem><para>Rename <varname>show_source_port</> to <varname>log_source_port</> (Bruce)</para></listitem>
17568 <listitem><para>Rename <varname>hostname_lookup</> to <varname>log_hostname</> (Bruce)</para></listitem>
17570 <listitem>
17571 <para>Add <varname>checkpoint_warning</> to warn of excessive checkpointing (Bruce)</para>
17572 <para>
17573 In prior releases, it was difficult to determine if checkpoint
17574 was happening too frequently. This feature adds a warning to the
17575 server logs when excessive checkpointing happens.
17576 </para>
17577 </listitem>
17579 <listitem><para>New read-only server parameters for localization (Tom)</para></listitem>
17581 <listitem>
17582 <para>
17583 Change debug server log messages to output as <literal>DEBUG</>
17584 rather than <literal>LOG</> (Bruce)
17585 </para>
17586 </listitem>
17588 <listitem>
17589 <para>Prevent server log variables from being turned off by non-superusers (Bruce)</para>
17590 <para>
17591 This is a security feature so non-superusers cannot disable
17592 logging that was enabled by the administrator.
17593 </para>
17594 </listitem>
17596 <listitem>
17597 <para>
17598 <varname>log_min_messages</>/<varname>client_min_messages</> now
17599 controls <varname>debug_*</> output (Bruce)
17600 </para>
17601 <para>
17602 This centralizes client debug information so all debug output
17603 can be sent to either the client or server logs.
17604 </para>
17605 </listitem>
17607 <listitem>
17608 <para>Add Mac OS X Rendezvous server support (Chris Campbell)</para>
17609 <para>
17610 This allows Mac OS X hosts to query the network for available
17611 <productname>PostgreSQL</productname> servers.
17612 </para>
17613 </listitem>
17615 <listitem>
17616 <para>
17617 Add ability to print only slow statements using
17618 <varname>log_min_duration_statement</varname>
17619 (Christopher)
17620 </para>
17621 <para>
17622 This is an often requested debugging feature that allows
17623 administrators to see only slow queries in their server logs.
17624 </para>
17625 </listitem>
17627 <listitem>
17628 <para>Allow <filename>pg_hba.conf</filename> to accept netmasks in CIDR format (Andrew Dunstan)</para>
17629 <para>
17630 This allows administrators to merge the host IP address and
17631 netmask fields into a single CIDR field in <filename>pg_hba.conf</filename>.
17632 </para>
17633 </listitem>
17635 <listitem><para>New read-only parameter <varname>is_superuser</varname> (Tom)</para></listitem>
17637 <listitem>
17638 <para>New parameter <varname>log_error_verbosity</varname> to control error detail (Tom)</para>
17639 <para>
17640 This works with the new error reporting feature to supply
17641 additional error information like hints, file names and line
17642 numbers.
17643 </para>
17644 </listitem>
17646 <listitem>
17647 <para><literal>postgres --describe-config</literal> now dumps server config variables (Aizaz Ahmed, Peter)</para>
17648 <para>
17649 This option is useful for administration tools that need to know
17650 the configuration variable names and their minimums, maximums,
17651 defaults, and descriptions.
17652 </para>
17653 </listitem>
17655 <listitem>
17656 <para>
17657 Add new columns in <literal>pg_settings</literal>:
17658 <literal>context</>, <literal>type</>, <literal>source</>,
17659 <literal>min_val</>, <literal>max_val</> (Joe)
17660 </para>
17661 </listitem>
17663 <listitem>
17664 <para>
17665 Make default <varname>shared_buffers</> 1000 and
17666 <varname>max_connections</> 100, if possible (Tom)
17667 </para>
17668 <para>
17669 Prior versions defaulted to 64 shared buffers so <productname>PostgreSQL</productname>
17670 would start on even very old systems. This release tests the
17671 amount of shared memory allowed by the platform and selects more
17672 reasonable default values if possible. Of course, users are
17673 still encouraged to evaluate their resource load and size
17674 <varname>shared_buffers</varname> accordingly.
17675 </para>
17676 </listitem>
17678 <listitem>
17679 <para>
17680 New <filename>pg_hba.conf</filename> record type
17681 <literal>hostnossl</> to prevent SSL connections (Jon
17682 Jensen)
17683 </para>
17684 <para>
17685 In prior releases, there was no way to prevent SSL connections
17686 if both the client and server supported SSL. This option allows
17687 that capability.
17688 </para>
17689 </listitem>
17691 <listitem>
17692 <para>
17693 Remove parameter <varname>geqo_random_seed</varname>
17694 (Tom)
17695 </para>
17696 </listitem>
17698 <listitem>
17699 <para>
17700 Add server parameter <varname>regex_flavor</varname> to control regular expression processing (Tom)
17701 </para>
17702 </listitem>
17704 <listitem>
17705 <para>
17706 Make <command>pg_ctl</command> better handle nonstandard ports (Greg)
17707 </para>
17708 </listitem>
17709 </itemizedlist>
17710 </sect3>
17712 <sect3>
17713 <title>Query Changes</title>
17715 <itemizedlist>
17716 <listitem><para>New SQL-standard information schema (Peter)</para></listitem>
17717 <listitem><para>Add read-only transactions (Peter)</para></listitem>
17718 <listitem><para>Print key name and value in foreign-key violation messages (Dmitry Tkach)</para></listitem>
17720 <listitem>
17721 <para>Allow users to see their own queries in <literal>pg_stat_activity</literal> (Kevin Brown)</para>
17722 <para>
17723 In prior releases, only the superuser could see query strings
17724 using <literal>pg_stat_activity</literal>. Now ordinary users
17725 can see their own query strings.
17726 </para>
17727 </listitem>
17729 <listitem>
17730 <para>Fix aggregates in subqueries to match SQL standard (Tom)</para>
17731 <para>
17732 The SQL standard says that an aggregate function appearing
17733 within a nested subquery belongs to the outer query if its
17734 argument contains only outer-query variables. Prior
17735 <productname>PostgreSQL</productname> releases did not handle
17736 this fine point correctly.
17737 </para>
17738 </listitem>
17740 <listitem>
17741 <para>Add option to prevent auto-addition of tables referenced in query (Nigel J. Andrews)</para>
17742 <para>
17743 By default, tables mentioned in the query are automatically
17744 added to the <literal>FROM</> clause if they are not already
17745 there. This is compatible with historic
17746 <productname>POSTGRES</productname> behavior but is contrary to
17747 the SQL standard. This option allows selecting
17748 standard-compatible behavior.
17749 </para>
17750 </listitem>
17752 <listitem>
17753 <para>Allow <literal>UPDATE ... SET col = DEFAULT</literal> (Rod)</para>
17754 <para>
17755 This allows <command>UPDATE</command> to set a column to its
17756 declared default value.
17757 </para>
17758 </listitem>
17760 <listitem>
17761 <para>Allow expressions to be used in <literal>LIMIT</>/<literal>OFFSET</> (Tom)</para>
17762 <para>
17763 In prior releases, <literal>LIMIT</>/<literal>OFFSET</> could
17764 only use constants, not expressions.
17765 </para>
17766 </listitem>
17768 <listitem>
17769 <para>Implement <literal>CREATE TABLE AS EXECUTE</literal> (Neil, Peter)</para>
17770 </listitem>
17771 </itemizedlist>
17772 </sect3>
17774 <sect3>
17775 <title>Object Manipulation Changes</title>
17777 <itemizedlist>
17778 <listitem>
17779 <para>Make <command>CREATE SEQUENCE</command> grammar more conforming to SQL:2003 (Neil)</para>
17780 </listitem>
17782 <listitem>
17783 <para>Add statement-level triggers (Neil)</para>
17784 <para>
17785 While this allows a trigger to fire at the end of a statement,
17786 it does not allow the trigger to access all rows modified by the
17787 statement. This capability is planned for a future release.
17788 </para>
17789 </listitem>
17791 <listitem>
17792 <para>Add check constraints for domains (Rod)</para>
17793 <para>
17794 This greatly increases the usefulness of domains by allowing
17795 them to use check constraints.
17796 </para>
17797 </listitem>
17799 <listitem>
17800 <para>Add <command>ALTER DOMAIN</command> (Rod)</para>
17801 <para>
17802 This allows manipulation of existing domains.
17803 </para>
17804 </listitem>
17806 <listitem>
17807 <para>Fix several zero-column table bugs (Tom)</para>
17808 <para>
17809 <productname>PostgreSQL</productname> supports zero-column tables. This fixes various bugs
17810 that occur when using such tables.
17811 </para>
17812 </listitem>
17814 <listitem>
17815 <para>Have <literal>ALTER TABLE ... ADD PRIMARY KEY</literal> add not-null constraint (Rod)</para>
17816 <para>
17817 In prior releases, <literal>ALTER TABLE ... ADD
17818 PRIMARY</literal> would add a unique index, but not a not-null
17819 constraint. That is fixed in this release.
17820 </para>
17821 </listitem>
17823 <listitem><para>Add <literal>ALTER TABLE ... WITHOUT OIDS</literal> (Rod)</para>
17824 <para>
17825 This allows control over whether new and updated rows will have
17826 an OID column. This is most useful for saving storage space.
17827 </para>
17828 </listitem>
17830 <listitem>
17831 <para>
17832 Add <literal>ALTER SEQUENCE</literal> to modify minimum, maximum,
17833 increment, cache, cycle values (Rod)
17834 </para>
17835 </listitem>
17837 <listitem>
17838 <para>Add <literal>ALTER TABLE ... CLUSTER ON</literal> (Alvaro Herrera)</para>
17839 <para>
17840 This command is used by <command>pg_dump</command> to record the
17841 cluster column for each table previously clustered. This
17842 information is used by database-wide cluster to cluster all
17843 previously clustered tables.
17844 </para>
17845 </listitem>
17847 <listitem><para>Improve automatic type casting for domains (Rod, Tom)</para></listitem>
17848 <listitem><para>Allow dollar signs in identifiers, except as first character (Tom)</para></listitem>
17849 <listitem><para>Disallow dollar signs in operator names, so <literal>x=$1</> works (Tom)</para></listitem>
17851 <listitem>
17852 <para>
17853 Allow copying table schema using <literal>LIKE
17854 <replaceable>subtable</replaceable></literal>, also SQL:2003
17855 feature <literal>INCLUDING DEFAULTS</literal> (Rod)
17856 </para>
17857 </listitem>
17859 <listitem>
17860 <para>
17861 Add <literal>WITH GRANT OPTION</literal> clause to
17862 <command>GRANT</command> (Peter)
17863 </para>
17864 <para>
17865 This enabled <command>GRANT</command> to give other users the
17866 ability to grant privileges on a object.
17867 </para>
17868 </listitem>
17869 </itemizedlist>
17870 </sect3>
17872 <sect3>
17873 <title>Utility Command Changes</title>
17875 <itemizedlist>
17876 <listitem>
17877 <para>Add <literal>ON COMMIT</literal> clause to <command>CREATE TABLE</command> for temporary tables (Gavin)</para>
17878 <para>
17879 This adds the ability for a table to be dropped or all rows
17880 deleted on transaction commit.
17881 </para>
17882 </listitem>
17884 <listitem>
17885 <para>Allow cursors outside transactions using <literal>WITH HOLD</literal> (Neil)</para>
17886 <para>
17887 In previous releases, cursors were removed at the end of the
17888 transaction that created them. Cursors can now be created with
17889 the <literal>WITH HOLD</literal> option, which allows them to
17890 continue to be accessed after the creating transaction has
17891 committed.
17892 </para>
17893 </listitem>
17895 <listitem>
17896 <para><literal>FETCH 0</literal> and <literal>MOVE 0 </literal> now do nothing (Bruce)</para>
17897 <para>
17898 In previous releases, <literal>FETCH 0</literal> fetched all
17899 remaining rows, and <literal>MOVE 0</literal> moved to the end
17900 of the cursor.
17901 </para>
17902 </listitem>
17904 <listitem>
17905 <para>
17906 Cause <command>FETCH</command> and <command>MOVE</command> to
17907 return the number of rows fetched/moved, or zero if at the
17908 beginning/end of cursor, per SQL standard (Bruce)
17909 </para>
17910 <para>
17911 In prior releases, the row count returned by
17912 <command>FETCH</command> and <command>MOVE</command> did not
17913 accurately reflect the number of rows processed.
17914 </para>
17915 </listitem>
17917 <listitem>
17918 <para>Properly handle <literal>SCROLL</literal> with cursors, or
17919 report an error (Neil)</para>
17920 <para>
17921 Allowing random access (both forward and backward scrolling) to
17922 some kinds of queries cannot be done without some additional
17923 work. If <literal>SCROLL</literal> is specified when the cursor
17924 is created, this additional work will be performed. Furthermore,
17925 if the cursor has been created with <literal>NO SCROLL</literal>,
17926 no random access is allowed.
17927 </para>
17928 </listitem>
17930 <listitem>
17931 <para>
17932 Implement SQL-compatible options <literal>FIRST</>,
17933 <literal>LAST</>, <literal>ABSOLUTE <replaceable>n</></>,
17934 <literal>RELATIVE <replaceable>n</></> for
17935 <command>FETCH</command> and <command>MOVE</command> (Tom)
17936 </para>
17937 </listitem>
17939 <listitem>
17940 <para>Allow <command>EXPLAIN</command> on <command>DECLARE CURSOR</command> (Tom)</para>
17941 </listitem>
17943 <listitem>
17944 <para>Allow <command>CLUSTER</command> to use index marked as pre-clustered by default (Alvaro Herrera)</para>
17945 </listitem>
17947 <listitem>
17948 <para>Allow <command>CLUSTER</command> to cluster all tables (Alvaro Herrera)</para>
17949 <para>
17950 This allows all previously clustered tables in a database to be
17951 reclustered with a single command.
17952 </para>
17953 </listitem>
17955 <listitem><para>Prevent <command>CLUSTER</command> on partial indexes (Tom)</para></listitem>
17957 <listitem><para>Allow DOS and Mac line-endings in <command>COPY</> files (Bruce)</para></listitem>
17959 <listitem>
17960 <para>
17961 Disallow literal carriage return as a data value,
17962 backslash-carriage-return and <literal>\r</> are still allowed
17963 (Bruce)
17964 </para>
17965 </listitem>
17967 <listitem>
17968 <para><command>COPY</> changes (binary, <literal>\.</>) (Tom)</para>
17969 </listitem>
17971 <listitem>
17972 <para>Recover from <command>COPY</command> failure cleanly (Tom)</para>
17973 </listitem>
17975 <listitem>
17976 <para>Prevent possible memory leaks in <command>COPY</command> (Tom)</para>
17977 </listitem>
17979 <listitem>
17980 <para>Make <command>TRUNCATE</command> transaction-safe (Rod)</para>
17981 <para>
17982 <command>TRUNCATE</command> can now be used inside a
17983 transaction. If the transaction aborts, the changes made by the
17984 <command>TRUNCATE</command> are automatically rolled back.
17985 </para>
17986 </listitem>
17988 <listitem>
17989 <para>
17990 Allow prepare/bind of utility commands like
17991 <command>FETCH</command> and <command>EXPLAIN</command> (Tom)
17992 </para>
17993 </listitem>
17995 <listitem>
17996 <para>Add <command>EXPLAIN EXECUTE</command> (Neil)</para>
17997 </listitem>
17999 <listitem>
18000 <para>Improve <command>VACUUM</command> performance on indexes by reducing WAL traffic (Tom)</para>
18001 </listitem>
18003 <listitem>
18004 <para>Functional indexes have been generalized into indexes on expressions (Tom)</para>
18005 <para>
18006 In prior releases, functional indexes only supported a simple
18007 function applied to one or more column names. This release
18008 allows any type of scalar expression.
18009 </para>
18010 </listitem>
18012 <listitem>
18013 <para>
18014 Have <command>SHOW TRANSACTION ISOLATION</command> match input
18015 to <command>SET TRANSACTION ISOLATION</command>
18016 (Tom)
18017 </para>
18018 </listitem>
18020 <listitem>
18021 <para>
18022 Have <command>COMMENT ON DATABASE</command> on nonlocal
18023 database generate a warning, rather than an error (Rod)
18024 </para>
18026 <para>
18027 Database comments are stored in database-local tables so
18028 comments on a database have to be stored in each database.
18029 </para>
18030 </listitem>
18032 <listitem>
18033 <para>
18034 Improve reliability of <command>LISTEN</>/<command>NOTIFY</> (Tom)
18035 </para>
18036 </listitem>
18038 <listitem>
18039 <para>Allow <command>REINDEX</command> to reliably reindex nonshared system catalog indexes (Tom)</para>
18040 <para>
18041 This allows system tables to be reindexed without the
18042 requirement of a standalone session, which was necessary in
18043 previous releases. The only tables that now require a standalone
18044 session for reindexing are the global system tables
18045 <literal>pg_database</>, <literal>pg_shadow</>, and
18046 <literal>pg_group</>.
18047 </para>
18048 </listitem>
18049 </itemizedlist>
18050 </sect3>
18052 <sect3>
18053 <title>Data Type and Function Changes</title>
18055 <itemizedlist>
18056 <listitem>
18057 <para>
18058 New server parameter <varname>extra_float_digits</varname> to
18059 control precision display of floating-point numbers (Pedro
18060 Ferreira, Tom)
18061 </para>
18062 <para>
18063 This controls output precision which was causing regression
18064 testing problems.
18065 </para>
18066 </listitem>
18068 <listitem><para>Allow <literal>+1300</literal> as a numeric time-zone specifier, for FJST (Tom)</para></listitem>
18070 <listitem>
18071 <para>
18072 Remove rarely used functions <function>oidrand</>,
18073 <function>oidsrand</>, and <function>userfntest</> functions
18074 (Neil)
18075 </para>
18076 </listitem>
18078 <listitem>
18079 <para>Add <function>md5()</> function to main server, already in <filename>contrib/pgcrypto</filename> (Joe)</para>
18080 <para>
18081 An MD5 function was frequently requested. For more complex
18082 encryption capabilities, use
18083 <filename>contrib/pgcrypto</filename>.
18084 </para>
18085 </listitem>
18087 <listitem><para>Increase date range of <type>timestamp</type> (John Cochran)</para></listitem>
18089 <listitem>
18090 <para>
18091 Change <literal>EXTRACT(EPOCH FROM timestamp)</literal> so
18092 <type>timestamp without time zone</type> is assumed to be in
18093 local time, not GMT (Tom)
18094 </para>
18095 </listitem>
18097 <listitem><para>Trap division by zero in case the operating system doesn't prevent it (Tom)</para></listitem>
18098 <listitem><para>Change the <type>numeric</type> data type internally to base 10000 (Tom)</para></listitem>
18099 <listitem><para>New <function>hostmask()</function> function (Greg Wickham)</para></listitem>
18100 <listitem><para>Fixes for <function>to_char()</function> and <function>to_timestamp()</function> (Karel)</para></listitem>
18102 <listitem>
18103 <para>
18104 Allow functions that can take any argument data type and return
18105 any data type, using <type>anyelement</type> and
18106 <type>anyarray</type> (Joe)
18107 </para>
18108 <para>
18109 This allows the creation of functions that can work with any
18110 data type.
18111 </para>
18112 </listitem>
18114 <listitem>
18115 <para>
18116 Arrays can now be specified as <literal>ARRAY[1,2,3]</literal>,
18117 <literal>ARRAY[['a','b'],['c','d']]</literal>, or
18118 <literal>ARRAY[ARRAY[ARRAY[2]]]</literal> (Joe)
18119 </para>
18120 </listitem>
18122 <listitem>
18123 <para>
18124 Allow proper comparisons for arrays, including <literal>ORDER
18125 BY</literal> and <literal>DISTINCT</literal> support
18126 (Joe)
18127 </para>
18128 </listitem>
18130 <listitem><para>Allow indexes on array columns (Joe)</para></listitem>
18131 <listitem><para>Allow array concatenation with <literal>||</literal> (Joe)</para></listitem>
18133 <listitem>
18134 <para>
18135 Allow <literal>WHERE</literal> qualification
18136 <literal><replaceable>expr</> <replaceable>op</> ANY/SOME/ALL
18137 (<replaceable>array_expr</>)</literal> (Joe)
18138 </para>
18139 <para>
18140 This allows arrays to behave like a list of values, for purposes
18141 like <literal>SELECT * FROM tab WHERE col IN
18142 (array_val)</literal>.
18143 </para>
18144 </listitem>
18146 <listitem>
18147 <para>
18148 New array functions <function>array_append</>,
18149 <function>array_cat</>, <function>array_lower</>,
18150 <function>array_prepend</>, <function>array_to_string</>,
18151 <function>array_upper</>, <function>string_to_array</> (Joe)
18152 </para>
18153 </listitem>
18155 <listitem><para>Allow user defined aggregates to use polymorphic functions (Joe)</para></listitem>
18156 <listitem><para>Allow assignments to empty arrays (Joe)</para></listitem>
18158 <listitem>
18159 <para>
18160 Allow 60 in seconds fields of <type>time</type>,
18161 <type>timestamp</type>, and <type>interval</type> input values
18162 (Tom)
18163 </para>
18164 <para>
18165 Sixty-second values are needed for leap seconds.
18166 </para>
18167 </listitem>
18169 <listitem><para>Allow <type>cidr</type> data type to be cast to <type>text</type> (Tom)</para></listitem>
18171 <listitem><para>Disallow invalid time zone names in SET TIMEZONE</para></listitem>
18173 <listitem>
18174 <para>
18175 Trim trailing spaces when <type>char</type> is cast to
18176 <type>varchar</> or <type>text</> (Tom)
18177 </para>
18178 </listitem>
18180 <listitem>
18181 <para>
18182 Make <type>float(<replaceable>p</>)</> measure the precision
18183 <replaceable>p</> in binary digits, not decimal digits
18184 (Tom)
18185 </para>
18186 </listitem>
18188 <listitem>
18189 <para>Add IPv6 support to the <type>inet</type> and <type>cidr</type> data types (Michael Graff)</para>
18190 </listitem>
18192 <listitem>
18193 <para>Add <function>family()</function> function to report whether address is IPv4 or IPv6 (Michael Graff)</para>
18194 </listitem>
18196 <listitem>
18197 <para>
18198 Have <literal>SHOW datestyle</literal> generate output similar
18199 to that used by <literal>SET datestyle</literal> (Tom)
18200 </para>
18201 </listitem>
18203 <listitem>
18204 <para>
18205 Make <literal>EXTRACT(TIMEZONE)</literal> and <literal>SET/SHOW
18206 TIME ZONE</literal> follow the SQL convention for the sign of
18207 time zone offsets, i.e., positive is east from UTC (Tom)
18208 </para>
18209 </listitem>
18211 <listitem>
18212 <para>Fix <literal>date_trunc('quarter', ...)</literal> (Böjthe Zoltán)</para>
18213 <para>
18214 Prior releases returned an incorrect value for this function call.
18215 </para>
18216 </listitem>
18218 <listitem>
18219 <para>Make <function>initcap()</function> more compatible with Oracle (Mike Nolan)</para>
18220 <para>
18221 <function>initcap()</function> now uppercases a letter appearing
18222 after any non-alphanumeric character, rather than only after
18223 whitespace.
18224 </para>
18225 </listitem>
18227 <listitem>
18228 <para>Allow only <varname>datestyle</varname> field order for date values not in ISO-8601 format (Greg)</para>
18229 </listitem>
18231 <listitem>
18232 <para>
18233 Add new <varname>datestyle</varname> values <literal>MDY</>,
18234 <literal>DMY</>, and <literal>YMD</> to set input field order;
18235 honor <literal>US</> and <literal>European</> for backward
18236 compatibility (Tom)
18237 </para>
18238 </listitem>
18240 <listitem>
18241 <para>
18242 String literals like <literal>'now'</literal> or
18243 <literal>'today'</literal> will no longer work as a column
18244 default. Use functions such as <function>now()</function>,
18245 <function>current_timestamp</function> instead. (change
18246 required for prepared statements) (Tom)
18247 </para>
18248 </listitem>
18250 <listitem>
18251 <para>Treat NaN as larger than any other value in <function>min()</>/<function>max()</> (Tom)</para>
18252 <para>
18253 NaN was already sorted after ordinary numeric values for most
18254 purposes, but <function>min()</> and <function>max()</> didn't
18255 get this right.
18256 </para>
18257 </listitem>
18259 <listitem>
18260 <para>Prevent interval from suppressing <literal>:00</literal>
18261 seconds display</para>
18262 </listitem>
18264 <listitem>
18265 <para>
18266 New functions <function>pg_get_triggerdef(prettyprint)</function>
18267 and <function>pg_conversion_is_visible()</function> (Christopher)
18268 </para>
18269 </listitem>
18271 <listitem>
18272 <para>Allow time to be specified as <literal>040506</> or <literal>0405</> (Tom)</para>
18273 </listitem>
18275 <listitem>
18276 <para>
18277 Input date order must now be <literal>YYYY-MM-DD</literal> (with 4-digit year) or
18278 match <varname>datestyle</varname>
18279 </para>
18280 </listitem>
18282 <listitem>
18283 <para>
18284 Make <function>pg_get_constraintdef</function> support
18285 unique, primary-key, and check constraints (Christopher)
18286 </para>
18287 </listitem>
18288 </itemizedlist>
18289 </sect3>
18291 <sect3>
18292 <title>Server-Side Language Changes</title>
18294 <itemizedlist>
18295 <listitem>
18296 <para>
18297 Prevent PL/pgSQL crash when <literal>RETURN NEXT</literal> is
18298 used on a zero-row record variable (Tom)
18299 </para>
18300 </listitem>
18302 <listitem>
18303 <para>
18304 Make PL/Python's <function>spi_execute</function> interface
18305 handle null values properly (Andrew Bosma)
18306 </para>
18307 </listitem>
18309 <listitem>
18310 <para>Allow PL/pgSQL to declare variables of composite types without <literal>%ROWTYPE</literal> (Tom)</para>
18311 </listitem>
18313 <listitem>
18314 <para>Fix PL/Python's <function>_quote()</function> function to handle big integers</para>
18315 </listitem>
18317 <listitem>
18318 <para>Make PL/Python an untrusted language, now called <literal>plpythonu</literal> (Kevin Jacobs, Tom)</para>
18319 <para>
18320 The Python language no longer supports a restricted execution
18321 environment, so the trusted version of PL/Python was removed. If
18322 this situation changes, a version of PL/Python that can be used
18323 by non-superusers will be readded.
18324 </para>
18325 </listitem>
18327 <listitem>
18328 <para>Allow polymorphic PL/pgSQL functions (Joe, Tom)</para>
18329 </listitem>
18331 <listitem>
18332 <para>Allow polymorphic SQL functions (Joe)</para>
18333 </listitem>
18335 <listitem>
18336 <para>
18337 Improved compiled function caching mechanism in PL/pgSQL with
18338 full support for polymorphism (Joe)
18339 </para>
18340 </listitem>
18342 <listitem>
18343 <para>
18344 Add new parameter <literal>$0</> in PL/pgSQL representing the
18345 function's actual return type (Joe)
18346 </para>
18347 </listitem>
18349 <listitem>
18350 <para>
18351 Allow PL/Tcl and PL/Python to use the same trigger on multiple tables (Tom)
18352 </para>
18353 </listitem>
18355 <listitem>
18356 <para>
18357 Fixed PL/Tcl's <function>spi_prepare</function> to accept fully
18358 qualified type names in the parameter type list
18359 (Jan)
18360 </para>
18361 </listitem>
18362 </itemizedlist>
18363 </sect3>
18365 <sect3>
18366 <title>psql Changes</title>
18368 <itemizedlist>
18369 <listitem>
18370 <para>Add <literal>\pset pager always</literal> to always use pager (Greg)</para>
18371 <para>
18372 This forces the pager to be used even if the number of rows is
18373 less than the screen height. This is valuable for rows that
18374 wrap across several screen rows.
18375 </para>
18376 </listitem>
18378 <listitem><para>Improve tab completion (Rod, Ross Reedstrom, Ian Barwick)</para></listitem>
18379 <listitem><para>Reorder <literal>\?</> help into groupings (Harald Armin Massa, Bruce)</para></listitem>
18380 <listitem><para>Add backslash commands for listing schemas, casts, and conversions (Christopher)</para></listitem>
18382 <listitem>
18383 <para>
18384 <command>\encoding</> now changes based on the server parameter
18385 <varname>client_encoding</varname> (Tom)
18386 </para>
18387 <para>
18388 In previous versions, <command>\encoding</command> was not aware
18389 of encoding changes made using <literal>SET
18390 client_encoding</literal>.
18391 </para>
18392 </listitem>
18394 <listitem>
18395 <para>Save editor buffer into readline history (Ross)</para>
18396 <para>
18397 When <command>\e</> is used to edit a query, the result is saved
18398 in the readline history for retrieval using the up arrow.
18399 </para>
18400 </listitem>
18402 <listitem><para>Improve <command>\d</command> display (Christopher)</para></listitem>
18403 <listitem><para>Enhance HTML mode to be more standards-conforming (Greg)</para></listitem>
18405 <listitem>
18406 <para>New <command>\set AUTOCOMMIT off</command> capability (Tom)</para>
18407 <para>
18408 This takes the place of the removed server parameter <varname>autocommit</varname>.
18409 </para>
18410 </listitem>
18412 <listitem>
18413 <para>New <command>\set VERBOSITY</command> to control error detail (Tom)</para>
18414 <para>
18415 This controls the new error reporting details.
18416 </para>
18417 </listitem>
18419 <listitem><para>New prompt escape sequence <literal>%x</literal> to show transaction status (Tom)</para></listitem>
18420 <listitem><para>Long options for <application>psql</application> are now available on all platforms</para></listitem>
18421 </itemizedlist>
18422 </sect3>
18424 <sect3>
18425 <title>pg_dump Changes</title>
18427 <itemizedlist>
18428 <listitem><para>Multiple pg_dump fixes, including tar format and large objects</para></listitem>
18429 <listitem><para>Allow pg_dump to dump specific schemas (Neil)</para></listitem>
18431 <listitem>
18432 <para>Make pg_dump preserve column storage characteristics (Christopher)</para>
18433 <para>
18434 This preserves <literal>ALTER TABLE ... SET STORAGE</literal> information.
18435 </para>
18436 </listitem>
18438 <listitem><para>Make pg_dump preserve <command>CLUSTER</command> characteristics (Christopher)</para></listitem>
18440 <listitem>
18441 <para>
18442 Have pg_dumpall use <command>GRANT</>/<command>REVOKE</> to dump database-level privileges (Tom)
18443 </para>
18444 </listitem>
18446 <listitem>
18447 <para>
18448 Allow pg_dumpall to support the options <option>-a</>,
18449 <option>-s</>, <option>-x</> of pg_dump (Tom)
18450 </para>
18451 </listitem>
18453 <listitem><para>Prevent pg_dump from lowercasing identifiers specified on the command line (Tom)</para></listitem>
18455 <listitem>
18456 <para>
18457 pg_dump options <option>--use-set-session-authorization</option>
18458 and <option>--no-reconnect</option> now do nothing, all dumps
18459 use <command>SET SESSION AUTHORIZATION</command>
18460 </para>
18461 <para>
18462 pg_dump no longer reconnects to switch users, but instead always
18463 uses <command>SET SESSION AUTHORIZATION</command>. This will
18464 reduce password prompting during restores.
18465 </para>
18466 </listitem>
18468 <listitem>
18469 <para>Long options for <application>pg_dump</application> are now available on all platforms</para>
18470 <para>
18471 <productname>PostgreSQL</productname> now includes its own
18472 long-option processing routines.
18473 </para>
18474 </listitem>
18475 </itemizedlist>
18476 </sect3>
18478 <sect3>
18479 <title>libpq Changes</title>
18481 <itemizedlist>
18482 <listitem>
18483 <para>
18484 Add function <function>PQfreemem</function> for freeing memory on
18485 Windows, suggested for <command>NOTIFY</command> (Bruce)
18486 </para>
18487 <para>
18488 Windows requires that memory allocated in a library be freed by
18489 a function in the same library, hence
18490 <function>free()</function> doesn't work for freeing memory
18491 allocated by libpq. <function>PQfreemem</function> is the proper
18492 way to free libpq memory, especially on Windows, and is
18493 recommended for other platforms as well.
18494 </para>
18495 </listitem>
18497 <listitem>
18498 <para>Document service capability, and add sample file (Bruce)</para>
18499 <para>
18500 This allows clients to look up connection information in a
18501 central file on the client machine.
18502 </para>
18503 </listitem>
18505 <listitem>
18506 <para>
18507 Make <function>PQsetdbLogin</function> have the same defaults as
18508 <function>PQconnectdb</function> (Tom)
18509 </para>
18510 </listitem>
18512 <listitem><para>Allow libpq to cleanly fail when result sets are too large (Tom)</para></listitem>
18514 <listitem>
18515 <para>
18516 Improve performance of function <function>PQunescapeBytea</function> (Ben Lamb)
18517 </para>
18518 </listitem>
18520 <listitem>
18521 <para>
18522 Allow thread-safe libpq with <filename>configure</filename>
18523 option <option>--enable-thread-safety</option> (Lee Kindness,
18524 Philip Yarra)
18525 </para>
18526 </listitem>
18528 <listitem>
18529 <para>
18530 Allow function <function>pqInternalNotice</function> to accept a
18531 format string and arguments instead of just a preformatted
18532 message (Tom, Sean Chittenden)
18533 </para>
18534 </listitem>
18536 <listitem>
18537 <para>
18538 Control SSL negotiation with <literal>sslmode</literal> values
18539 <literal>disable</literal>, <literal>allow</literal>,
18540 <literal>prefer</literal>, and <literal>require</literal> (Jon
18541 Jensen)
18542 </para>
18543 </listitem>
18545 <listitem>
18546 <para>Allow new error codes and levels of text (Tom)</para>
18547 </listitem>
18549 <listitem>
18550 <para>Allow access to the underlying table and column of a query result (Tom)</para>
18551 <para>
18552 This is helpful for query-builder applications that want to know
18553 the underlying table and column names associated with a specific
18554 result set.
18555 </para>
18556 </listitem>
18558 <listitem><para>Allow access to the current transaction status (Tom)</para></listitem>
18559 <listitem><para>Add ability to pass binary data directly to the server (Tom)</para></listitem>
18561 <listitem>
18562 <para>
18563 Add function <function>PQexecPrepared</function> and
18564 <function>PQsendQueryPrepared</function> functions which perform
18565 bind/execute of previously prepared statements (Tom)
18566 </para>
18567 </listitem>
18568 </itemizedlist>
18569 </sect3>
18571 <sect3>
18572 <title>JDBC Changes</title>
18574 <itemizedlist>
18575 <listitem><para>Allow <function>setNull</function> on updateable result sets</para></listitem>
18576 <listitem><para>Allow <function>executeBatch</function> on a prepared statement (Barry)</para></listitem>
18577 <listitem><para>Support SSL connections (Barry)</para></listitem>
18578 <listitem><para>Handle schema names in result sets (Paul Sorenson)</para></listitem>
18579 <listitem><para>Add refcursor support (Nic Ferrier)</para></listitem>
18580 </itemizedlist>
18581 </sect3>
18583 <sect3>
18584 <title>Miscellaneous Interface Changes</title>
18586 <itemizedlist>
18587 <listitem>
18588 <para>Prevent possible memory leak or core dump during libpgtcl shutdown (Tom)</para>
18589 </listitem>
18590 <listitem>
18591 <para>Add Informix compatibility to ECPG (Michael)</para>
18592 <para>
18593 This allows ECPG to process embedded C programs that were
18594 written using certain Informix extensions.
18595 </para>
18596 </listitem>
18598 <listitem>
18599 <para>Add type <type>decimal</type> to ECPG that is fixed length, for Informix (Michael)</para>
18600 </listitem>
18602 <listitem>
18603 <para>
18604 Allow thread-safe embedded SQL programs with
18605 <filename>configure</filename> option
18606 <option>--enable-thread-safety</option> (Lee Kindness, Bruce)
18607 </para>
18608 <para>
18609 This allows multiple threads to access the database at the same
18610 time.
18611 </para>
18612 </listitem>
18614 <listitem>
18615 <para>Moved Python client PyGreSQL to <ulink url="http://www.pygresql.org"></ulink> (Marc)</para>
18616 </listitem>
18617 </itemizedlist>
18618 </sect3>
18620 <sect3>
18621 <title>Source Code Changes</title>
18623 <itemizedlist>
18624 <listitem><para>Prevent need for separate platform geometry regression result files (Tom)</para></listitem>
18625 <listitem><para>Improved PPC locking primitive (Reinhard Max)</para></listitem>
18626 <listitem><para>New function <function>palloc0</function> to allocate and clear memory (Bruce)</para></listitem>
18627 <listitem><para>Fix locking code for s390x CPU (64-bit) (Tom)</para></listitem>
18628 <listitem><para>Allow OpenBSD to use local ident credentials (William Ahern)</para></listitem>
18629 <listitem><para>Make query plan trees read-only to executor (Tom)</para></listitem>
18630 <listitem><para>Add Darwin startup scripts (David Wheeler)</para></listitem>
18631 <listitem><para>Allow libpq to compile with Borland C++ compiler (Lester Godwin, Karl Waclawek)</para></listitem>
18632 <listitem><para>Use our own version of <function>getopt_long()</function> if needed (Peter)</para></listitem>
18633 <listitem><para>Convert administration scripts to C (Peter)</para></listitem>
18634 <listitem><para> Bison &gt;= 1.85 is now required to build the <productname>PostgreSQL</> grammar, if building from CVS</para></listitem>
18635 <listitem><para>Merge documentation into one book (Peter)</para></listitem>
18636 <listitem><para>Add Windows compatibility functions (Bruce)</para></listitem>
18637 <listitem><para>Allow client interfaces to compile under MinGW (Bruce)</para></listitem>
18638 <listitem><para>New <function>ereport()</function> function for error reporting (Tom)</para></listitem>
18639 <listitem><para>Support Intel compiler on Linux (Peter)</para></listitem>
18640 <listitem><para>Improve Linux startup scripts (Slawomir Sudnik, Darko Prenosil)</para></listitem>
18641 <listitem><para>Add support for AMD Opteron and Itanium (Jeffrey W. Baker, Bruce)</para></listitem>
18642 <listitem>
18643 <para>Remove <option>--enable-recode</option> option from <command>configure</command></para>
18644 <para>
18645 This was no longer needed now that we have <command>CREATE CONVERSION</command>.
18646 </para>
18647 </listitem>
18648 <listitem>
18649 <para>Generate a compile error if spinlock code is not found (Bruce)</para>
18650 <para>
18651 Platforms without spinlock code will now fail to compile, rather
18652 than silently using semaphores. This failure can be disabled
18653 with a new <command>configure</command> option.
18654 </para>
18655 </listitem>
18656 </itemizedlist>
18657 </sect3>
18659 <sect3>
18660 <title>Contrib Changes</title>
18662 <itemizedlist>
18663 <listitem><para>Change dbmirror license to BSD</para></listitem>
18664 <listitem><para>Improve earthdistance (Bruno Wolff III)</para></listitem>
18665 <listitem><para>Portability improvements to pgcrypto (Marko Kreen)</para></listitem>
18666 <listitem><para>Prevent crash in xml (John Gray, Michael Richards)</para></listitem>
18667 <listitem><para>Update oracle</para></listitem>
18668 <listitem><para>Update mysql</para></listitem>
18669 <listitem><para>Update cube (Bruno Wolff III)</para></listitem>
18670 <listitem><para>Update earthdistance to use cube (Bruno Wolff III)</para></listitem>
18671 <listitem><para>Update btree_gist (Oleg)</para></listitem>
18672 <listitem><para>New tsearch2 full-text search module (Oleg, Teodor)</para></listitem>
18673 <listitem><para>Add hash-based crosstab function to tablefuncs (Joe)</para></listitem>
18674 <listitem><para>Add serial column to order <function>connectby()</> siblings in tablefuncs (Nabil Sayegh,Joe)</para></listitem>
18675 <listitem><para>Add named persistent connections to dblink (Shridhar Daithanka)</para></listitem>
18676 <listitem><para>New pg_autovacuum allows automatic <command>VACUUM</command> (Matthew T. O'Connor)</para></listitem>
18677 <listitem><para>Make pgbench honor environment variables <envar>PGHOST</>, <envar>PGPORT</>, <envar>PGUSER</> (Tatsuo)</para></listitem>
18678 <listitem><para>Improve intarray (Teodor Sigaev)</para></listitem>
18679 <listitem><para>Improve pgstattuple (Rod)</para></listitem>
18680 <listitem><para>Fix bug in <function>metaphone()</function> in fuzzystrmatch</para></listitem>
18681 <listitem><para>Improve adddepend (Rod)</para></listitem>
18682 <listitem><para>Update spi/timetravel (Böjthe Zoltán)</para></listitem>
18683 <listitem><para>Fix dbase <option>-s</> option and improve non-ASCII handling (Thomas Behr, Márcio Smiderle)</para></listitem>
18684 <listitem><para>Remove array module because features now included by default (Joe)</para></listitem>
18685 </itemizedlist>
18686 </sect3>
18687 </sect2>
18688 </sect1>
18690 <sect1 id="release-7-3-21">
18691 <title>Release 7.3.21</title>
18693 <note>
18694 <title>Release date</title>
18695 <simpara>2008-01-07</simpara>
18696 </note>
18698 <para>
18699 This release contains a variety of fixes from 7.3.20,
18700 including fixes for significant security issues.
18701 </para>
18703 <para>
18704 This is expected to be the last <productname>PostgreSQL</> release
18705 in the 7.3.X series. Users are encouraged to update to a newer
18706 release branch soon.
18707 </para>
18709 <sect2>
18710 <title>Migration to Version 7.3.21</title>
18712 <para>
18713 A dump/restore is not required for those running 7.3.X. However,
18714 if you are upgrading from a version earlier than 7.3.13, see the release
18715 notes for 7.3.13.
18716 </para>
18718 </sect2>
18720 <sect2>
18721 <title>Changes</title>
18723 <itemizedlist>
18725 <listitem>
18726 <para>
18727 Prevent functions in indexes from executing with the privileges of
18728 the user running <command>VACUUM</>, <command>ANALYZE</>, etc (Tom)
18729 </para>
18731 <para>
18732 Functions used in index expressions and partial-index
18733 predicates are evaluated whenever a new table entry is made. It has
18734 long been understood that this poses a risk of trojan-horse code
18735 execution if one modifies a table owned by an untrustworthy user.
18736 (Note that triggers, defaults, check constraints, etc. pose the
18737 same type of risk.) But functions in indexes pose extra danger
18738 because they will be executed by routine maintenance operations
18739 such as <command>VACUUM FULL</>, which are commonly performed
18740 automatically under a superuser account. For example, a nefarious user
18741 can execute code with superuser privileges by setting up a
18742 trojan-horse index definition and waiting for the next routine vacuum.
18743 The fix arranges for standard maintenance operations
18744 (including <command>VACUUM</>, <command>ANALYZE</>, <command>REINDEX</>,
18745 and <command>CLUSTER</>) to execute as the table owner rather than
18746 the calling user, using the same privilege-switching mechanism already
18747 used for <literal>SECURITY DEFINER</> functions. To prevent bypassing
18748 this security measure, execution of <command>SET SESSION
18749 AUTHORIZATION</> and <command>SET ROLE</> is now forbidden within a
18750 <literal>SECURITY DEFINER</> context. (CVE-2007-6600)
18751 </para>
18752 </listitem>
18754 <listitem>
18755 <para>
18756 Require non-superusers who use <filename>/contrib/dblink</> to use only
18757 password authentication, as a security measure (Joe)
18758 </para>
18760 <para>
18761 The fix that appeared for this in 7.3.20 was incomplete, as it plugged
18762 the hole for only some <filename>dblink</> functions. (CVE-2007-6601,
18763 CVE-2007-3278)
18764 </para>
18765 </listitem>
18767 <listitem>
18768 <para>
18769 Fix potential crash in <function>translate()</> when using a multibyte
18770 database encoding (Tom)
18771 </para>
18772 </listitem>
18774 <listitem>
18775 <para>
18776 Make <filename>contrib/tablefunc</>'s <function>crosstab()</> handle
18777 NULL rowid as a category in its own right, rather than crashing (Joe)
18778 </para>
18779 </listitem>
18781 <listitem>
18782 <para>
18783 Require a specific version of <productname>Autoconf</> to be used
18784 when re-generating the <command>configure</> script (Peter)
18785 </para>
18787 <para>
18788 This affects developers and packagers only. The change was made
18789 to prevent accidental use of untested combinations of
18790 <productname>Autoconf</> and <productname>PostgreSQL</> versions.
18791 You can remove the version check if you really want to use a
18792 different <productname>Autoconf</> version, but it's
18793 your responsibility whether the result works or not.
18794 </para>
18795 </listitem>
18797 </itemizedlist>
18799 </sect2>
18800 </sect1>
18802 <sect1 id="release-7-3-20">
18803 <title>Release 7.3.20</title>
18805 <note>
18806 <title>Release date</title>
18807 <simpara>2007-09-17</simpara>
18808 </note>
18810 <para>
18811 This release contains fixes from 7.3.19.
18812 </para>
18814 <sect2>
18815 <title>Migration to Version 7.3.20</title>
18817 <para>
18818 A dump/restore is not required for those running 7.3.X. However,
18819 if you are upgrading from a version earlier than 7.3.13, see the release
18820 notes for 7.3.13.
18821 </para>
18823 </sect2>
18825 <sect2>
18826 <title>Changes</title>
18828 <itemizedlist>
18830 <listitem>
18831 <para>
18832 Prevent index corruption when a transaction inserts rows and
18833 then aborts close to the end of a concurrent <command>VACUUM</>
18834 on the same table (Tom)
18835 </para>
18836 </listitem>
18838 <listitem>
18839 <para>
18840 Make <command>CREATE DOMAIN ... DEFAULT NULL</> work properly (Tom)
18841 </para>
18842 </listitem>
18844 <listitem>
18845 <para>
18846 Fix crash when <varname>log_min_error_statement</> logging runs out
18847 of memory (Tom)
18848 </para>
18849 </listitem>
18851 <listitem>
18852 <para>
18853 Require non-superusers who use <filename>/contrib/dblink</> to use only
18854 password authentication, as a security measure (Joe)
18855 </para>
18856 </listitem>
18858 </itemizedlist>
18860 </sect2>
18861 </sect1>
18863 <sect1 id="release-7-3-19">
18864 <title>Release 7.3.19</title>
18866 <note>
18867 <title>Release date</title>
18868 <simpara>2007-04-23</simpara>
18869 </note>
18871 <para>
18872 This release contains fixes from 7.3.18,
18873 including a security fix.
18874 </para>
18876 <sect2>
18877 <title>Migration to Version 7.3.19</title>
18879 <para>
18880 A dump/restore is not required for those running 7.3.X. However,
18881 if you are upgrading from a version earlier than 7.3.13, see the release
18882 notes for 7.3.13.
18883 </para>
18885 </sect2>
18887 <sect2>
18888 <title>Changes</title>
18890 <itemizedlist>
18892 <listitem>
18893 <para>
18894 Support explicit placement of the temporary-table schema within
18895 <varname>search_path</>, and disable searching it for functions
18896 and operators (Tom)
18897 </para>
18898 <para>
18899 This is needed to allow a security-definer function to set a
18900 truly secure value of <varname>search_path</>. Without it,
18901 an unprivileged SQL user can use temporary objects to execute code
18902 with the privileges of the security-definer function (CVE-2007-2138).
18903 See <command>CREATE FUNCTION</> for more information.
18904 </para>
18905 </listitem>
18907 <listitem>
18908 <para>
18909 Fix potential-data-corruption bug in how <command>VACUUM FULL</> handles
18910 <command>UPDATE</> chains (Tom, Pavan Deolasee)
18911 </para>
18912 </listitem>
18914 </itemizedlist>
18916 </sect2>
18917 </sect1>
18919 <sect1 id="release-7-3-18">
18920 <title>Release 7.3.18</title>
18922 <note>
18923 <title>Release date</title>
18924 <simpara>2007-02-05</simpara>
18925 </note>
18927 <para>
18928 This release contains a variety of fixes from 7.3.17, including
18929 a security fix.
18930 </para>
18932 <sect2>
18933 <title>Migration to Version 7.3.18</title>
18935 <para>
18936 A dump/restore is not required for those running 7.3.X. However,
18937 if you are upgrading from a version earlier than 7.3.13, see the release
18938 notes for 7.3.13.
18939 </para>
18941 </sect2>
18943 <sect2>
18944 <title>Changes</title>
18946 <itemizedlist>
18948 <listitem>
18949 <para>
18950 Remove security vulnerability that allowed connected users
18951 to read backend memory (Tom)
18952 </para>
18953 <para>
18954 The vulnerability involves changing the
18955 data type of a table column used in a SQL function (CVE-2007-0555).
18956 This error can easily be exploited to cause a backend crash, and in
18957 principle might be used to read database content that the user
18958 should not be able to access.
18959 </para>
18960 </listitem>
18962 <listitem>
18963 <para>
18964 Fix rare bug wherein btree index page splits could fail
18965 due to choosing an infeasible split point (Heikki Linnakangas)
18966 </para>
18967 </listitem>
18969 <listitem>
18970 <para>
18971 Tighten security of multi-byte character processing for UTF8 sequences
18972 over three bytes long (Tom)
18973 </para>
18974 </listitem>
18976 </itemizedlist>
18978 </sect2>
18979 </sect1>
18981 <sect1 id="release-7-3-17">
18982 <title>Release 7.3.17</title>
18984 <note>
18985 <title>Release date</title>
18986 <simpara>2007-01-08</simpara>
18987 </note>
18989 <para>
18990 This release contains a variety of fixes from 7.3.16.
18991 </para>
18993 <sect2>
18994 <title>Migration to Version 7.3.17</title>
18996 <para>
18997 A dump/restore is not required for those running 7.3.X. However,
18998 if you are upgrading from a version earlier than 7.3.13, see the release
18999 notes for 7.3.13.
19000 </para>
19002 </sect2>
19004 <sect2>
19005 <title>Changes</title>
19007 <itemizedlist>
19009 <listitem>
19010 <para>
19011 <function>to_number()</> and <function>to_char(numeric)</>
19012 are now <literal>STABLE</>, not <literal>IMMUTABLE</>, for
19013 new <application>initdb</> installs (Tom)
19014 </para>
19016 <para>
19017 This is because <varname>lc_numeric</> can potentially
19018 change the output of these functions.
19019 </para>
19020 </listitem>
19022 <listitem>
19023 <para>
19024 Improve index usage of regular expressions that use parentheses (Tom)
19025 </para>
19027 <para>
19028 This improves <application>psql</> <literal>\d</> performance also.
19029 </para>
19030 </listitem>
19032 </itemizedlist>
19034 </sect2>
19035 </sect1>
19037 <sect1 id="release-7-3-16">
19038 <title>Release 7.3.16</title>
19040 <note>
19041 <title>Release date</title>
19042 <simpara>2006-10-16</simpara>
19043 </note>
19045 <para>
19046 This release contains a variety of fixes from 7.3.15.
19047 </para>
19049 <sect2>
19050 <title>Migration to Version 7.3.16</title>
19052 <para>
19053 A dump/restore is not required for those running 7.3.X. However,
19054 if you are upgrading from a version earlier than 7.3.13, see the release
19055 notes for 7.3.13.
19056 </para>
19058 </sect2>
19060 <sect2>
19061 <title>Changes</title>
19063 <itemizedlist>
19064 <listitem><para>Fix corner cases in pattern matching for
19065 <application>psql</>'s <literal>\d</> commands</para></listitem>
19066 <listitem><para>Fix index-corrupting bugs in /contrib/ltree
19067 (Teodor)</para></listitem>
19068 <listitem><para>Back-port 7.4 spinlock code to improve performance and support
19069 64-bit architectures better</para> </listitem>
19070 <listitem><para>Fix SSL-related memory leak in libpq</para> </listitem>
19071 <listitem><para>Fix backslash escaping in /contrib/dbmirror</para></listitem>
19072 <listitem><para>Adjust regression tests for recent changes in US DST laws
19073 </para> </listitem>
19074 </itemizedlist>
19076 </sect2>
19077 </sect1>
19079 <sect1 id="release-7-3-15">
19080 <title>Release 7.3.15</title>
19082 <note>
19083 <title>Release date</title>
19084 <simpara>2006-05-23</simpara>
19085 </note>
19087 <para>
19088 This release contains a variety of fixes from 7.3.14,
19089 including patches for extremely serious security issues.
19090 </para>
19092 <sect2>
19093 <title>Migration to Version 7.3.15</title>
19095 <para>
19096 A dump/restore is not required for those running 7.3.X. However,
19097 if you are upgrading from a version earlier than 7.3.13, see the release
19098 notes for 7.3.13.
19099 </para>
19101 <para>
19102 Full security against the SQL-injection attacks described in
19103 CVE-2006-2313 and CVE-2006-2314 might require changes in application
19104 code. If you have applications that embed untrustworthy strings
19105 into SQL commands, you should examine them as soon as possible to
19106 ensure that they are using recommended escaping techniques. In
19107 most cases, applications should be using subroutines provided by
19108 libraries or drivers (such as <application>libpq</>'s
19109 <function>PQescapeStringConn()</>) to perform string escaping,
19110 rather than relying on <foreignphrase>ad hoc</> code to do it.
19111 </para>
19112 </sect2>
19114 <sect2>
19115 <title>Changes</title>
19117 <itemizedlist>
19118 <listitem><para>Change the server to reject invalidly-encoded multibyte
19119 characters in all cases (Tatsuo, Tom)</para>
19120 <para>While <productname>PostgreSQL</> has been moving in this direction for
19121 some time, the checks are now applied uniformly to all encodings and all
19122 textual input, and are now always errors not merely warnings. This change
19123 defends against SQL-injection attacks of the type described in CVE-2006-2313.
19124 </para></listitem>
19126 <listitem><para>Reject unsafe uses of <literal>\'</> in string literals</para>
19127 <para>As a server-side defense against SQL-injection attacks of the type
19128 described in CVE-2006-2314, the server now only accepts <literal>''</> and not
19129 <literal>\'</> as a representation of ASCII single quote in SQL string
19130 literals. By default, <literal>\'</> is rejected only when
19131 <varname>client_encoding</> is set to a client-only encoding (SJIS, BIG5, GBK,
19132 GB18030, or UHC), which is the scenario in which SQL injection is possible.
19133 A new configuration parameter <varname>backslash_quote</> is available to
19134 adjust this behavior when needed. Note that full security against
19135 CVE-2006-2314 might require client-side changes; the purpose of
19136 <varname>backslash_quote</> is in part to make it obvious that insecure
19137 clients are insecure.
19138 </para></listitem>
19140 <listitem><para>Modify <application>libpq</>'s string-escaping routines to be
19141 aware of encoding considerations</para>
19142 <para>This fixes <application>libpq</>-using applications for the security
19143 issues described in CVE-2006-2313 and CVE-2006-2314.
19144 Applications that use multiple <productname>PostgreSQL</> connections
19145 concurrently should migrate to <function>PQescapeStringConn()</> and
19146 <function>PQescapeByteaConn()</> to ensure that escaping is done correctly
19147 for the settings in use in each database connection. Applications that
19148 do string escaping <quote>by hand</> should be modified to rely on library
19149 routines instead.
19150 </para></listitem>
19152 <listitem><para>Fix some incorrect encoding conversion functions</para>
19153 <para><function>win1251_to_iso</>, <function>alt_to_iso</>,
19154 <function>euc_tw_to_big5</>, <function>euc_tw_to_mic</>,
19155 <function>mic_to_euc_tw</> were all broken to varying
19156 extents.
19157 </para></listitem>
19159 <listitem><para>Clean up stray remaining uses of <literal>\'</> in strings
19160 (Bruce, Jan)</para></listitem>
19162 <listitem><para>Fix server to use custom DH SSL parameters correctly (Michael
19163 Fuhr)</para></listitem>
19165 <listitem><para>Fix various minor memory leaks</para></listitem>
19166 </itemizedlist>
19168 </sect2>
19169 </sect1>
19171 <sect1 id="release-7-3-14">
19172 <title>Release 7.3.14</title>
19174 <note>
19175 <title>Release date</title>
19176 <simpara>2006-02-14</simpara>
19177 </note>
19179 <para>
19180 This release contains a variety of fixes from 7.3.13.
19181 </para>
19183 <sect2>
19184 <title>Migration to Version 7.3.14</title>
19186 <para>
19187 A dump/restore is not required for those running 7.3.X. However,
19188 if you are upgrading from a version earlier than 7.3.13, see the release
19189 notes for 7.3.13.
19190 </para>
19191 </sect2>
19193 <sect2>
19194 <title>Changes</title>
19196 <itemizedlist>
19198 <listitem><para>Fix potential crash in <command>SET
19199 SESSION AUTHORIZATION</> (CVE-2006-0553)</para>
19200 <para>An unprivileged user could crash the server process, resulting in
19201 momentary denial of service to other users, if the server has been compiled
19202 with Asserts enabled (which is not the default).
19203 Thanks to Akio Ishida for reporting this problem.
19204 </para></listitem>
19206 <listitem><para>Fix bug with row visibility logic in self-inserted
19207 rows (Tom)</para>
19208 <para>Under rare circumstances a row inserted by the current command
19209 could be seen as already valid, when it should not be. Repairs bug
19210 created in 7.3.11 release.
19211 </para></listitem>
19213 <listitem><para>Fix race condition that could lead to <quote>file already
19214 exists</> errors during pg_clog file creation
19215 (Tom)</para></listitem>
19217 <listitem><para>Fix to allow restoring dumps that have cross-schema
19218 references to custom operators (Tom)</para></listitem>
19220 <listitem><para>Portability fix for testing presence of <function>finite</>
19221 and <function>isinf</> during configure (Tom)</para></listitem>
19223 </itemizedlist>
19225 </sect2>
19226 </sect1>
19228 <sect1 id="release-7-3-13">
19229 <title>Release 7.3.13</title>
19231 <note>
19232 <title>Release date</title>
19233 <simpara>2006-01-09</simpara>
19234 </note>
19236 <para>
19237 This release contains a variety of fixes from 7.3.12.
19238 </para>
19240 <sect2>
19241 <title>Migration to Version 7.3.13</title>
19243 <para>
19244 A dump/restore is not required for those running 7.3.X. However,
19245 if you are upgrading from a version earlier than 7.3.10, see the release
19246 notes for 7.3.10.
19247 Also, you might need to <command>REINDEX</> indexes on textual
19248 columns after updating, if you are affected by the locale or
19249 <application>plperl</> issues described below.
19250 </para>
19251 </sect2>
19253 <sect2>
19254 <title>Changes</title>
19256 <itemizedlist>
19258 <listitem><para>Fix character string comparison for locales that consider
19259 different character combinations as equal, such as Hungarian (Tom)</para>
19260 <para>This might require <command>REINDEX</> to fix existing indexes on
19261 textual columns.</para></listitem>
19263 <listitem><para>Set locale environment variables during postmaster startup
19264 to ensure that <application>plperl</> won't change the locale later</para>
19265 <para>This fixes a problem that occurred if the <application>postmaster</> was
19266 started with environment variables specifying a different locale than what
19267 <application>initdb</> had been told. Under these conditions, any use of
19268 <application>plperl</> was likely to lead to corrupt indexes. You might need
19269 <command>REINDEX</> to fix existing indexes on
19270 textual columns if this has happened to you.</para></listitem>
19272 <listitem><para>Fix longstanding bug in strpos() and regular expression
19273 handling in certain rarely used Asian multi-byte character sets (Tatsuo)
19274 </para></listitem>
19276 <listitem><para>Fix bug in <filename>/contrib/pgcrypto</> gen_salt,
19277 which caused it not to use all available salt space for MD5 and
19278 XDES algorithms (Marko Kreen, Solar Designer)</para>
19279 <para>Salts for Blowfish and standard DES are unaffected.</para></listitem>
19281 <listitem><para>Fix <filename>/contrib/dblink</> to throw an error,
19282 rather than crashing, when the number of columns specified is different from
19283 what's actually returned by the query (Joe)</para></listitem>
19285 </itemizedlist>
19287 </sect2>
19288 </sect1>
19290 <sect1 id="release-7-3-12">
19291 <title>Release 7.3.12</title>
19293 <note>
19294 <title>Release date</title>
19295 <simpara>2005-12-12</simpara>
19296 </note>
19298 <para>
19299 This release contains a variety of fixes from 7.3.11.
19300 </para>
19302 <sect2>
19303 <title>Migration to Version 7.3.12</title>
19305 <para>
19306 A dump/restore is not required for those running 7.3.X. However,
19307 if you are upgrading from a version earlier than 7.3.10, see the release
19308 notes for 7.3.10.
19309 </para>
19310 </sect2>
19312 <sect2>
19313 <title>Changes</title>
19315 <itemizedlist>
19317 <listitem><para>Fix race condition in transaction log management</para>
19318 <para>There was a narrow window in which an I/O operation could be initiated
19319 for the wrong page, leading to an Assert failure or data
19320 corruption.</para>
19321 </listitem>
19323 <listitem><para><filename>/contrib/ltree</> fixes (Teodor)</para></listitem>
19325 <listitem><para>Fix longstanding planning error for outer joins</para>
19326 <para>This bug sometimes caused a bogus error <quote>RIGHT JOIN is
19327 only supported with merge-joinable join conditions</>.</para></listitem>
19329 <listitem><para>Prevent core dump in <application>pg_autovacuum</> when a
19330 table has been dropped</para></listitem>
19332 </itemizedlist>
19334 </sect2>
19335 </sect1>
19337 <sect1 id="release-7-3-11">
19338 <title>Release 7.3.11</title>
19340 <note>
19341 <title>Release date</title>
19342 <simpara>2005-10-04</simpara>
19343 </note>
19345 <para>
19346 This release contains a variety of fixes from 7.3.10.
19347 </para>
19349 <sect2>
19350 <title>Migration to Version 7.3.11</title>
19352 <para>
19353 A dump/restore is not required for those running 7.3.X. However,
19354 if you are upgrading from a version earlier than 7.3.10, see the release
19355 notes for 7.3.10.
19356 </para>
19357 </sect2>
19359 <sect2>
19360 <title>Changes</title>
19362 <itemizedlist>
19363 <listitem><para>Fix error that allowed <command>VACUUM</> to remove
19364 <literal>ctid</> chains too soon, and add more checking in code that follows
19365 <literal>ctid</> links</para>
19366 <para>This fixes a long-standing problem that could cause crashes in very rare
19367 circumstances.</para></listitem>
19368 <listitem><para>Fix <type>CHAR()</> to properly pad spaces to the specified
19369 length when using a multiple-byte character set (Yoshiyuki Asaba)</para>
19370 <para>In prior releases, the padding of <type>CHAR()</> was incorrect
19371 because it only padded to the specified number of bytes without
19372 considering how many characters were stored.</para></listitem>
19373 <listitem><para>Fix missing rows in queries like <literal>UPDATE a=... WHERE
19374 a...</> with GiST index on column <literal>a</></para></listitem>
19375 <listitem><para>Improve checking for partially-written WAL
19376 pages</para></listitem>
19377 <listitem><para>Improve robustness of signal handling when SSL is
19378 enabled</para></listitem>
19379 <listitem><para>Various memory leakage fixes</para></listitem>
19380 <listitem><para>Various portability improvements</para></listitem>
19381 <listitem><para>Fix PL/PgSQL to handle <literal>var := var</> correctly when
19382 the variable is of pass-by-reference type</para></listitem>
19383 </itemizedlist>
19385 </sect2>
19386 </sect1>
19388 <sect1 id="release-7-3-10">
19389 <title>Release 7.3.10</title>
19391 <note>
19392 <title>Release date</title>
19393 <simpara>2005-05-09</simpara>
19394 </note>
19396 <para>
19397 This release contains a variety of fixes from 7.3.9, including several
19398 security-related issues.
19399 </para>
19401 <sect2>
19402 <title>Migration to Version 7.3.10</title>
19404 <para>
19405 A dump/restore is not required for those running 7.3.X. However,
19406 it is one possible way of handling a significant security problem
19407 that has been found in the initial contents of 7.3.X system
19408 catalogs. A dump/initdb/reload sequence using 7.3.10's initdb will
19409 automatically correct this problem.
19410 </para>
19412 <para>
19413 The security problem is that the built-in character set encoding
19414 conversion functions can be invoked from SQL commands by unprivileged
19415 users, but the functions were not designed for such use and are not
19416 secure against malicious choices of arguments. The fix involves changing
19417 the declared parameter list of these functions so that they can no longer
19418 be invoked from SQL commands. (This does not affect their normal use
19419 by the encoding conversion machinery.)
19420 It is strongly recommended that all installations repair this error,
19421 either by initdb or by following the manual repair procedure given
19422 below. The error at least allows unprivileged database users to crash
19423 their server process, and might allow unprivileged users to gain the
19424 privileges of a database superuser.
19425 </para>
19427 <para>
19428 If you wish not to do an initdb, perform the following procedure instead.
19429 As the database superuser, do:
19431 <programlisting>
19432 BEGIN;
19433 UPDATE pg_proc SET proargtypes[3] = 'internal'::regtype
19434 WHERE pronamespace = 11 AND pronargs = 5
19435 AND proargtypes[2] = 'cstring'::regtype;
19436 -- The command should report having updated 90 rows;
19437 -- if not, rollback and investigate instead of committing!
19438 COMMIT;
19439 </programlisting>
19440 </para>
19442 <para>
19443 The above procedure must be carried out in <emphasis>each</> database
19444 of an installation, including <literal>template1</>, and ideally
19445 including <literal>template0</> as well. If you do not fix the
19446 template databases then any subsequently created databases will contain
19447 the same error. <literal>template1</> can be fixed in the same way
19448 as any other database, but fixing <literal>template0</> requires
19449 additional steps. First, from any database issue:
19450 <programlisting>
19451 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
19452 </programlisting>
19453 Next connect to <literal>template0</> and perform the above repair
19454 procedure. Finally, do:
19455 <programlisting>
19456 -- re-freeze template0:
19457 VACUUM FREEZE;
19458 -- and protect it against future alterations:
19459 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
19460 </programlisting>
19461 </para>
19462 </sect2>
19464 <sect2>
19465 <title>Changes</title>
19467 <itemizedlist>
19468 <listitem><para>Change encoding function signature to prevent
19469 misuse</para></listitem>
19470 <listitem><para>Repair ancient race condition that allowed a transaction to be
19471 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
19472 than for other purposes</para>
19473 <para>This is an extremely serious bug since it could lead to apparent
19474 data inconsistencies being briefly visible to applications.</para></listitem>
19475 <listitem><para>Repair race condition between relation extension and
19476 VACUUM</para>
19477 <para>This could theoretically have caused loss of a page's worth of
19478 freshly-inserted data, although the scenario seems of very low probability.
19479 There are no known cases of it having caused more than an Assert failure.
19480 </para></listitem>
19481 <listitem><para>Fix comparisons of <type>TIME WITH TIME ZONE</> values</para>
19482 <para>
19483 The comparison code was wrong in the case where the
19484 <literal>--enable-integer-datetimes</> configuration switch had been used.
19485 NOTE: if you have an index on a <type>TIME WITH TIME ZONE</> column,
19486 it will need to be <command>REINDEX</>ed after installing this update, because
19487 the fix corrects the sort order of column values.
19488 </para></listitem>
19489 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
19490 <type>TIME WITH TIME ZONE</> values</para></listitem>
19491 <listitem><para>Fix mis-display of negative fractional seconds in
19492 <type>INTERVAL</> values</para>
19493 <para>
19494 This error only occurred when the
19495 <literal>--enable-integer-datetimes</> configuration switch had been used.
19496 </para></listitem>
19497 <listitem><para>Additional buffer overrun checks in plpgsql
19498 (Neil)</para></listitem>
19499 <listitem><para>Fix pg_dump to dump trigger names containing <literal>%</>
19500 correctly (Neil)</para></listitem>
19501 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
19502 month-related formats</para></listitem>
19503 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
19504 (Marko Kreen)</para></listitem>
19505 <listitem><para>Still more 64-bit fixes for
19506 <filename>contrib/intagg</></para></listitem>
19507 <listitem><para>Prevent incorrect optimization of functions returning
19508 <type>RECORD</></para></listitem>
19509 </itemizedlist>
19511 </sect2>
19512 </sect1>
19514 <sect1 id="release-7-3-9">
19515 <title>Release 7.3.9</title>
19517 <note>
19518 <title>Release date</title>
19519 <simpara>2005-01-31</simpara>
19520 </note>
19522 <para>
19523 This release contains a variety of fixes from 7.3.8, including several
19524 security-related issues.
19525 </para>
19527 <sect2>
19528 <title>Migration to Version 7.3.9</title>
19530 <para>
19531 A dump/restore is not required for those running 7.3.X.
19532 </para>
19533 </sect2>
19535 <sect2>
19536 <title>Changes</title>
19538 <itemizedlist>
19539 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
19540 <para>
19541 On platforms that will automatically execute initialization functions of a
19542 shared library (this includes at least Windows and ELF-based Unixen),
19543 <command>LOAD</> can be used to make the server execute arbitrary code.
19544 Thanks to NGS Software for reporting this.</para></listitem>
19545 <listitem><para>Check that creator of an aggregate function has the right to
19546 execute the specified transition functions</para>
19547 <para>
19548 This oversight made it possible to bypass denial of EXECUTE
19549 permission on a function.</para></listitem>
19550 <listitem><para>Fix security and 64-bit issues in
19551 contrib/intagg</para></listitem>
19552 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
19553 Jurka)</para></listitem>
19554 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
19555 many parameters (Neil)</para></listitem>
19556 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
19557 <para>
19558 The result of the join was mistakenly supposed to be sorted the same as the
19559 left input. This could not only deliver mis-sorted output to the user, but
19560 in case of nested merge joins could give outright wrong answers.
19561 </para></listitem>
19562 <listitem><para>Fix plperl for quote marks in tuple fields</para></listitem>
19563 <listitem><para>Fix display of negative intervals in SQL and GERMAN
19564 datestyles</para></listitem>
19565 </itemizedlist>
19567 </sect2>
19568 </sect1>
19570 <sect1 id="release-7-3-8">
19571 <title>Release 7.3.8</title>
19573 <note>
19574 <title>Release date</title>
19575 <simpara>2004-10-22</simpara>
19576 </note>
19578 <para>
19579 This release contains a variety of fixes from 7.3.7.
19580 </para>
19583 <sect2>
19584 <title>Migration to Version 7.3.8</title>
19586 <para>
19587 A dump/restore is not required for those running 7.3.X.
19588 </para>
19589 </sect2>
19591 <sect2>
19592 <title>Changes</title>
19594 <itemizedlist>
19595 <listitem><para>Repair possible failure to update hint bits on disk</para>
19596 <para>
19597 Under rare circumstances this oversight could lead to
19598 <quote>could not access transaction status</> failures, which qualifies
19599 it as a potential-data-loss bug.
19600 </para></listitem>
19601 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
19602 <para>
19603 Very large left joins using a hash join plan could fail to output unmatched
19604 left-side rows given just the right data distribution.
19605 </para></listitem>
19606 <listitem><para>Disallow running pg_ctl as root</para>
19607 <para>
19608 This is to guard against any possible security issues.
19609 </para></listitem>
19610 <listitem><para>Avoid using temp files in /tmp in make_oidjoins_check</para>
19611 <para>
19612 This has been reported as a security issue, though it's hardly worthy of
19613 concern since there is no reason for non-developers to use this script anyway.
19614 </para></listitem>
19615 </itemizedlist>
19617 </sect2>
19618 </sect1>
19620 <sect1 id="release-7-3-7">
19621 <title>Release 7.3.7</title>
19623 <note>
19624 <title>Release date</title>
19625 <simpara>2004-08-16</simpara>
19626 </note>
19628 <para>
19629 This release contains one critical fix over 7.3.6, and some minor items.
19630 </para>
19633 <sect2>
19634 <title>Migration to Version 7.3.7</title>
19636 <para>
19637 A dump/restore is not required for those running 7.3.X.
19638 </para>
19639 </sect2>
19641 <sect2>
19642 <title>Changes</title>
19644 <itemizedlist>
19645 <listitem><para>Prevent possible loss of committed transactions during crash</para>
19646 <para>
19647 Due to insufficient interlocking between transaction commit and checkpointing,
19648 it was possible for transactions committed just before the most recent
19649 checkpoint to be lost, in whole or in part, following a database crash and
19650 restart. This is a serious bug that has existed
19651 since <productname>PostgreSQL</productname> 7.1.
19652 </para></listitem>
19653 <listitem><para>Remove asymmetrical word processing in tsearch (Teodor)</para></listitem>
19654 <listitem><para>Properly schema-qualify function names when pg_dump'ing a CAST</para></listitem>
19655 </itemizedlist>
19657 </sect2>
19658 </sect1>
19660 <sect1 id="release-7-3-6">
19661 <title>Release 7.3.6</title>
19663 <note>
19664 <title>Release date</title>
19665 <simpara>2004-03-02</simpara>
19666 </note>
19668 <para>
19669 This release contains a variety of fixes from 7.3.5.
19670 </para>
19673 <sect2>
19674 <title>Migration to Version 7.3.6</title>
19676 <para>
19677 A dump/restore is <emphasis>not</emphasis> required for those
19678 running 7.3.*.
19679 </para>
19681 </sect2>
19683 <sect2>
19684 <title>Changes</title>
19686 <itemizedlist>
19687 <listitem><para>Revert erroneous changes in rule permissions checking</para>
19688 <para>A patch applied in 7.3.3 to fix a corner case in rule permissions checks
19689 turns out to have disabled rule-related permissions checks in many
19690 not-so-corner cases. This would for example allow users to insert into views
19691 they weren't supposed to have permission to insert into. We have therefore
19692 reverted the 7.3.3 patch. The original bug will be fixed in 8.0.
19693 </para></listitem>
19694 <listitem><para>Repair incorrect order of operations in
19695 GetNewTransactionId()</para>
19696 <para>
19697 This bug could result in failure under out-of-disk-space conditions, including
19698 inability to restart even after disk space is freed.
19699 </para></listitem>
19700 <listitem><para>Ensure configure selects -fno-strict-aliasing even when
19701 an external value for CFLAGS is supplied</para>
19702 <para>
19703 On some platforms, building with -fstrict-aliasing causes bugs.
19704 </para></listitem>
19705 <listitem><para>Make pg_restore handle 64-bit off_t correctly</para>
19706 <para>
19707 This bug prevented proper restoration from archive files exceeding 4 GB.
19708 </para></listitem>
19709 <listitem><para>Make contrib/dblink not assume that local and remote type OIDs
19710 match (Joe)</para></listitem>
19711 <listitem><para>Quote connectby()'s start_with argument properly (Joe)</para></listitem>
19712 <listitem><para>Don't crash when a rowtype argument to a plpgsql function is
19713 NULL</para></listitem>
19714 <listitem><para>Avoid generating invalid character encoding sequences in
19715 corner cases when planning LIKE operations</para></listitem>
19716 <listitem><para>Ensure text_position() cannot scan past end of source string
19717 in multibyte cases (Korea PostgreSQL Users' Group)</para></listitem>
19718 <listitem><para>Fix index optimization and selectivity estimates for LIKE
19719 operations on bytea columns (Joe)</para></listitem>
19720 </itemizedlist>
19722 </sect2>
19723 </sect1>
19725 <sect1 id="release-7-3-5">
19726 <title>Release 7.3.5</title>
19728 <note>
19729 <title>Release date</title>
19730 <simpara>2003-12-03</simpara>
19731 </note>
19733 <para>
19734 This has a variety of fixes from 7.3.4.
19735 </para>
19738 <sect2>
19739 <title>Migration to Version 7.3.5</title>
19741 <para>
19742 A dump/restore is <emphasis>not</emphasis> required for those
19743 running 7.3.*.
19744 </para>
19745 </sect2>
19747 <sect2>
19748 <title>Changes</title>
19750 <itemizedlist>
19751 <listitem><para>Force zero_damaged_pages to be on during recovery from WAL</para></listitem>
19752 <listitem><para>Prevent some obscure cases of <quote>variable not in subplan target lists</quote></para></listitem>
19753 <listitem><para>Force stats processes to detach from shared memory, ensuring cleaner shutdown</para></listitem>
19754 <listitem><para>Make PQescapeBytea and byteaout consistent with each other (Joe)</para></listitem>
19755 <listitem><para>Added missing SPI_finish() calls to dblink's get_tuple_of_interest() (Joe)</para></listitem>
19756 <listitem><para>Fix for possible foreign key violation when rule rewrites INSERT (Jan)</para></listitem>
19757 <listitem><para>Support qualified type names in PL/Tcl's spi_prepare command (Jan)</para></listitem>
19758 <listitem><para>Make pg_dump handle a procedural language handler located in pg_catalog</para></listitem>
19759 <listitem><para>Make pg_dump handle cases where a custom opclass is in another schema</para></listitem>
19760 <listitem><para>Make pg_dump dump binary-compatible casts correctly (Jan)</para></listitem>
19761 <listitem><para>Fix insertion of expressions containing subqueries into rule bodies</para></listitem>
19762 <listitem><para>Fix incorrect argument processing in clusterdb script (Anand Ranganathan)</para></listitem>
19763 <listitem><para>Fix problems with dropped columns in plpython triggers</para></listitem>
19764 <listitem><para>Repair problems with to_char() reading past end of its input string (Karel)</para></listitem>
19765 <listitem><para>Fix GB18030 mapping errors (Tatsuo)</para></listitem>
19766 <listitem><para>Fix several problems with SSL error handling and asynchronous SSL I/O</para></listitem>
19767 <listitem><para>Remove ability to bind a list of values to a single parameter in JDBC
19768 (prevents possible SQL-injection attacks)</para></listitem>
19769 <listitem><para>Fix some errors in HAVE_INT64_TIMESTAMP code paths</para></listitem>
19770 <listitem><para>Fix corner case for btree search in parallel with first root page split</para></listitem>
19771 </itemizedlist>
19773 </sect2>
19774 </sect1>
19776 <sect1 id="release-7-3-4">
19777 <title>Release 7.3.4</title>
19779 <note>
19780 <title>Release date</title>
19781 <simpara>2003-07-24</simpara>
19782 </note>
19784 <para>
19785 This has a variety of fixes from 7.3.3.
19786 </para>
19789 <sect2>
19790 <title>Migration to Version 7.3.4</title>
19792 <para>
19793 A dump/restore is <emphasis>not</emphasis> required for those
19794 running 7.3.*.
19795 </para>
19796 </sect2>
19798 <sect2>
19799 <title>Changes</title>
19801 <itemizedlist>
19802 <listitem><para>Repair breakage in timestamp-to-date conversion for dates before 2000</para></listitem>
19803 <listitem><para>Prevent rare possibility of server startup failure (Tom)</para></listitem>
19804 <listitem><para>Fix bugs in interval-to-time conversion (Tom)</para></listitem>
19805 <listitem><para>Add constraint names in a few places in pg_dump (Rod)</para></listitem>
19806 <listitem><para>Improve performance of functions with many parameters (Tom)</para></listitem>
19807 <listitem><para>Fix to_ascii() buffer overruns (Tom)</para></listitem>
19808 <listitem><para>Prevent restore of database comments from throwing an error (Tom)</para></listitem>
19809 <listitem><para>Work around buggy strxfrm() present in some Solaris releases (Tom)</para></listitem>
19810 <listitem><para>Properly escape jdbc setObject() strings to improve security (Barry)</para></listitem>
19811 </itemizedlist>
19812 </sect2>
19813 </sect1>
19816 <sect1 id="release-7-3-3">
19817 <title>Release 7.3.3</title>
19819 <note>
19820 <title>Release date</title>
19821 <simpara>2003-05-22</simpara>
19822 </note>
19824 <para>
19825 This release contains a variety of fixes for version 7.3.2.
19826 </para>
19828 <sect2>
19829 <title>Migration to Version 7.3.3</title>
19831 <para>
19832 A dump/restore is <emphasis>not</emphasis> required for those
19833 running version 7.3.*.
19834 </para>
19835 </sect2>
19837 <sect2>
19838 <title>Changes</title>
19840 <itemizedlist>
19841 <listitem><para>Repair sometimes-incorrect computation of StartUpID after a crash</para></listitem>
19842 <listitem><para>Avoid slowness with lots of deferred triggers in one transaction (Stephan)</para></listitem>
19843 <listitem><para>Don't lock referenced row when <command>UPDATE</command> doesn't change foreign key's value (Jan)</para></listitem>
19844 <listitem><para>Use <command>-fPIC</command> not <command>-fpic</command> on Sparc (Tom Callaway)</para></listitem>
19845 <listitem><para>Repair lack of schema-awareness in contrib/reindexdb</para></listitem>
19846 <listitem><para>Fix contrib/intarray error for zero-element result array (Teodor)</para></listitem>
19847 <listitem><para>Ensure createuser script will exit on control-C (Oliver)</para></listitem>
19848 <listitem><para>Fix errors when the type of a dropped column has itself been dropped</para></listitem>
19849 <listitem><para><command>CHECKPOINT</command> does not cause database panic on failure in noncritical steps</para></listitem>
19850 <listitem><para>Accept 60 in seconds fields of timestamp, time, interval input values</para></listitem>
19851 <listitem><para>Issue notice, not error, if <type>TIMESTAMP</type>,
19852 <type> TIME</type>, or <type>INTERVAL</type> precision too large</para></listitem>
19853 <listitem><para>Fix <function>abstime-to-time</function> cast function (fix is
19854 not applied unless you <application>initdb</application>)</para></listitem>
19855 <listitem><para>Fix <application>pg_proc</application> entry for
19856 <type>timestampt_izone</type> (fix is not applied unless you
19857 <application>initdb</application>)</para></listitem>
19858 <listitem><para>Make <function>EXTRACT(EPOCH FROM timestamp without time zone)</function> treat input as local time</para></listitem>
19859 <listitem><para><command>'now'::timestamptz</command> gave wrong answer if timezone changed earlier in transaction</para></listitem>
19860 <listitem><para><envar>HAVE_INT64_TIMESTAMP</envar> code for time with timezone overwrote its input</para></listitem>
19861 <listitem><para>Accept <command>GLOBAL TEMP/TEMPORARY</command> as a
19862 synonym for <command>TEMPORARY</command></para></listitem>
19863 <listitem><para>Avoid improper schema-privilege-check failure in foreign-key triggers</para></listitem>
19864 <listitem><para>Fix bugs in foreign-key triggers for <command>SET DEFAULT</command> action</para></listitem>
19865 <listitem><para>Fix incorrect time-qual check in row fetch for
19866 <command>UPDATE</command> and <command>DELETE</command> triggers</para></listitem>
19867 <listitem><para>Foreign-key clauses were parsed but ignored in
19868 <command>ALTER TABLE ADD COLUMN</command></para></listitem>
19869 <listitem><para>Fix createlang script breakage for case where handler function already exists</para></listitem>
19870 <listitem><para>Fix misbehavior on zero-column tables in <application>pg_dump</application>, COPY, ANALYZE, other places</para></listitem>
19871 <listitem><para>Fix misbehavior of <function>func_error()</function> on type names containing '%'</para></listitem>
19872 <listitem><para>Fix misbehavior of <function>replace()</function> on strings containing '%'</para></listitem>
19873 <listitem><para>Regular-expression patterns containing certain multibyte characters failed</para></listitem>
19874 <listitem><para>Account correctly for <command>NULL</command>s in more cases in join size estimation</para></listitem>
19875 <listitem><para>Avoid conflict with system definition of <function>isblank()</function> function or macro</para></listitem>
19876 <listitem><para>Fix failure to convert large code point values in EUC_TW conversions (Tatsuo)</para></listitem>
19877 <listitem><para>Fix error recovery for <function>SSL_read</function>/<function>SSL_write</function> calls</para></listitem>
19878 <listitem><para>Don't do early constant-folding of type coercion expressions</para></listitem>
19879 <listitem><para>Validate page header fields immediately after reading in any page</para></listitem>
19880 <listitem><para>Repair incorrect check for ungrouped variables in unnamed joins</para></listitem>
19881 <listitem><para>Fix buffer overrun in <function>to_ascii</function> (Guido Notari)</para></listitem>
19882 <listitem><para>contrib/ltree fixes (Teodor)</para></listitem>
19883 <listitem><para>Fix core dump in deadlock detection on machines where char is unsigned</para></listitem>
19884 <listitem><para>Avoid running out of buffers in many-way indexscan (bug introduced in 7.3)</para></listitem>
19885 <listitem><para>Fix planner's selectivity estimation functions to handle domains properly</para></listitem>
19886 <listitem><para>Fix <application>dbmirror</application> memory-allocation bug (Steven Singer)</para></listitem>
19887 <listitem><para>Prevent infinite loop in <function>ln(numeric)</function> due to roundoff error</para></listitem>
19888 <listitem><para><command>GROUP BY</command> got confused if there were multiple equal GROUP BY items</para></listitem>
19889 <listitem><para>Fix bad plan when inherited <command>UPDATE</command>/<command>DELETE</command> references another inherited table</para></listitem>
19890 <listitem><para>Prevent clustering on incomplete (partial or non-NULL-storing) indexes</para></listitem>
19891 <listitem><para>Service shutdown request at proper time if it arrives while still starting up</para></listitem>
19892 <listitem><para>Fix left-links in temporary indexes (could make backwards scans miss entries)</para></listitem>
19893 <listitem><para>Fix incorrect handling of client_encoding setting in postgresql.conf (Tatsuo)</para></listitem>
19894 <listitem><para>Fix failure to respond to <command>pg_ctl stop -m fast</command> after Async_NotifyHandler runs</para></listitem>
19895 <listitem><para>Fix SPI for case where rule contains multiple statements of the same type</para></listitem>
19896 <listitem><para>Fix problem with checking for wrong type of access privilege in rule query</para></listitem>
19897 <listitem><para>Fix problem with <command>EXCEPT</command> in <command>CREATE RULE</command></para></listitem>
19898 <listitem><para>Prevent problem with dropping temp tables having serial columns</para></listitem>
19899 <listitem><para>Fix replace_vars_with_subplan_refs failure in complex views</para></listitem>
19900 <listitem><para>Fix regexp slowness in single-byte encodings (Tatsuo)</para></listitem>
19901 <listitem><para>Allow qualified type names in <command>CREATE CAST</command>
19902 and <command> DROP CAST</command></para></listitem>
19903 <listitem><para>Accept <function>SETOF type[]</function>, which formerly had to
19904 be written <function>SETOF _type</function></para></listitem>
19905 <listitem><para>Fix <application>pg_dump</application> core dump in some cases with procedural languages</para></listitem>
19906 <listitem><para>Force ISO datestyle in <application>pg_dump</application> output, for portability (Oliver)</para></listitem>
19907 <listitem><para><application>pg_dump</application> failed to handle error return
19908 from <function>lo_read</function> (Oleg Drokin)</para></listitem>
19909 <listitem><para><application>pg_dumpall</application> failed with groups having no members (Nick Eskelinen)</para></listitem>
19910 <listitem><para><application>pg_dumpall</application> failed to recognize --globals-only switch</para></listitem>
19911 <listitem><para>pg_restore failed to restore blobs if -X disable-triggers is specified</para></listitem>
19912 <listitem><para>Repair intrafunction memory leak in plpgsql</para></listitem>
19913 <listitem><para>pltcl's <command>elog</command> command dumped core if given wrong parameters (Ian Harding)</para></listitem>
19914 <listitem><para>plpython used wrong value of <envar>atttypmod</envar> (Brad McLean)</para></listitem>
19915 <listitem><para>Fix improper quoting of boolean values in Python interface (D'Arcy)</para></listitem>
19916 <listitem><para>Added <function>addDataType()</function> method to PGConnection interface for JDBC</para></listitem>
19917 <listitem><para>Fixed various problems with updateable ResultSets for JDBC (Shawn Green)</para></listitem>
19918 <listitem><para>Fixed various problems with DatabaseMetaData for JDBC (Kris Jurka, Peter Royal)</para></listitem>
19919 <listitem><para>Fixed problem with parsing table ACLs in JDBC</para></listitem>
19920 <listitem><para>Better error message for character set conversion problems in JDBC</para></listitem>
19921 </itemizedlist>
19922 </sect2>
19923 </sect1>
19926 <sect1 id="release-7-3-2">
19927 <title>Release 7.3.2</title>
19929 <note>
19930 <title>Release date</title>
19931 <simpara>2003-02-04</simpara>
19932 </note>
19934 <para>
19935 This release contains a variety of fixes for version 7.3.1.
19936 </para>
19939 <sect2>
19940 <title>Migration to Version 7.3.2</title>
19942 <para>
19943 A dump/restore is <emphasis>not</emphasis> required for those
19944 running version 7.3.*.
19945 </para>
19946 </sect2>
19948 <sect2>
19949 <title>Changes</title>
19951 <itemizedlist>
19952 <listitem><para>Restore creation of OID column in CREATE TABLE AS / SELECT INTO</para></listitem>
19953 <listitem><para>Fix <application>pg_dump</> core dump when dumping views having comments</para></listitem>
19954 <listitem><para>Dump DEFERRABLE/INITIALLY DEFERRED constraints properly</para></listitem>
19955 <listitem><para>Fix UPDATE when child table's column numbering differs from parent</para></listitem>
19956 <listitem><para>Increase default value of max_fsm_relations</para></listitem>
19957 <listitem><para>Fix problem when fetching backwards in a cursor for a single-row query</para></listitem>
19958 <listitem><para>Make backward fetch work properly with cursor on SELECT DISTINCT query</para></listitem>
19959 <listitem><para>Fix problems with loading <application>pg_dump</> files containing contrib/lo usage</para></listitem>
19960 <listitem><para>Fix problem with all-numeric user names</para></listitem>
19961 <listitem><para>Fix possible memory leak and core dump during disconnect in libpgtcl</para></listitem>
19962 <listitem><para>Make plpython's spi_execute command handle nulls properly (Andrew Bosma)</para></listitem>
19963 <listitem><para>Adjust plpython error reporting so that its regression test passes again</para></listitem>
19964 <listitem><para>Work with bison 1.875</para></listitem>
19965 <listitem><para>Handle mixed-case names properly in plpgsql's %type (Neil)</para></listitem>
19966 <listitem><para>Fix core dump in pltcl when executing a query rewritten by a rule</para></listitem>
19967 <listitem><para>Repair array subscript overruns (per report from Yichen Xie)</para></listitem>
19968 <listitem><para>Reduce MAX_TIME_PRECISION from 13 to 10 in floating-point case</para></listitem>
19969 <listitem><para>Correctly case-fold variable names in per-database and per-user settings</para></listitem>
19970 <listitem><para>Fix coredump in plpgsql's RETURN NEXT when SELECT into record returns no rows</para></listitem>
19971 <listitem><para>Fix outdated use of pg_type.typprtlen in python client interface</para></listitem>
19972 <listitem><para>Correctly handle fractional seconds in timestamps in JDBC driver</para></listitem>
19973 <listitem><para>Improve performance of getImportedKeys() in JDBC</para></listitem>
19974 <listitem><para>Make shared-library symlinks work standardly on HPUX (Giles)</para></listitem>
19975 <listitem><para>Repair inconsistent rounding behavior for timestamp, time, interval</para></listitem>
19976 <listitem><para>SSL negotiation fixes (Nathan Mueller)</para></listitem>
19977 <listitem><para>Make libpq's ~/.pgpass feature work when connecting with PQconnectDB</para></listitem>
19978 <listitem><para>Update my2pg, ora2pg</para></listitem>
19979 <listitem><para>Translation updates</para></listitem>
19980 <listitem><para>Add casts between types lo and oid in contrib/lo</para></listitem>
19981 <listitem><para>fastpath code now checks for privilege to call function</para></listitem>
19982 </itemizedlist>
19983 </sect2>
19984 </sect1>
19987 <sect1 id="release-7-3-1">
19988 <title>Release 7.3.1</title>
19990 <note>
19991 <title>Release date</title>
19992 <simpara>2002-12-18</simpara>
19993 </note>
19995 <para>
19996 This release contains a variety of fixes for version 7.3.
19997 </para>
20000 <sect2>
20001 <title>Migration to Version 7.3.1</title>
20003 <para>
20004 A dump/restore is <emphasis>not</emphasis> required for those
20005 running version 7.3. However, it should be noted that the main
20006 <productname>PostgreSQL</productname> interface library, libpq,
20007 has a new major version number for this release, which might require
20008 recompilation of client code in certain cases.
20009 </para>
20010 </sect2>
20012 <sect2>
20013 <title>Changes</title>
20015 <itemizedlist>
20016 <listitem><para>Fix a core dump of COPY TO when client/server encodings don't match (Tom)</para></listitem>
20017 <listitem><para>Allow <application>pg_dump</> to work with pre-7.2 servers (Philip)</para></listitem>
20018 <listitem><para>contrib/adddepend fixes (Tom)</para></listitem>
20019 <listitem><para>Fix problem with deletion of per-user/per-database config settings (Tom)</para></listitem>
20020 <listitem><para>contrib/vacuumlo fix (Tom)</para></listitem>
20021 <listitem><para>Allow 'password' encryption even when pg_shadow contains MD5 passwords (Bruce)</para></listitem>
20022 <listitem><para>contrib/dbmirror fix (Steven Singer)</para></listitem>
20023 <listitem><para>Optimizer fixes (Tom)</para></listitem>
20024 <listitem><para>contrib/tsearch fixes (Teodor Sigaev, Magnus)</para></listitem>
20025 <listitem><para>Allow locale names to be mixed case (Nicolai Tufar)</para></listitem>
20026 <listitem><para>Increment libpq library's major version number (Bruce)</para></listitem>
20027 <listitem><para>pg_hba.conf error reporting fixes (Bruce, Neil)</para></listitem>
20028 <listitem><para>Add SCO Openserver 5.0.4 as a supported platform (Bruce)</para></listitem>
20029 <listitem><para>Prevent EXPLAIN from crashing server (Tom)</para></listitem>
20030 <listitem><para>SSL fixes (Nathan Mueller)</para></listitem>
20031 <listitem><para>Prevent composite column creation via ALTER TABLE (Tom)</para></listitem>
20032 </itemizedlist>
20033 </sect2>
20034 </sect1>
20037 <sect1 id="release-7-3">
20038 <title>Release 7.3</title>
20040 <note>
20041 <title>Release date</title>
20042 <simpara>2002-11-27</simpara>
20043 </note>
20045 <sect2>
20046 <title>Overview</title>
20048 <para>
20049 Major changes in this release:
20050 </para>
20052 <variablelist>
20053 <varlistentry>
20054 <term>Schemas</term>
20055 <listitem>
20056 <para>
20057 Schemas allow users to create objects in separate namespaces,
20058 so two people or applications can have tables with the same
20059 name. There is also a public schema for shared tables.
20060 Table/index creation can be restricted by removing privileges
20061 on the public schema.
20062 </para>
20063 </listitem>
20064 </varlistentry>
20066 <varlistentry>
20067 <term>Drop Column</term>
20068 <listitem>
20069 <para>
20070 <productname>PostgreSQL</productname> now supports the
20071 <literal>ALTER TABLE ... DROP COLUMN</literal> functionality.
20072 </para>
20073 </listitem>
20074 </varlistentry>
20076 <varlistentry>
20077 <term>Table Functions</term>
20078 <listitem>
20079 <para>
20080 Functions returning multiple rows and/or multiple columns are
20081 now much easier to use than before. You can call such a
20082 <quote>table function</quote> in the <literal>SELECT</literal>
20083 <literal>FROM</literal> clause, treating its output like a
20084 table. Also, <application>PL/pgSQL</application> functions can
20085 now return sets.
20086 </para>
20087 </listitem>
20088 </varlistentry>
20090 <varlistentry>
20091 <term>Prepared Queries</term>
20092 <listitem>
20093 <para>
20094 <productname>PostgreSQL</productname> now supports prepared
20095 queries, for improved performance.
20096 </para>
20097 </listitem>
20098 </varlistentry>
20100 <varlistentry>
20101 <term>Dependency Tracking</term>
20102 <listitem>
20103 <para>
20104 <productname>PostgreSQL</productname> now records object
20105 dependencies, which allows improvements in many areas.
20106 <command>DROP</command> statements now take either
20107 <literal>CASCADE</> or <literal>RESTRICT</> to control whether
20108 dependent objects are also dropped.
20109 </para>
20110 </listitem>
20111 </varlistentry>
20113 <varlistentry>
20114 <term>Privileges</term>
20115 <listitem>
20116 <para>
20117 Functions and procedural languages now have privileges, and
20118 functions can be defined to run with the privileges of their
20119 creator.
20120 </para>
20121 </listitem>
20122 </varlistentry>
20124 <varlistentry>
20125 <term>Internationalization</term>
20126 <listitem>
20127 <para>
20128 Both multibyte and locale support are now always enabled.
20129 </para>
20130 </listitem>
20131 </varlistentry>
20133 <varlistentry>
20134 <term>Logging</term>
20135 <listitem>
20136 <para>
20137 A variety of logging options have been enhanced.
20138 </para>
20139 </listitem>
20140 </varlistentry>
20142 <varlistentry>
20143 <term>Interfaces</term>
20144 <listitem>
20145 <para>
20146 A large number of interfaces have been moved to <ulink
20147 url="http://gborg.postgresql.org">http://gborg.postgresql.org</>
20148 where they can be developed and released independently.
20149 </para>
20150 </listitem>
20151 </varlistentry>
20153 <varlistentry>
20154 <term>Functions/Identifiers</term>
20155 <listitem>
20156 <para>
20157 By default, functions can now take up to 32 parameters, and
20158 identifiers can be up to 63 bytes long. Also, <literal>OPAQUE</>
20159 is now deprecated: there are specific <quote>pseudo-datatypes</>
20160 to represent each of the former meanings of <literal>OPAQUE</>
20161 in function argument and result types.
20162 </para>
20163 </listitem>
20164 </varlistentry>
20166 </variablelist>
20167 </sect2>
20169 <sect2>
20170 <title>Migration to Version 7.3</title>
20172 <para>
20173 A dump/restore using <application>pg_dump</> is required for those
20174 wishing to migrate data from any previous release. If your
20175 application examines the system catalogs, additional changes will
20176 be required due to the introduction of schemas in 7.3; for more
20177 information, see: <ulink
20178 url="http://developer.postgresql.org/~momjian/upgrade_tips_7.3"></>.
20179 </para>
20181 <para>
20182 Observe the following incompatibilities:
20183 </para>
20185 <itemizedlist>
20186 <listitem>
20187 <para>
20188 Pre-6.3 clients are no longer supported.
20189 </para>
20190 </listitem>
20192 <listitem>
20193 <para>
20194 <filename>pg_hba.conf</filename> now has a column for the user
20195 name and additional features. Existing files need to be
20196 adjusted.
20197 </para>
20198 </listitem>
20200 <listitem>
20201 <para>
20202 Several <filename>postgresql.conf</filename> logging parameters
20203 have been renamed.
20204 </para>
20205 </listitem>
20207 <listitem>
20208 <para>
20209 <literal>LIMIT #,#</literal> has been disabled; use
20210 <literal>LIMIT # OFFSET #</literal>.
20211 </para>
20212 </listitem>
20214 <listitem>
20215 <para>
20216 <command>INSERT</command> statements with column lists must
20217 specify a value for each specified column. For example,
20218 <literal>INSERT INTO tab (col1, col2) VALUES ('val1')</literal>
20219 is now invalid. It's still allowed to supply fewer columns than
20220 expected if the <command>INSERT</command> does not have a column list.
20221 </para>
20222 </listitem>
20224 <listitem>
20225 <para>
20226 <type>serial</type> columns are no longer automatically
20227 <literal>UNIQUE</>; thus, an index will not automatically be
20228 created.
20229 </para>
20230 </listitem>
20232 <listitem>
20233 <para>
20234 A <command>SET</command> command inside an aborted transaction
20235 is now rolled back.
20236 </para>
20237 </listitem>
20239 <listitem>
20240 <para>
20241 <command>COPY</command> no longer considers missing trailing
20242 columns to be null. All columns need to be specified.
20243 (However, one can achieve a similar effect by specifying a
20244 column list in the <command>COPY</command> command.)
20245 </para>
20246 </listitem>
20248 <listitem>
20249 <para>
20250 The data type <type>timestamp</type> is now equivalent to
20251 <type>timestamp without time zone</type>, instead of
20252 <type>timestamp with time zone</type>.
20253 </para>
20254 </listitem>
20256 <listitem>
20257 <para>
20258 Pre-7.3 databases loaded into 7.3 will not have the new object
20259 dependencies for <type>serial</type> columns, unique
20260 constraints, and foreign keys. See the directory
20261 <filename>contrib/adddepend/</filename> for a detailed
20262 description and a script that will add such dependencies.
20263 </para>
20264 </listitem>
20266 <listitem>
20267 <para>
20268 An empty string (<literal>''</literal>) is no longer allowed as
20269 the input into an integer field. Formerly, it was silently
20270 interpreted as 0.
20271 </para>
20272 </listitem>
20274 </itemizedlist>
20275 </sect2>
20277 <sect2>
20278 <title>Changes</title>
20280 <sect3>
20281 <title>Server Operation</title>
20282 <itemizedlist>
20283 <listitem><para>Add pg_locks view to show locks (Neil)</para></listitem>
20284 <listitem><para>Security fixes for password negotiation memory allocation (Neil)</para></listitem>
20285 <listitem><para>Remove support for version 0 FE/BE protocol (<productname>PostgreSQL</productname> 6.2 and earlier) (Tom)</para></listitem>
20286 <listitem><para>Reserve the last few backend slots for superusers, add parameter superuser_reserved_connections to control this (Nigel J. Andrews)</para></listitem>
20287 </itemizedlist>
20288 </sect3>
20290 <sect3>
20291 <title>Performance</title>
20292 <itemizedlist>
20293 <listitem><para>Improve startup by calling localtime() only once (Tom)</para></listitem>
20294 <listitem><para>Cache system catalog information in flat files for faster startup (Tom)</para></listitem>
20295 <listitem><para>Improve caching of index information (Tom)</para></listitem>
20296 <listitem><para>Optimizer improvements (Tom, Fernando Nasser)</para></listitem>
20297 <listitem><para>Catalog caches now store failed lookups (Tom)</para></listitem>
20298 <listitem><para>Hash function improvements (Neil)</para></listitem>
20299 <listitem><para>Improve performance of query tokenization and network handling (Peter)</para></listitem>
20300 <listitem><para>Speed improvement for large object restore (Mario Weilguni)</para></listitem>
20301 <listitem><para>Mark expired index entries on first lookup, saving later heap fetches (Tom)</para></listitem>
20302 <listitem><para>Avoid excessive NULL bitmap padding (Manfred Koizar)</para></listitem>
20303 <listitem><para>Add BSD-licensed qsort() for Solaris, for performance (Bruce)</para></listitem>
20304 <listitem><para>Reduce per-row overhead by four bytes (Manfred Koizar)</para></listitem>
20305 <listitem><para>Fix GEQO optimizer bug (Neil Conway)</para></listitem>
20306 <listitem><para>Make WITHOUT OID actually save four bytes per row (Manfred Koizar)</para></listitem>
20307 <listitem><para>Add default_statistics_target variable to specify ANALYZE buckets (Neil)</para></listitem>
20308 <listitem><para>Use local buffer cache for temporary tables so no WAL overhead (Tom)</para></listitem>
20309 <listitem><para>Improve free space map performance on large tables (Stephen Marshall, Tom)</para></listitem>
20310 <listitem><para>Improved WAL write concurrency (Tom)</para></listitem>
20311 </itemizedlist>
20312 </sect3>
20314 <sect3>
20315 <title>Privileges</title>
20316 <itemizedlist>
20317 <listitem><para>Add privileges on functions and procedural languages (Peter)</para></listitem>
20318 <listitem><para>Add OWNER to CREATE DATABASE so superusers can create databases on behalf of unprivileged users (Gavin Sherry, Tom)</para></listitem>
20319 <listitem><para>Add new object privilege bits EXECUTE and USAGE (Tom)</para></listitem>
20320 <listitem><para>Add SET SESSION AUTHORIZATION DEFAULT and RESET SESSION AUTHORIZATION (Tom)</para></listitem>
20321 <listitem><para>Allow functions to be executed with the privilege of the function owner (Peter)</para></listitem>
20322 </itemizedlist>
20323 </sect3>
20325 <sect3>
20326 <title>Server Configuration</title>
20327 <itemizedlist>
20328 <listitem><para>Server log messages now tagged with LOG, not DEBUG (Bruce)</para></listitem>
20329 <listitem><para>Add user column to pg_hba.conf (Bruce)</para></listitem>
20330 <listitem><para>Have log_connections output two lines in log file (Tom)</para></listitem>
20331 <listitem><para>Remove debug_level from postgresql.conf, now server_min_messages (Bruce)</para></listitem>
20332 <listitem><para>New ALTER DATABASE/USER ... SET command for per-user/database initialization (Peter)</para></listitem>
20333 <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>
20334 <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>
20335 <listitem><para>Remove secondary password file capability and pg_password utility (Bruce)</para></listitem>
20336 <listitem><para>Add variable db_user_namespace for database-local user names (Bruce)</para></listitem>
20337 <listitem><para>SSL improvements (Bear Giles)</para></listitem>
20338 <listitem><para>Make encryption of stored passwords the default (Bruce)</para></listitem>
20339 <listitem><para>Allow pg_statistics to be reset by calling pg_stat_reset() (Christopher)</para></listitem>
20340 <listitem><para>Add log_duration parameter (Bruce)</para></listitem>
20341 <listitem><para>Rename debug_print_query to log_statement (Bruce)</para></listitem>
20342 <listitem><para>Rename show_query_stats to show_statement_stats (Bruce)</para></listitem>
20343 <listitem><para>Add param log_min_error_statement to print commands to logs on error (Gavin)</para></listitem>
20344 </itemizedlist>
20345 </sect3>
20347 <sect3>
20348 <title>Queries</title>
20349 <itemizedlist>
20350 <listitem><para>Make cursors insensitive, meaning their contents do not change (Tom)</para></listitem>
20351 <listitem><para>Disable LIMIT #,# syntax; now only LIMIT # OFFSET # supported (Bruce)</para></listitem>
20352 <listitem><para>Increase identifier length to 63 (Neil, Bruce)</para></listitem>
20353 <listitem><para>UNION fixes for merging &gt;= 3 columns of different lengths (Tom)</para></listitem>
20354 <listitem><para>Add DEFAULT key word to INSERT, e.g., INSERT ... (..., DEFAULT, ...) (Rod)</para></listitem>
20355 <listitem><para>Allow views to have default values using ALTER COLUMN ... SET DEFAULT (Neil)</para></listitem>
20356 <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>
20357 <listitem><para>Fix for join aliases (Tom)</para></listitem>
20358 <listitem><para>Fix for FULL OUTER JOINs (Tom)</para></listitem>
20359 <listitem><para>Improve reporting of invalid identifier and location (Tom, Gavin)</para></listitem>
20360 <listitem><para>Fix OPEN cursor(args) (Tom)</para></listitem>
20361 <listitem><para>Allow 'ctid' to be used in a view and currtid(viewname) (Hiroshi)</para></listitem>
20362 <listitem><para>Fix for CREATE TABLE AS with UNION (Tom)</para></listitem>
20363 <listitem><para>SQL99 syntax improvements (Thomas)</para></listitem>
20364 <listitem><para>Add statement_timeout variable to cancel queries (Bruce)</para></listitem>
20365 <listitem><para>Allow prepared queries with PREPARE/EXECUTE (Neil)</para></listitem>
20366 <listitem><para>Allow FOR UPDATE to appear after LIMIT/OFFSET (Bruce)</para></listitem>
20367 <listitem><para>Add variable autocommit (Tom, David Van Wie)</para></listitem>
20368 </itemizedlist>
20369 </sect3>
20371 <sect3>
20372 <title>Object Manipulation</title>
20373 <itemizedlist>
20374 <listitem><para>Make equals signs optional in CREATE DATABASE (Gavin Sherry)</para></listitem>
20375 <listitem><para>Make ALTER TABLE OWNER change index ownership too (Neil)</para></listitem>
20376 <listitem><para>New ALTER TABLE tabname ALTER COLUMN colname SET STORAGE controls TOAST storage, compression (John Gray)</para></listitem>
20377 <listitem><para>Add schema support, CREATE/DROP SCHEMA (Tom)</para></listitem>
20378 <listitem><para>Create schema for temporary tables (Tom)</para></listitem>
20379 <listitem><para>Add variable search_path for schema search (Tom)</para></listitem>
20380 <listitem><para>Add ALTER TABLE SET/DROP NOT NULL (Christopher)</para></listitem>
20381 <listitem><para>New CREATE FUNCTION volatility levels (Tom)</para></listitem>
20382 <listitem><para>Make rule names unique only per table (Tom)</para></listitem>
20383 <listitem><para>Add 'ON tablename' clause to DROP RULE and COMMENT ON RULE (Tom)</para></listitem>
20384 <listitem><para>Add ALTER TRIGGER RENAME (Joe)</para></listitem>
20385 <listitem><para>New current_schema() and current_schemas() inquiry functions (Tom)</para></listitem>
20386 <listitem><para>Allow functions to return multiple rows (table functions) (Joe)</para></listitem>
20387 <listitem><para>Make WITH optional in CREATE DATABASE, for consistency (Bruce)</para></listitem>
20388 <listitem><para>Add object dependency tracking (Rod, Tom)</para></listitem>
20389 <listitem><para>Add RESTRICT/CASCADE to DROP commands (Rod)</para></listitem>
20390 <listitem><para>Add ALTER TABLE DROP for non-CHECK CONSTRAINT (Rod)</para></listitem>
20391 <listitem><para>Autodestroy sequence on DROP of table with SERIAL (Rod)</para></listitem>
20392 <listitem><para>Prevent column dropping if column is used by foreign key (Rod)</para></listitem>
20393 <listitem><para>Automatically drop constraints/functions when object is dropped (Rod)</para></listitem>
20394 <listitem><para>Add CREATE/DROP OPERATOR CLASS (Bill Studenmund, Tom)</para></listitem>
20395 <listitem><para>Add ALTER TABLE DROP COLUMN (Christopher, Tom, Hiroshi)</para></listitem>
20396 <listitem><para>Prevent inherited columns from being removed or renamed (Alvaro Herrera)</para></listitem>
20397 <listitem><para>Fix foreign key constraints to not error on intermediate database states (Stephan)</para></listitem>
20398 <listitem><para>Propagate column or table renaming to foreign key constraints</para></listitem>
20399 <listitem><para>Add CREATE OR REPLACE VIEW (Gavin, Neil, Tom)</para></listitem>
20400 <listitem><para>Add CREATE OR REPLACE RULE (Gavin, Neil, Tom)</para></listitem>
20401 <listitem><para>Have rules execute alphabetically, returning more predictable values (Tom)</para></listitem>
20402 <listitem><para>Triggers are now fired in alphabetical order (Tom)</para></listitem>
20403 <listitem><para>Add /contrib/adddepend to handle pre-7.3 object dependencies (Rod)</para></listitem>
20404 <listitem><para>Allow better casting when inserting/updating values (Tom)</para></listitem>
20405 </itemizedlist>
20406 </sect3>
20408 <sect3>
20409 <title>Utility Commands</title>
20410 <itemizedlist>
20411 <listitem><para>Have COPY TO output embedded carriage returns and newlines as \r and \n (Tom)</para></listitem>
20412 <listitem><para>Allow DELIMITER in COPY FROM to be 8-bit clean (Tatsuo)</para></listitem>
20413 <listitem><para>Make <application>pg_dump</> use ALTER TABLE ADD PRIMARY KEY, for performance (Neil)</para></listitem>
20414 <listitem><para>Disable brackets in multistatement rules (Bruce)</para></listitem>
20415 <listitem><para>Disable VACUUM from being called inside a function (Bruce)</para></listitem>
20416 <listitem><para>Allow dropdb and other scripts to use identifiers with spaces (Bruce)</para></listitem>
20417 <listitem><para>Restrict database comment changes to the current database</para></listitem>
20418 <listitem><para>Allow comments on operators, independent of the underlying function (Rod)</para></listitem>
20419 <listitem><para>Rollback SET commands in aborted transactions (Tom)</para></listitem>
20420 <listitem><para>EXPLAIN now outputs as a query (Tom)</para></listitem>
20421 <listitem><para>Display condition expressions and sort keys in EXPLAIN (Tom)</para></listitem>
20422 <listitem><para>Add 'SET LOCAL var = value' to set configuration variables for a single transaction (Tom)</para></listitem>
20423 <listitem><para>Allow ANALYZE to run in a transaction (Bruce)</para></listitem>
20424 <listitem><para>Improve COPY syntax using new WITH clauses, keep backward compatibility (Bruce)</para></listitem>
20425 <listitem><para>Fix <application>pg_dump</> to consistently output tags in non-ASCII dumps (Bruce)</para></listitem>
20426 <listitem><para>Make foreign key constraints clearer in dump file (Rod)</para></listitem>
20427 <listitem><para>Add COMMENT ON CONSTRAINT (Rod)</para></listitem>
20428 <listitem><para>Allow COPY TO/FROM to specify column names (Brent Verner)</para></listitem>
20429 <listitem><para>Dump UNIQUE and PRIMARY KEY constraints as ALTER TABLE (Rod)</para></listitem>
20430 <listitem><para>Have SHOW output a query result (Joe)</para></listitem>
20431 <listitem><para>Generate failure on short COPY lines rather than pad NULLs (Neil)</para></listitem>
20432 <listitem><para>Fix CLUSTER to preserve all table attributes (Alvaro Herrera)</para></listitem>
20433 <listitem><para>New pg_settings table to view/modify GUC settings (Joe)</para></listitem>
20434 <listitem><para>Add smart quoting, portability improvements to <application>pg_dump</> output (Peter)</para></listitem>
20435 <listitem><para>Dump serial columns out as SERIAL (Tom)</para></listitem>
20436 <listitem><para>Enable large file support, &gt;2G for <application>pg_dump</> (Peter, Philip Warner, Bruce)</para></listitem>
20437 <listitem><para>Disallow TRUNCATE on tables that are involved in referential constraints (Rod)</para></listitem>
20438 <listitem><para>Have TRUNCATE also auto-truncate the toast table of the relation (Tom)</para></listitem>
20439 <listitem><para>Add clusterdb utility that will auto-cluster an entire database based on previous CLUSTER operations (Alvaro Herrera)</para></listitem>
20440 <listitem><para>Overhaul pg_dumpall (Peter)</para></listitem>
20441 <listitem><para>Allow REINDEX of TOAST tables (Tom)</para></listitem>
20442 <listitem><para>Implemented START TRANSACTION, per SQL99 (Neil)</para></listitem>
20443 <listitem><para>Fix rare index corruption when a page split affects bulk delete (Tom)</para></listitem>
20444 <listitem><para>Fix ALTER TABLE ... ADD COLUMN for inheritance (Alvaro Herrera)</para></listitem>
20445 </itemizedlist>
20446 </sect3>
20448 <sect3>
20449 <title>Data Types and Functions</title>
20450 <itemizedlist>
20451 <listitem><para>Fix factorial(0) to return 1 (Bruce)</para></listitem>
20452 <listitem><para>Date/time/timezone improvements (Thomas)</para></listitem>
20453 <listitem><para>Fix for array slice extraction (Tom)</para></listitem>
20454 <listitem><para>Fix extract/date_part to report proper microseconds for timestamp (Tatsuo)</para></listitem>
20455 <listitem><para>Allow text_substr() and bytea_substr() to read TOAST values more efficiently (John Gray)</para></listitem>
20456 <listitem><para>Add domain support (Rod)</para></listitem>
20457 <listitem><para>Make WITHOUT TIME ZONE the default for TIMESTAMP and TIME data types (Thomas)</para></listitem>
20458 <listitem><para>Allow alternate storage scheme of 64-bit integers for date/time types using --enable-integer-datetimes in configure (Thomas)</para></listitem>
20459 <listitem><para>Make timezone(timestamptz) return timestamp rather than a string (Thomas)</para></listitem>
20460 <listitem><para>Allow fractional seconds in date/time types for dates prior to 1BC (Thomas)</para></listitem>
20461 <listitem><para>Limit timestamp data types to 6 decimal places of precision (Thomas)</para></listitem>
20462 <listitem><para>Change timezone conversion functions from timetz() to timezone() (Thomas)</para></listitem>
20463 <listitem><para>Add configuration variables datestyle and timezone (Tom)</para></listitem>
20464 <listitem><para>Add OVERLAY(), which allows substitution of a substring in a string (Thomas)</para></listitem>
20465 <listitem><para>Add SIMILAR TO (Thomas, Tom)</para></listitem>
20466 <listitem><para>Add regular expression SUBSTRING(string FROM pat FOR escape) (Thomas)</para></listitem>
20467 <listitem><para>Add LOCALTIME and LOCALTIMESTAMP functions (Thomas)</para></listitem>
20468 <listitem><para>Add named composite types using CREATE TYPE typename AS (column) (Joe)</para></listitem>
20469 <listitem><para>Allow composite type definition in the table alias clause (Joe)</para></listitem>
20470 <listitem><para>Add new API to simplify creation of C language table functions (Joe)</para></listitem>
20471 <listitem><para>Remove ODBC-compatible empty parentheses from calls to SQL99 functions for which these parentheses do not match the standard (Thomas)</para></listitem>
20472 <listitem><para>Allow macaddr data type to accept 12 hex digits with no separators (Mike Wyer)</para></listitem>
20473 <listitem><para>Add CREATE/DROP CAST (Peter)</para></listitem>
20474 <listitem><para>Add IS DISTINCT FROM operator (Thomas)</para></listitem>
20475 <listitem><para>Add SQL99 TREAT() function, synonym for CAST() (Thomas)</para></listitem>
20476 <listitem><para>Add pg_backend_pid() to output backend pid (Bruce)</para></listitem>
20477 <listitem><para>Add IS OF / IS NOT OF type predicate (Thomas)</para></listitem>
20478 <listitem><para>Allow bit string constants without fully-specified length (Thomas)</para></listitem>
20479 <listitem><para>Allow conversion between 8-byte integers and bit strings (Thomas)</para></listitem>
20480 <listitem><para>Implement hex literal conversion to bit string literal (Thomas)</para></listitem>
20481 <listitem><para>Allow table functions to appear in the FROM clause (Joe)</para></listitem>
20482 <listitem><para>Increase maximum number of function parameters to 32 (Bruce)</para></listitem>
20483 <listitem><para>No longer automatically create index for SERIAL column (Tom)</para></listitem>
20484 <listitem><para>Add current_database() (Rod)</para></listitem>
20485 <listitem><para>Fix cash_words() to not overflow buffer (Tom)</para></listitem>
20486 <listitem><para>Add functions replace(), split_part(), to_hex() (Joe)</para></listitem>
20487 <listitem><para>Fix LIKE for bytea as a right-hand argument (Joe)</para></listitem>
20488 <listitem><para>Prevent crashes caused by SELECT cash_out(2) (Tom)</para></listitem>
20489 <listitem><para>Fix to_char(1,'FM999.99') to return a period (Karel)</para></listitem>
20490 <listitem><para>Fix trigger/type/language functions returning OPAQUE to return proper type (Tom)</para></listitem>
20491 </itemizedlist>
20492 </sect3>
20494 <sect3>
20495 <title>Internationalization</title>
20496 <itemizedlist>
20497 <listitem><para>Add additional encodings: Korean (JOHAB), Thai (WIN874), Vietnamese (TCVN), Arabic (WIN1256), Simplified Chinese (GBK), Korean (UHC) (Eiji Tokuya)</para></listitem>
20498 <listitem><para>Enable locale support by default (Peter)</para></listitem>
20499 <listitem><para>Add locale variables (Peter)</para></listitem>
20500 <listitem><para>Escape byes &gt;= 0x7f for multibyte in PQescapeBytea/PQunescapeBytea (Tatsuo)</para></listitem>
20501 <listitem><para>Add locale awareness to regular expression character classes</para></listitem>
20502 <listitem><para>Enable multibyte support by default (Tatsuo)</para></listitem>
20503 <listitem><para>Add GB18030 multibyte support (Bill Huang)</para></listitem>
20504 <listitem><para>Add CREATE/DROP CONVERSION, allowing loadable encodings (Tatsuo, Kaori)</para></listitem>
20505 <listitem><para>Add pg_conversion table (Tatsuo)</para></listitem>
20506 <listitem><para>Add SQL99 CONVERT() function (Tatsuo)</para></listitem>
20507 <listitem><para>pg_dumpall, pg_controldata, and pg_resetxlog now national-language aware (Peter)</para></listitem>
20508 <listitem><para>New and updated translations</para></listitem>
20509 </itemizedlist>
20510 </sect3>
20512 <sect3>
20513 <title>Server-side Languages</title>
20514 <itemizedlist>
20515 <listitem><para>Allow recursive SQL function (Peter)</para></listitem>
20516 <listitem><para>Change PL/Tcl build to use configured compiler and Makefile.shlib (Peter)</para></listitem>
20517 <listitem><para>Overhaul the PL/pgSQL FOUND variable to be more Oracle-compatible (Neil, Tom)</para></listitem>
20518 <listitem><para>Allow PL/pgSQL to handle quoted identifiers (Tom)</para></listitem>
20519 <listitem><para>Allow set-returning PL/pgSQL functions (Neil)</para></listitem>
20520 <listitem><para>Make PL/pgSQL schema-aware (Joe)</para></listitem>
20521 <listitem><para>Remove some memory leaks (Nigel J. Andrews, Tom)</para></listitem>
20522 </itemizedlist>
20523 </sect3>
20525 <sect3>
20526 <title>psql</title>
20527 <itemizedlist>
20528 <listitem><para>Don't lowercase psql \connect database name for 7.2.0 compatibility (Tom)</para></listitem>
20529 <listitem><para>Add psql \timing to time user queries (Greg Sabino Mullane)</para></listitem>
20530 <listitem><para>Have psql \d show index information (Greg Sabino Mullane)</para></listitem>
20531 <listitem><para>New psql \dD shows domains (Jonathan Eisler)</para></listitem>
20532 <listitem><para>Allow psql to show rules on views (Paul ?)</para></listitem>
20533 <listitem><para>Fix for psql variable substitution (Tom)</para></listitem>
20534 <listitem><para>Allow psql \d to show temporary table structure (Tom)</para></listitem>
20535 <listitem><para>Allow psql \d to show foreign keys (Rod)</para></listitem>
20536 <listitem><para>Fix \? to honor \pset pager (Bruce)</para></listitem>
20537 <listitem><para>Have psql reports its version number on startup (Tom)</para></listitem>
20538 <listitem><para>Allow \copy to specify column names (Tom)</para></listitem>
20539 </itemizedlist>
20540 </sect3>
20542 <sect3>
20543 <title>libpq</title>
20544 <itemizedlist>
20545 <listitem><para>Add ~/.pgpass to store host/user password combinations (Alvaro Herrera)</para></listitem>
20546 <listitem><para>Add PQunescapeBytea() function to libpq (Patrick Welche)</para></listitem>
20547 <listitem><para>Fix for sending large queries over non-blocking connections (Bernhard Herzog)</para></listitem>
20548 <listitem><para>Fix for libpq using timers on Win9X (David Ford)</para></listitem>
20549 <listitem><para>Allow libpq notify to handle servers with different-length identifiers (Tom)</para></listitem>
20550 <listitem><para>Add libpq PQescapeString() and PQescapeBytea() to Windows (Bruce)</para></listitem>
20551 <listitem><para>Fix for SSL with non-blocking connections (Jack Bates)</para></listitem>
20552 <listitem><para>Add libpq connection timeout parameter (Denis A Ustimenko)</para></listitem>
20553 </itemizedlist>
20554 </sect3>
20556 <sect3>
20557 <title>JDBC</title>
20558 <itemizedlist>
20559 <listitem><para>Allow JDBC to compile with JDK 1.4 (Dave)</para></listitem>
20560 <listitem><para>Add JDBC 3 support (Barry)</para></listitem>
20561 <listitem><para>Allows JDBC to set loglevel by adding ?loglevel=X to the connection URL (Barry)</para></listitem>
20562 <listitem><para>Add Driver.info() message that prints out the version number (Barry)</para></listitem>
20563 <listitem><para>Add updateable result sets (Raghu Nidagal, Dave)</para></listitem>
20564 <listitem><para>Add support for callable statements (Paul Bethe)</para></listitem>
20565 <listitem><para>Add query cancel capability</para></listitem>
20566 <listitem><para>Add refresh row (Dave)</para></listitem>
20567 <listitem><para>Fix MD5 encryption handling for multibyte servers (Jun Kawai)</para></listitem>
20568 <listitem><para>Add support for prepared statements (Barry)</para></listitem>
20569 </itemizedlist>
20570 </sect3>
20572 <sect3>
20573 <title>Miscellaneous Interfaces</title>
20574 <itemizedlist>
20575 <listitem><para>Fixed ECPG bug concerning octal numbers in single quotes (Michael)</para></listitem>
20576 <listitem><para>Move src/interfaces/libpgeasy to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
20577 <listitem><para>Improve Python interface (Elliot Lee, Andrew Johnson, Greg Copeland)</para></listitem>
20578 <listitem><para>Add libpgtcl connection close event (Gerhard Hintermayer)</para></listitem>
20579 <listitem><para>Move src/interfaces/libpq++ to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
20580 <listitem><para>Move src/interfaces/odbc to http://gborg.postgresql.org (Marc)</para></listitem>
20581 <listitem><para>Move src/interfaces/libpgeasy to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
20582 <listitem><para>Move src/interfaces/perl5 to http://gborg.postgresql.org (Marc, Bruce)</para></listitem>
20583 <listitem><para>Remove src/bin/pgaccess from main tree, now at http://www.pgaccess.org (Bruce)</para></listitem>
20584 <listitem><para>Add pg_on_connection_loss command to libpgtcl (Gerhard Hintermayer, Tom)</para></listitem>
20585 </itemizedlist>
20586 </sect3>
20588 <sect3>
20589 <title>Source Code</title>
20590 <itemizedlist>
20591 <listitem><para>Fix for parallel make (Peter)</para></listitem>
20592 <listitem><para>AIX fixes for linking Tcl (Andreas Zeugswetter)</para></listitem>
20593 <listitem><para>Allow PL/Perl to build under Cygwin (Jason Tishler)</para></listitem>
20594 <listitem><para>Improve MIPS compiles (Peter, Oliver Elphick)</para></listitem>
20595 <listitem><para>Require Autoconf version 2.53 (Peter)</para></listitem>
20596 <listitem><para>Require readline and zlib by default in configure (Peter)</para></listitem>
20597 <listitem><para>Allow Solaris to use Intimate Shared Memory (ISM), for performance (Scott Brunza, P.J. Josh Rovero)</para></listitem>
20598 <listitem><para>Always enable syslog in compile, remove --enable-syslog option (Tatsuo)</para></listitem>
20599 <listitem><para>Always enable multibyte in compile, remove --enable-multibyte option (Tatsuo)</para></listitem>
20600 <listitem><para>Always enable locale in compile, remove --enable-locale option (Peter)</para></listitem>
20601 <listitem><para>Fix for Win9x DLL creation (Magnus Naeslund)</para></listitem>
20602 <listitem><para>Fix for link() usage by WAL code on Windows, BeOS (Jason Tishler)</para></listitem>
20603 <listitem><para>Add sys/types.h to c.h, remove from main files (Peter, Bruce)</para></listitem>
20604 <listitem><para>Fix AIX hang on SMP machines (Tomoyuki Niijima)</para></listitem>
20605 <listitem><para>AIX SMP hang fix (Tomoyuki Niijima)</para></listitem>
20606 <listitem><para>Fix pre-1970 date handling on newer glibc libraries (Tom)</para></listitem>
20607 <listitem><para>Fix PowerPC SMP locking (Tom)</para></listitem>
20608 <listitem><para>Prevent gcc -ffast-math from being used (Peter, Tom)</para></listitem>
20609 <listitem><para>Bison &gt;= 1.50 now required for developer builds</para></listitem>
20610 <listitem><para>Kerberos 5 support now builds with Heimdal (Peter)</para></listitem>
20611 <listitem><para>Add appendix in the User's Guide which lists SQL features (Thomas)</para></listitem>
20612 <listitem><para>Improve loadable module linking to use RTLD_NOW (Tom)</para></listitem>
20613 <listitem><para>New error levels WARNING, INFO, LOG, DEBUG[1-5] (Bruce)</para></listitem>
20614 <listitem><para>New src/port directory holds replaced libc functions (Peter, Bruce)</para></listitem>
20615 <listitem><para>New pg_namespace system catalog for schemas (Tom)</para></listitem>
20616 <listitem><para>Add pg_class.relnamespace for schemas (Tom)</para></listitem>
20617 <listitem><para>Add pg_type.typnamespace for schemas (Tom)</para></listitem>
20618 <listitem><para>Add pg_proc.pronamespace for schemas (Tom)</para></listitem>
20619 <listitem><para>Restructure aggregates to have pg_proc entries (Tom)</para></listitem>
20620 <listitem><para>System relations now have their own namespace, pg_* test not required (Fernando Nasser)</para></listitem>
20621 <listitem><para>Rename TOAST index names to be *_index rather than *_idx (Neil)</para></listitem>
20622 <listitem><para>Add namespaces for operators, opclasses (Tom)</para></listitem>
20623 <listitem><para>Add additional checks to server control file (Thomas)</para></listitem>
20624 <listitem><para>New Polish FAQ (Marcin Mazurek)</para></listitem>
20625 <listitem><para>Add Posix semaphore support (Tom)</para></listitem>
20626 <listitem><para>Document need for reindex (Bruce)</para></listitem>
20627 <listitem><para>Rename some internal identifiers to simplify Windows compile (Jan, Katherine Ward)</para></listitem>
20628 <listitem><para>Add documentation on computing disk space (Bruce)</para></listitem>
20629 <listitem><para>Remove KSQO from GUC (Bruce)</para></listitem>
20630 <listitem><para>Fix memory leak in rtree (Kenneth Been)</para></listitem>
20631 <listitem><para>Modify a few error messages for consistency (Bruce)</para></listitem>
20632 <listitem><para>Remove unused system table columns (Peter)</para></listitem>
20633 <listitem><para>Make system columns NOT NULL where appropriate (Tom)</para></listitem>
20634 <listitem><para>Clean up use of sprintf in favor of snprintf() (Neil, Jukka Holappa)</para></listitem>
20635 <listitem><para>Remove OPAQUE and create specific subtypes (Tom)</para></listitem>
20636 <listitem><para>Cleanups in array internal handling (Joe, Tom)</para></listitem>
20637 <listitem><para>Disallow pg_atoi('') (Bruce)</para></listitem>
20638 <listitem><para>Remove parameter wal_files because WAL files are now recycled (Bruce)</para></listitem>
20639 <listitem><para>Add version numbers to heap pages (Tom)</para></listitem>
20640 </itemizedlist>
20641 </sect3>
20643 <sect3>
20644 <title>Contrib</title>
20645 <itemizedlist>
20646 <listitem><para>Allow inet arrays in /contrib/array (Neil)</para></listitem>
20647 <listitem><para>GiST fixes (Teodor Sigaev, Neil)</para></listitem>
20648 <listitem><para>Upgrade /contrib/mysql</para></listitem>
20649 <listitem><para>Add /contrib/dbsize which shows table sizes without vacuum (Peter)</para></listitem>
20650 <listitem><para>Add /contrib/intagg, integer aggregator routines (mlw)</para></listitem>
20651 <listitem><para>Improve /contrib/oid2name (Neil, Bruce)</para></listitem>
20652 <listitem><para>Improve /contrib/tsearch (Oleg, Teodor Sigaev)</para></listitem>
20653 <listitem><para>Cleanups of /contrib/rserver (Alexey V. Borzov)</para></listitem>
20654 <listitem><para>Update /contrib/oracle conversion utility (Gilles Darold)</para></listitem>
20655 <listitem><para>Update /contrib/dblink (Joe)</para></listitem>
20656 <listitem><para>Improve options supported by /contrib/vacuumlo (Mario Weilguni)</para></listitem>
20657 <listitem><para>Improvements to /contrib/intarray (Oleg, Teodor Sigaev, Andrey Oktyabrski)</para></listitem>
20658 <listitem><para>Add /contrib/reindexdb utility (Shaun Thomas)</para></listitem>
20659 <listitem><para>Add indexing to /contrib/isbn_issn (Dan Weston)</para></listitem>
20660 <listitem><para>Add /contrib/dbmirror (Steven Singer)</para></listitem>
20661 <listitem><para>Improve /contrib/pgbench (Neil)</para></listitem>
20662 <listitem><para>Add /contrib/tablefunc table function examples (Joe)</para></listitem>
20663 <listitem><para>Add /contrib/ltree data type for tree structures (Teodor Sigaev, Oleg Bartunov)</para></listitem>
20664 <listitem><para>Move /contrib/pg_controldata, pg_resetxlog into main tree (Bruce)</para></listitem>
20665 <listitem><para>Fixes to /contrib/cube (Bruno Wolff)</para></listitem>
20666 <listitem><para>Improve /contrib/fulltextindex (Christopher)</para></listitem>
20667 </itemizedlist>
20668 </sect3>
20670 </sect2>
20671 </sect1>
20673 <sect1 id="release-7-2-8">
20674 <title>Release 7.2.8</title>
20676 <note>
20677 <title>Release date</title>
20678 <simpara>2005-05-09</simpara>
20679 </note>
20681 <para>
20682 This release contains a variety of fixes from 7.2.7, including one
20683 security-related issue.
20684 </para>
20686 <sect2>
20687 <title>Migration to Version 7.2.8</title>
20689 <para>
20690 A dump/restore is not required for those running 7.2.X.
20691 </para>
20692 </sect2>
20694 <sect2>
20695 <title>Changes</title>
20697 <itemizedlist>
20698 <listitem><para>Repair ancient race condition that allowed a transaction to be
20699 seen as committed for some purposes (eg SELECT FOR UPDATE) slightly sooner
20700 than for other purposes</para>
20701 <para>This is an extremely serious bug since it could lead to apparent
20702 data inconsistencies being briefly visible to applications.</para></listitem>
20703 <listitem><para>Repair race condition between relation extension and
20704 VACUUM</para>
20705 <para>This could theoretically have caused loss of a page's worth of
20706 freshly-inserted data, although the scenario seems of very low probability.
20707 There are no known cases of it having caused more than an Assert failure.
20708 </para></listitem>
20709 <listitem><para>Fix <function>EXTRACT(EPOCH)</> for
20710 <type>TIME WITH TIME ZONE</> values</para></listitem>
20711 <listitem><para>Additional buffer overrun checks in plpgsql
20712 (Neil)</para></listitem>
20713 <listitem><para>Fix pg_dump to dump index names and trigger names containing
20714 <literal>%</> correctly (Neil)</para></listitem>
20715 <listitem><para>Prevent <function>to_char(interval)</> from dumping core for
20716 month-related formats</para></listitem>
20717 <listitem><para>Fix <filename>contrib/pgcrypto</> for newer OpenSSL builds
20718 (Marko Kreen)</para></listitem>
20719 </itemizedlist>
20721 </sect2>
20722 </sect1>
20724 <sect1 id="release-7-2-7">
20725 <title>Release 7.2.7</title>
20727 <note>
20728 <title>Release date</title>
20729 <simpara>2005-01-31</simpara>
20730 </note>
20732 <para>
20733 This release contains a variety of fixes from 7.2.6, including several
20734 security-related issues.
20735 </para>
20737 <sect2>
20738 <title>Migration to Version 7.2.7</title>
20740 <para>
20741 A dump/restore is not required for those running 7.2.X.
20742 </para>
20743 </sect2>
20745 <sect2>
20746 <title>Changes</title>
20748 <itemizedlist>
20749 <listitem><para>Disallow <command>LOAD</> to non-superusers</para>
20750 <para>
20751 On platforms that will automatically execute initialization functions of a
20752 shared library (this includes at least Windows and ELF-based Unixen),
20753 <command>LOAD</> can be used to make the server execute arbitrary code.
20754 Thanks to NGS Software for reporting this.</para></listitem>
20755 <listitem><para>Add needed STRICT marking to some contrib functions (Kris
20756 Jurka)</para></listitem>
20757 <listitem><para>Avoid buffer overrun when plpgsql cursor declaration has too
20758 many parameters (Neil)</para></listitem>
20759 <listitem><para>Fix planning error for FULL and RIGHT outer joins</para>
20760 <para>
20761 The result of the join was mistakenly supposed to be sorted the same as the
20762 left input. This could not only deliver mis-sorted output to the user, but
20763 in case of nested merge joins could give outright wrong answers.
20764 </para></listitem>
20765 <listitem><para>Fix display of negative intervals in SQL and GERMAN
20766 datestyles</para></listitem>
20767 </itemizedlist>
20769 </sect2>
20770 </sect1>
20772 <sect1 id="release-7-2-6">
20773 <title>Release 7.2.6</title>
20775 <note>
20776 <title>Release date</title>
20777 <simpara>2004-10-22</simpara>
20778 </note>
20780 <para>
20781 This release contains a variety of fixes from 7.2.5.
20782 </para>
20785 <sect2>
20786 <title>Migration to Version 7.2.6</title>
20788 <para>
20789 A dump/restore is not required for those running 7.2.X.
20790 </para>
20791 </sect2>
20793 <sect2>
20794 <title>Changes</title>
20796 <itemizedlist>
20797 <listitem><para>Repair possible failure to update hint bits on disk</para>
20798 <para>
20799 Under rare circumstances this oversight could lead to
20800 <quote>could not access transaction status</> failures, which qualifies
20801 it as a potential-data-loss bug.
20802 </para></listitem>
20803 <listitem><para>Ensure that hashed outer join does not miss tuples</para>
20804 <para>
20805 Very large left joins using a hash join plan could fail to output unmatched
20806 left-side rows given just the right data distribution.
20807 </para></listitem>
20808 <listitem><para>Disallow running pg_ctl as root</para>
20809 <para>
20810 This is to guard against any possible security issues.
20811 </para></listitem>
20812 <listitem><para>Avoid using temp files in /tmp in make_oidjoins_check</para>
20813 <para>
20814 This has been reported as a security issue, though it's hardly worthy of
20815 concern since there is no reason for non-developers to use this script anyway.
20816 </para></listitem>
20817 <listitem><para>Update to newer versions of Bison</para></listitem>
20818 </itemizedlist>
20820 </sect2>
20821 </sect1>
20823 <sect1 id="release-7-2-5">
20824 <title>Release 7.2.5</title>
20826 <note>
20827 <title>Release date</title>
20828 <simpara>2004-08-16</simpara>
20829 </note>
20831 <para>
20832 This release contains a variety of fixes from 7.2.4.
20833 </para>
20836 <sect2>
20837 <title>Migration to Version 7.2.5</title>
20839 <para>
20840 A dump/restore is not required for those running 7.2.X.
20841 </para>
20842 </sect2>
20844 <sect2>
20845 <title>Changes</title>
20847 <itemizedlist>
20848 <listitem><para>Prevent possible loss of committed transactions during crash</para>
20849 <para>
20850 Due to insufficient interlocking between transaction commit and checkpointing,
20851 it was possible for transactions committed just before the most recent
20852 checkpoint to be lost, in whole or in part, following a database crash and
20853 restart. This is a serious bug that has existed
20854 since <productname>PostgreSQL</productname> 7.1.
20855 </para></listitem>
20856 <listitem><para>Fix corner case for btree search in parallel with first root page split</para></listitem>
20857 <listitem><para>Fix buffer overrun in <function>to_ascii</function> (Guido Notari)</para></listitem>
20858 <listitem><para>Fix core dump in deadlock detection on machines where char is unsigned</para></listitem>
20859 <listitem><para>Fix failure to respond to <command>pg_ctl stop -m fast</command> after Async_NotifyHandler runs</para></listitem>
20860 <listitem><para>Repair memory leaks in pg_dump</para></listitem>
20861 <listitem><para>Avoid conflict with system definition of <function>isblank()</function> function or macro</para></listitem>
20862 </itemizedlist>
20863 </sect2>
20864 </sect1>
20866 <sect1 id="release-7-2-4">
20867 <title>Release 7.2.4</title>
20869 <note>
20870 <title>Release date</title>
20871 <simpara>2003-01-30</simpara>
20872 </note>
20874 <para>
20875 This release contains a variety of fixes for version 7.2.3,
20876 including fixes to prevent possible data loss.
20877 </para>
20879 <sect2>
20880 <title>Migration to Version 7.2.4</title>
20882 <para>
20883 A dump/restore is <emphasis>not</emphasis> required for those
20884 running version 7.2.*.
20885 </para>
20886 </sect2>
20888 <sect2>
20889 <title>Changes</title>
20891 <itemizedlist>
20892 <listitem><para>Fix some additional cases of VACUUM "No one parent tuple was found" error</para></listitem>
20893 <listitem><para>Prevent VACUUM from being called inside a function (Bruce)</para></listitem>
20894 <listitem><para>Ensure pg_clog updates are sync'd to disk before marking checkpoint complete</para></listitem>
20895 <listitem><para>Avoid integer overflow during large hash joins</para></listitem>
20896 <listitem><para>Make GROUP commands work when pg_group.grolist is large enough to be toasted</para></listitem>
20897 <listitem><para>Fix errors in datetime tables; some timezone names weren't being recognized</para></listitem>
20898 <listitem><para>Fix integer overflows in circle_poly(), path_encode(), path_add() (Neil)</para></listitem>
20899 <listitem><para>Repair long-standing logic errors in lseg_eq(), lseg_ne(), lseg_center()</para></listitem>
20900 </itemizedlist>
20901 </sect2>
20902 </sect1>
20905 <sect1 id="release-7-2-3">
20906 <title>Release 7.2.3</title>
20908 <note>
20909 <title>Release date</title>
20910 <simpara>2002-10-01</simpara>
20911 </note>
20913 <para>
20914 This release contains a variety of fixes for version 7.2.2,
20915 including fixes to prevent possible data loss.
20916 </para>
20918 <sect2>
20919 <title>Migration to Version 7.2.3</title>
20921 <para>
20922 A dump/restore is <emphasis>not</emphasis> required for those
20923 running version 7.2.*.
20924 </para>
20925 </sect2>
20927 <sect2>
20928 <title>Changes</title>
20930 <itemizedlist>
20931 <listitem><para>Prevent possible compressed transaction log loss (Tom)</para></listitem>
20932 <listitem><para>Prevent non-superuser from increasing most recent vacuum info (Tom)</para></listitem>
20933 <listitem><para>Handle pre-1970 date values in newer versions of glibc (Tom)</para></listitem>
20934 <listitem><para>Fix possible hang during server shutdown</para></listitem>
20935 <listitem><para>Prevent spinlock hangs on SMP PPC machines (Tomoyuki Niijima)</para></listitem>
20936 <listitem><para>Fix <application>pg_dump</> to properly dump FULL JOIN USING (Tom)</para></listitem>
20937 </itemizedlist>
20938 </sect2>
20939 </sect1>
20942 <sect1 id="release-7-2-2">
20943 <title>Release 7.2.2</title>
20945 <note>
20946 <title>Release date</title>
20947 <simpara>2002-08-23</simpara>
20948 </note>
20950 <para>
20951 This release contains a variety of fixes for version 7.2.1.
20952 </para>
20954 <sect2>
20955 <title>Migration to Version 7.2.2</title>
20957 <para>
20958 A dump/restore is <emphasis>not</emphasis> required for those
20959 running version 7.2.*.
20960 </para>
20961 </sect2>
20963 <sect2>
20964 <title>Changes</title>
20966 <itemizedlist>
20967 <listitem><para>Allow EXECUTE of "CREATE TABLE AS ... SELECT" in PL/pgSQL (Tom)</para></listitem>
20968 <listitem><para>Fix for compressed transaction log id wraparound (Tom)</para></listitem>
20969 <listitem><para>Fix PQescapeBytea/PQunescapeBytea so that they handle bytes &gt; 0x7f (Tatsuo)</para></listitem>
20970 <listitem><para>Fix for psql and <application>pg_dump</> crashing when invoked with non-existent long options (Tatsuo)</para></listitem>
20971 <listitem><para>Fix crash when invoking geometric operators (Tom)</para></listitem>
20972 <listitem><para>Allow OPEN cursor(args) (Tom)</para></listitem>
20973 <listitem><para>Fix for rtree_gist index build (Teodor)</para></listitem>
20974 <listitem><para>Fix for dumping user-defined aggregates (Tom)</para></listitem>
20975 <listitem><para>contrib/intarray fixes (Oleg)</para></listitem>
20976 <listitem><para>Fix for complex UNION/EXCEPT/INTERSECT queries using parens (Tom)</para></listitem>
20977 <listitem><para>Fix to pg_convert (Tatsuo)</para></listitem>
20978 <listitem><para>Fix for crash with long DATA strings (Thomas, Neil)</para></listitem>
20979 <listitem><para>Fix for repeat(), lpad(), rpad() and long strings (Neil)</para></listitem>
20980 </itemizedlist>
20981 </sect2>
20982 </sect1>
20985 <sect1 id="release-7-2-1">
20986 <title>Release 7.2.1</title>
20988 <note>
20989 <title>Release date</title>
20990 <simpara>2002-03-21</simpara>
20991 </note>
20993 <para>
20994 This release contains a variety of fixes for version 7.2.
20995 </para>
20997 <sect2>
20998 <title>Migration to Version 7.2.1</title>
21000 <para>
21001 A dump/restore is <emphasis>not</emphasis> required for those
21002 running version 7.2.
21003 </para>
21004 </sect2>
21006 <sect2>
21007 <title>Changes</title>
21009 <itemizedlist>
21010 <listitem><para>Ensure that sequence counters do not go backwards after a crash (Tom)</para></listitem>
21011 <listitem><para>Fix pgaccess kanji-conversion key binding (Tatsuo)</para></listitem>
21012 <listitem><para>Optimizer improvements (Tom)</para></listitem>
21013 <listitem><para>Cash I/O improvements (Tom)</para></listitem>
21014 <listitem><para>New Russian FAQ</para></listitem>
21015 <listitem><para>Compile fix for missing AuthBlockSig (Heiko)</para></listitem>
21016 <listitem><para>Additional time zones and time zone fixes (Thomas)</para></listitem>
21017 <listitem><para>Allow psql \connect to handle mixed case database and user names (Tom)</para></listitem>
21018 <listitem><para>Return proper OID on command completion even with ON INSERT rules (Tom)</para></listitem>
21019 <listitem><para>Allow COPY FROM to use 8-bit DELIMITERS (Tatsuo)</para></listitem>
21020 <listitem><para>Fix bug in extract/date_part for milliseconds/microseconds (Tatsuo)</para></listitem>
21021 <listitem><para>Improve handling of multiple UNIONs with different lengths (Tom)</para></listitem>
21022 <listitem><para>contrib/btree_gist improvements (Teodor Sigaev)</para></listitem>
21023 <listitem><para>contrib/tsearch dictionary improvements, see README.tsearch for an additional installation step (Thomas T. Thai, Teodor Sigaev)</para></listitem>
21024 <listitem><para>Fix for array subscripts handling (Tom)</para></listitem>
21025 <listitem><para>Allow EXECUTE of "CREATE TABLE AS ... SELECT" in PL/pgSQL (Tom)</para></listitem>
21026 </itemizedlist>
21027 </sect2>
21028 </sect1>
21031 <sect1 id="release-7-2">
21032 <title>Release 7.2</title>
21034 <note>
21035 <title>Release date</title>
21036 <simpara>2002-02-04</simpara>
21037 </note>
21039 <sect2>
21040 <title>Overview</title>
21042 <para>
21043 This release improves <productname>PostgreSQL</> for use in
21044 high-volume applications.
21045 </para>
21047 <para>
21048 Major changes in this release:
21049 </para>
21051 <variablelist>
21052 <varlistentry>
21053 <term>VACUUM</term>
21054 <listitem>
21055 <para>
21056 Vacuuming no longer locks tables, thus allowing normal user
21057 access during the vacuum. A new <command>VACUUM FULL</>
21058 command does old-style vacuum by locking the table and
21059 shrinking the on-disk copy of the table.
21060 </para>
21061 </listitem>
21062 </varlistentry>
21064 <varlistentry>
21065 <term>Transactions</term>
21066 <listitem>
21067 <para>
21068 There is no longer a problem with installations that exceed
21069 four billion transactions.
21070 </para>
21071 </listitem>
21072 </varlistentry>
21074 <varlistentry>
21075 <term>OIDs</term>
21076 <listitem>
21077 <para>
21078 OIDs are now optional. Users can now create tables without
21079 OIDs for cases where OID usage is excessive.
21080 </para>
21081 </listitem>
21082 </varlistentry>
21084 <varlistentry>
21085 <term>Optimizer</term>
21086 <listitem>
21087 <para>
21088 The system now computes histogram column statistics during
21089 <command>ANALYZE</>, allowing much better optimizer choices.
21090 </para>
21091 </listitem>
21092 </varlistentry>
21094 <varlistentry>
21095 <term>Security</term>
21096 <listitem>
21097 <para>
21098 A new MD5 encryption option allows more secure storage and
21099 transfer of passwords. A new Unix-domain socket
21100 authentication option is available on Linux and BSD systems.
21101 </para>
21102 </listitem>
21103 </varlistentry>
21105 <varlistentry>
21106 <term>Statistics</term>
21107 <listitem>
21108 <para>
21109 Administrators can use the new table access statistics module
21110 to get fine-grained information about table and index usage.
21111 </para>
21112 </listitem>
21113 </varlistentry>
21115 <varlistentry>
21116 <term>Internationalization</term>
21117 <listitem>
21118 <para>
21119 Program and library messages can now be displayed in several
21120 languages.
21121 </para>
21122 </listitem>
21123 </varlistentry>
21125 </variablelist>
21126 </sect2>
21128 <sect2>
21129 <title>Migration to Version 7.2</title>
21131 <para>
21132 A dump/restore using <command>pg_dump</command> is required for
21133 those wishing to migrate data from any previous release.
21134 </para>
21136 <para>
21137 Observe the following incompatibilities:
21138 </para>
21140 <itemizedlist>
21141 <listitem>
21142 <para>
21143 The semantics of the <command>VACUUM</command> command have
21144 changed in this release. You might wish to update your
21145 maintenance procedures accordingly.
21146 </para>
21147 </listitem>
21149 <listitem>
21150 <para>
21151 In this release, comparisons using <literal>= NULL</literal>
21152 will always return false (or NULL, more precisely). Previous
21153 releases automatically transformed this syntax to <literal>IS
21154 NULL</literal>. The old behavior can be re-enabled using a
21155 <filename>postgresql.conf</filename> parameter.
21156 </para>
21157 </listitem>
21159 <listitem>
21160 <para>
21161 The <filename>pg_hba.conf</> and <filename>pg_ident.conf</>
21162 configuration is now only reloaded after receiving a
21163 <systemitem>SIGHUP</> signal, not with each connection.
21164 </para>
21165 </listitem>
21167 <listitem>
21168 <para>
21169 The function <filename>octet_length()</> now returns the uncompressed data length.
21170 </para>
21171 </listitem>
21173 <listitem>
21174 <para>
21175 The date/time value <literal>'current'</literal> is no longer
21176 available. You will need to rewrite your applications.
21177 </para>
21178 </listitem>
21180 <listitem>
21181 <para>
21182 The <literal>timestamp()</literal>, <literal>time()</literal>,
21183 and <literal>interval()</literal> functions are no longer
21184 available. Instead of <literal>timestamp()</literal>, use
21185 <literal>timestamp 'string'</literal> or <literal>CAST</literal>.
21186 </para>
21187 </listitem>
21189 </itemizedlist>
21191 <para>
21192 The <literal>SELECT ... LIMIT #,#</literal> syntax will be removed
21193 in the next release. You should change your queries to use
21194 separate LIMIT and OFFSET clauses, e.g. <literal>LIMIT 10 OFFSET
21195 20</literal>.
21196 </para>
21197 </sect2>
21199 <sect2>
21200 <title>Changes</title>
21202 <sect3>
21203 <title>Server Operation</title>
21204 <itemizedlist>
21205 <listitem><para>Create temporary files in a separate directory (Bruce)</para></listitem>
21206 <listitem><para>Delete orphaned temporary files on postmaster startup (Bruce)</para></listitem>
21207 <listitem><para>Added unique indexes to some system tables (Tom)</para></listitem>
21208 <listitem><para>System table operator reorganization (Oleg Bartunov, Teodor Sigaev, Tom)</para></listitem>
21209 <listitem><para>Renamed pg_log to pg_clog (Tom)</para></listitem>
21210 <listitem><para>Enable SIGTERM, SIGQUIT to kill backends (Jan)</para></listitem>
21211 <listitem><para>Removed compile-time limit on number of backends (Tom)</para></listitem>
21212 <listitem><para>Better cleanup for semaphore resource failure (Tatsuo, Tom)</para></listitem>
21213 <listitem><para>Allow safe transaction ID wraparound (Tom)</para></listitem>
21214 <listitem><para>Removed OIDs from some system tables (Tom)</para></listitem>
21215 <listitem><para>Removed "triggered data change violation" error check (Tom)</para></listitem>
21216 <listitem><para>SPI portal creation of prepared/saved plans (Jan)</para></listitem>
21217 <listitem><para>Allow SPI column functions to work for system columns (Tom)</para></listitem>
21218 <listitem><para>Long value compression improvement (Tom)</para></listitem>
21219 <listitem><para>Statistics collector for table, index access (Jan)</para></listitem>
21220 <listitem><para>Truncate extra-long sequence names to a reasonable value (Tom)</para></listitem>
21221 <listitem><para>Measure transaction times in milliseconds (Thomas)</para></listitem>
21222 <listitem><para>Fix TID sequential scans (Hiroshi)</para></listitem>
21223 <listitem><para>Superuser ID now fixed at 1 (Peter E)</para></listitem>
21224 <listitem><para>New pg_ctl "reload" option (Tom)</para></listitem>
21225 </itemizedlist>
21226 </sect3>
21228 <sect3>
21229 <title>Performance</title>
21230 <itemizedlist>
21231 <listitem><para>Optimizer improvements (Tom)</para></listitem>
21232 <listitem><para>New histogram column statistics for optimizer (Tom)</para></listitem>
21233 <listitem><para>Reuse write-ahead log files rather than discarding them (Tom)</para></listitem>
21234 <listitem><para>Cache improvements (Tom)</para></listitem>
21235 <listitem><para>IS NULL, IS NOT NULL optimizer improvement (Tom)</para></listitem>
21236 <listitem><para>Improve lock manager to reduce lock contention (Tom)</para></listitem>
21237 <listitem><para>Keep relcache entries for index access support functions (Tom)</para></listitem>
21238 <listitem><para>Allow better selectivity with NaN and infinities in NUMERIC (Tom)</para></listitem>
21239 <listitem><para>R-tree performance improvements (Kenneth Been)</para></listitem>
21240 <listitem><para>B-tree splits more efficient (Tom)</para></listitem>
21241 </itemizedlist>
21242 </sect3>
21244 <sect3>
21245 <title>Privileges</title>
21246 <itemizedlist>
21247 <listitem><para>Change UPDATE, DELETE privileges to be distinct (Peter E)</para></listitem>
21248 <listitem><para>New REFERENCES, TRIGGER privileges (Peter E)</para></listitem>
21249 <listitem><para>Allow GRANT/REVOKE to/from more than one user at a time (Peter E)</para></listitem>
21250 <listitem><para>New has_table_privilege() function (Joe Conway)</para></listitem>
21251 <listitem><para>Allow non-superuser to vacuum database (Tom)</para></listitem>
21252 <listitem><para>New SET SESSION AUTHORIZATION command (Peter E)</para></listitem>
21253 <listitem><para>Fix bug in privilege modifications on newly created tables (Tom)</para></listitem>
21254 <listitem><para>Disallow access to pg_statistic for non-superuser, add user-accessible views (Tom)</para></listitem>
21255 </itemizedlist>
21256 </sect3>
21258 <sect3>
21259 <title>Client Authentication</title>
21260 <itemizedlist>
21261 <listitem><para>Fork postmaster before doing authentication to prevent hangs (Peter E)</para></listitem>
21262 <listitem><para>Add ident authentication over Unix domain sockets on Linux, *BSD (Helge Bahmann, Oliver Elphick, Teodor Sigaev, Bruce)</para></listitem>
21263 <listitem><para>Add a password authentication method that uses MD5 encryption (Bruce)</para></listitem>
21264 <listitem><para>Allow encryption of stored passwords using MD5 (Bruce)</para></listitem>
21265 <listitem><para>PAM authentication (Dominic J. Eidson)</para></listitem>
21266 <listitem><para>Load pg_hba.conf and pg_ident.conf only on startup and SIGHUP (Bruce)</para></listitem>
21267 </itemizedlist>
21268 </sect3>
21270 <sect3>
21271 <title>Server Configuration</title>
21272 <itemizedlist>
21273 <listitem><para>Interpretation of some time zone abbreviations as Australian rather than North American now settable at run time (Bruce)</para></listitem>
21274 <listitem><para>New parameter to set default transaction isolation level (Peter E)</para></listitem>
21275 <listitem><para>New parameter to enable conversion of "expr = NULL" into "expr IS NULL", off by default (Peter E)</para></listitem>
21276 <listitem><para>New parameter to control memory usage by VACUUM (Tom)</para></listitem>
21277 <listitem><para>New parameter to set client authentication timeout (Tom)</para></listitem>
21278 <listitem><para>New parameter to set maximum number of open files (Tom)</para></listitem>
21279 </itemizedlist>
21280 </sect3>
21282 <sect3>
21283 <title>Queries</title>
21284 <itemizedlist>
21285 <listitem><para>Statements added by INSERT rules now execute after the INSERT (Jan)</para></listitem>
21286 <listitem><para>Prevent unadorned relation names in target list (Bruce)</para></listitem>
21287 <listitem><para>NULLs now sort after all normal values in ORDER BY (Tom)</para></listitem>
21288 <listitem><para>New IS UNKNOWN, IS NOT UNKNOWN Boolean tests (Tom)</para></listitem>
21289 <listitem><para>New SHARE UPDATE EXCLUSIVE lock mode (Tom)</para></listitem>
21290 <listitem><para>New EXPLAIN ANALYZE command that shows run times and row counts (Martijn van Oosterhout)</para></listitem>
21291 <listitem><para>Fix problem with LIMIT and subqueries (Tom)</para></listitem>
21292 <listitem><para>Fix for LIMIT, DISTINCT ON pushed into subqueries (Tom)</para></listitem>
21293 <listitem><para>Fix nested EXCEPT/INTERSECT (Tom)</para></listitem>
21294 </itemizedlist>
21295 </sect3>
21297 <sect3>
21298 <title>Schema Manipulation</title>
21299 <itemizedlist>
21300 <listitem><para>Fix SERIAL in temporary tables (Bruce)</para></listitem>
21301 <listitem><para>Allow temporary sequences (Bruce)</para></listitem>
21302 <listitem><para>Sequences now use int8 internally (Tom)</para></listitem>
21303 <listitem><para>New SERIAL8 creates int8 columns with sequences, default still SERIAL4 (Tom)</para></listitem>
21304 <listitem><para>Make OIDs optional using WITHOUT OIDS (Tom)</para></listitem>
21305 <listitem><para>Add %TYPE syntax to CREATE TYPE (Ian Lance Taylor)</para></listitem>
21306 <listitem><para>Add ALTER TABLE / DROP CONSTRAINT for CHECK constraints (Christopher Kings-Lynne)</para></listitem>
21307 <listitem><para>New CREATE OR REPLACE FUNCTION to alter existing function (preserving the function OID) (Gavin Sherry)</para></listitem>
21308 <listitem><para>Add ALTER TABLE / ADD [ UNIQUE | PRIMARY ] (Christopher Kings-Lynne)</para></listitem>
21309 <listitem><para>Allow column renaming in views</para></listitem>
21310 <listitem><para>Make ALTER TABLE / RENAME COLUMN update column names of indexes (Brent Verner)</para></listitem>
21311 <listitem><para>Fix for ALTER TABLE / ADD CONSTRAINT ... CHECK with inherited tables (Stephan Szabo)</para></listitem>
21312 <listitem><para>ALTER TABLE RENAME update foreign-key trigger arguments correctly (Brent Verner)</para></listitem>
21313 <listitem><para>DROP AGGREGATE and COMMENT ON AGGREGATE now accept an aggtype (Tom)</para></listitem>
21314 <listitem><para>Add automatic return type data casting for SQL functions (Tom)</para></listitem>
21315 <listitem><para>Allow GiST indexes to handle NULLs and multikey indexes (Oleg Bartunov, Teodor Sigaev, Tom)</para></listitem>
21316 <listitem><para>Enable partial indexes (Martijn van Oosterhout)</para></listitem>
21317 </itemizedlist>
21318 </sect3>
21320 <sect3>
21321 <title>Utility Commands</title>
21322 <itemizedlist>
21323 <listitem><para>Add RESET ALL, SHOW ALL (Marko Kreen)</para></listitem>
21324 <listitem><para>CREATE/ALTER USER/GROUP now allow options in any order (Vince)</para></listitem>
21325 <listitem><para>Add LOCK A, B, C functionality (Neil Padgett)</para></listitem>
21326 <listitem><para>New ENCRYPTED/UNENCRYPTED option to CREATE/ALTER USER (Bruce)</para></listitem>
21327 <listitem><para>New light-weight VACUUM does not lock table; old semantics are available as VACUUM FULL (Tom)</para></listitem>
21328 <listitem><para>Disable COPY TO/FROM on views (Bruce)</para></listitem>
21329 <listitem><para>COPY DELIMITERS string must be exactly one character (Tom)</para></listitem>
21330 <listitem><para>VACUUM warning about index tuples fewer than heap now only appears when appropriate (Martijn van Oosterhout)</para></listitem>
21331 <listitem><para>Fix privilege checks for CREATE INDEX (Tom)</para></listitem>
21332 <listitem><para>Disallow inappropriate use of CREATE/DROP INDEX/TRIGGER/VIEW (Tom)</para></listitem>
21333 </itemizedlist>
21334 </sect3>
21336 <sect3>
21337 <title>Data Types and Functions</title>
21338 <itemizedlist>
21339 <listitem><para>SUM(), AVG(), COUNT() now uses int8 internally for speed (Tom)</para></listitem>
21340 <listitem><para>Add convert(), convert2() (Tatsuo)</para></listitem>
21341 <listitem><para>New function bit_length() (Peter E)</para></listitem>
21342 <listitem><para>Make the "n" in CHAR(n)/VARCHAR(n) represents letters, not bytes (Tatsuo)</para></listitem>
21343 <listitem><para>CHAR(), VARCHAR() now reject strings that are too long (Peter E)</para></listitem>
21344 <listitem><para>BIT VARYING now rejects bit strings that are too long (Peter E)</para></listitem>
21345 <listitem><para>BIT now rejects bit strings that do not match declared size (Peter E)</para></listitem>
21346 <listitem><para>INET, CIDR text conversion functions (Alex Pilosov)</para></listitem>
21347 <listitem><para>INET, CIDR operators &lt;&lt; and &lt;&lt;= indexable (Alex Pilosov)</para></listitem>
21348 <listitem><para>Bytea \### now requires valid three digit octal number</para></listitem>
21349 <listitem><para>Bytea comparison improvements, now supports =, &lt;&gt;, &gt;, &gt;=, &lt;, and &lt;=</para></listitem>
21350 <listitem><para>Bytea now supports B-tree indexes</para></listitem>
21351 <listitem><para>Bytea now supports LIKE, LIKE...ESCAPE, NOT LIKE, NOT LIKE...ESCAPE</para></listitem>
21352 <listitem><para>Bytea now supports concatenation</para></listitem>
21353 <listitem><para>New bytea functions: position, substring, trim, btrim, and length</para></listitem>
21354 <listitem><para>New encode() function mode, "escaped", converts minimally escaped bytea to/from text</para></listitem>
21355 <listitem><para>Add pg_database_encoding_max_length() (Tatsuo)</para></listitem>
21356 <listitem><para>Add pg_client_encoding() function (Tatsuo)</para></listitem>
21357 <listitem><para>now() returns time with millisecond precision (Thomas)</para></listitem>
21358 <listitem><para>New TIMESTAMP WITHOUT TIMEZONE data type (Thomas)</para></listitem>
21359 <listitem><para>Add ISO date/time specification with "T", yyyy-mm-ddThh:mm:ss (Thomas)</para></listitem>
21360 <listitem><para>New xid/int comparison functions (Hiroshi)</para></listitem>
21361 <listitem><para>Add precision to TIME, TIMESTAMP, and INTERVAL data types (Thomas)</para></listitem>
21362 <listitem><para>Modify type coercion logic to attempt binary-compatible functions first (Tom)</para></listitem>
21363 <listitem><para>New encode() function installed by default (Marko Kreen)</para></listitem>
21364 <listitem><para>Improved to_*() conversion functions (Karel Zak)</para></listitem>
21365 <listitem><para>Optimize LIKE/ILIKE when using single-byte encodings (Tatsuo)</para></listitem>
21366 <listitem><para>New functions in contrib/pgcrypto: crypt(), hmac(), encrypt(), gen_salt() (Marko Kreen)</para></listitem>
21367 <listitem><para>Correct description of translate() function (Bruce)</para></listitem>
21368 <listitem><para>Add INTERVAL argument for SET TIME ZONE (Thomas)</para></listitem>
21369 <listitem><para>Add INTERVAL YEAR TO MONTH (etc.) syntax (Thomas)</para></listitem>
21370 <listitem><para>Optimize length functions when using single-byte encodings (Tatsuo)</para></listitem>
21371 <listitem><para>Fix path_inter, path_distance, path_length, dist_ppath to handle closed paths (Curtis Barrett, Tom)</para></listitem>
21372 <listitem><para>octet_length(text) now returns non-compressed length (Tatsuo, Bruce)</para></listitem>
21373 <listitem><para>Handle "July" full name in date/time literals (Greg Sabino Mullane)</para></listitem>
21374 <listitem><para>Some datatype() function calls now evaluated differently</para></listitem>
21375 <listitem><para>Add support for Julian and ISO time specifications (Thomas)</para></listitem>
21376 </itemizedlist>
21377 </sect3>
21379 <sect3>
21380 <title>Internationalization</title>
21381 <itemizedlist>
21382 <listitem><para>National language support in psql, <application>pg_dump</>, libpq, and server (Peter E)</para></listitem>
21383 <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>
21384 <listitem><para>Make trim, ltrim, rtrim, btrim, lpad, rpad, translate multibyte aware (Tatsuo)</para></listitem>
21385 <listitem><para>Add LATIN5,6,7,8,9,10 support (Tatsuo)</para></listitem>
21386 <listitem><para>Add ISO 8859-5,6,7,8 support (Tatsuo)</para></listitem>
21387 <listitem><para>Correct LATIN5 to mean ISO-8859-9, not ISO-8859-5 (Tatsuo)</para></listitem>
21388 <listitem><para>Make mic2ascii() non-ASCII aware (Tatsuo)</para></listitem>
21389 <listitem><para>Reject invalid multibyte character sequences (Tatsuo)</para></listitem>
21390 </itemizedlist>
21391 </sect3>
21393 <sect3>
21394 <title><application>PL/pgSQL</></title>
21395 <itemizedlist>
21396 <listitem><para>Now uses portals for SELECT loops, allowing huge result sets (Jan)</para></listitem>
21397 <listitem><para>CURSOR and REFCURSOR support (Jan)</para></listitem>
21398 <listitem><para>Can now return open cursors (Jan)</para></listitem>
21399 <listitem><para>Add ELSEIF (Klaus Reger)</para></listitem>
21400 <listitem><para>Improve PL/pgSQL error reporting, including location of error (Tom)</para></listitem>
21401 <listitem><para>Allow IS or FOR key words in cursor declaration, for compatibility (Bruce)</para></listitem>
21402 <listitem><para>Fix for SELECT ... FOR UPDATE (Tom)</para></listitem>
21403 <listitem><para>Fix for PERFORM returning multiple rows (Tom)</para></listitem>
21404 <listitem><para>Make PL/pgSQL use the server's type coercion code (Tom)</para></listitem>
21405 <listitem><para>Memory leak fix (Jan, Tom)</para></listitem>
21406 <listitem><para>Make trailing semicolon optional (Tom)</para></listitem>
21407 </itemizedlist>
21408 </sect3>
21410 <sect3>
21411 <title>PL/Perl</title>
21412 <itemizedlist>
21413 <listitem><para>New untrusted PL/Perl (Alex Pilosov)</para></listitem>
21414 <listitem><para>PL/Perl is now built on some platforms even if libperl is not shared (Peter E)</para></listitem>
21415 </itemizedlist>
21416 </sect3>
21418 <sect3>
21419 <title>PL/Tcl</title>
21420 <itemizedlist>
21421 <listitem><para>Now reports errorInfo (Vsevolod Lobko)</para></listitem>
21422 <listitem><para>Add spi_lastoid function (bob@redivi.com)</para></listitem>
21423 </itemizedlist>
21424 </sect3>
21426 <sect3>
21427 <title>PL/Python</title>
21428 <itemizedlist>
21429 <listitem><para>...is new (Andrew Bosma)</para></listitem>
21430 </itemizedlist>
21431 </sect3>
21433 <sect3>
21434 <title><application>psql</></title>
21435 <itemizedlist>
21436 <listitem><para>\d displays indexes in unique, primary groupings (Christopher Kings-Lynne)</para></listitem>
21437 <listitem><para>Allow trailing semicolons in backslash commands (Greg Sabino Mullane)</para></listitem>
21438 <listitem><para>Read password from /dev/tty if possible</para></listitem>
21439 <listitem><para>Force new password prompt when changing user and database (Tatsuo, Tom)</para></listitem>
21440 <listitem><para>Format the correct number of columns for Unicode (Patrice)</para></listitem>
21441 </itemizedlist>
21442 </sect3>
21444 <sect3>
21445 <title><application>libpq</></title>
21446 <itemizedlist>
21447 <listitem><para>New function PQescapeString() to escape quotes in command strings (Florian Weimer)</para></listitem>
21448 <listitem><para>New function PQescapeBytea() escapes binary strings for use as SQL string literals</para></listitem>
21449 </itemizedlist>
21450 </sect3>
21452 <sect3>
21453 <title>JDBC</title>
21454 <itemizedlist>
21455 <listitem><para>Return OID of INSERT (Ken K)</para></listitem>
21456 <listitem><para>Handle more data types (Ken K)</para></listitem>
21457 <listitem><para>Handle single quotes and newlines in strings (Ken K)</para></listitem>
21458 <listitem><para>Handle NULL variables (Ken K)</para></listitem>
21459 <listitem><para>Fix for time zone handling (Barry Lind)</para></listitem>
21460 <listitem><para>Improved Druid support</para></listitem>
21461 <listitem><para>Allow eight-bit characters with non-multibyte server (Barry Lind)</para></listitem>
21462 <listitem><para>Support BIT, BINARY types (Ned Wolpert)</para></listitem>
21463 <listitem><para>Reduce memory usage (Michael Stephens, Dave Cramer)</para></listitem>
21464 <listitem><para>Update DatabaseMetaData (Peter E)</para></listitem>
21465 <listitem><para>Add DatabaseMetaData.getCatalogs() (Peter E)</para></listitem>
21466 <listitem><para>Encoding fixes (Anders Bengtsson)</para></listitem>
21467 <listitem><para>Get/setCatalog methods (Jason Davies)</para></listitem>
21468 <listitem><para>DatabaseMetaData.getColumns() now returns column defaults (Jason Davies)</para></listitem>
21469 <listitem><para>DatabaseMetaData.getColumns() performance improvement (Jeroen van Vianen)</para></listitem>
21470 <listitem><para>Some JDBC1 and JDBC2 merging (Anders Bengtsson)</para></listitem>
21471 <listitem><para>Transaction performance improvements (Barry Lind)</para></listitem>
21472 <listitem><para>Array fixes (Greg Zoller)</para></listitem>
21473 <listitem><para>Serialize addition </para></listitem>
21474 <listitem><para>Fix batch processing (Rene Pijlman)</para></listitem>
21475 <listitem><para>ExecSQL method reorganization (Anders Bengtsson)</para></listitem>
21476 <listitem><para>GetColumn() fixes (Jeroen van Vianen)</para></listitem>
21477 <listitem><para>Fix isWriteable() function (Rene Pijlman)</para></listitem>
21478 <listitem><para>Improved passage of JDBC2 conformance tests (Rene Pijlman)</para></listitem>
21479 <listitem><para>Add bytea type capability (Barry Lind)</para></listitem>
21480 <listitem><para>Add isNullable() (Rene Pijlman)</para></listitem>
21481 <listitem><para>JDBC date/time test suite fixes (Liam Stewart)</para></listitem>
21482 <listitem><para>Fix for SELECT 'id' AS xxx FROM table (Dave Cramer)</para></listitem>
21483 <listitem><para>Fix DatabaseMetaData to show precision properly (Mark Lillywhite)</para></listitem>
21484 <listitem><para>New getImported/getExported keys (Jason Davies)</para></listitem>
21485 <listitem><para>MD5 password encryption support (Jeremy Wohl)</para></listitem>
21486 <listitem><para>Fix to actually use type cache (Ned Wolpert)</para></listitem>
21487 </itemizedlist>
21488 </sect3>
21490 <sect3>
21491 <title>ODBC</title>
21492 <itemizedlist>
21493 <listitem><para>Remove query size limit (Hiroshi)</para></listitem>
21494 <listitem><para>Remove text field size limit (Hiroshi)</para></listitem>
21495 <listitem><para>Fix for SQLPrimaryKeys in multibyte mode (Hiroshi)</para></listitem>
21496 <listitem><para>Allow ODBC procedure calls (Hiroshi)</para></listitem>
21497 <listitem><para>Improve boolean handing (Aidan Mountford)</para></listitem>
21498 <listitem><para>Most configuration options now settable via DSN (Hiroshi)</para></listitem>
21499 <listitem><para>Multibyte, performance fixes (Hiroshi)</para></listitem>
21500 <listitem><para>Allow driver to be used with iODBC or unixODBC (Peter E)</para></listitem>
21501 <listitem><para>MD5 password encryption support (Bruce)</para></listitem>
21502 <listitem><para>Add more compatibility functions to odbc.sql (Peter E)</para></listitem>
21503 </itemizedlist>
21504 </sect3>
21506 <sect3>
21507 <title><application>ECPG</></title>
21508 <itemizedlist>
21509 <listitem><para>EXECUTE ... INTO implemented (Christof Petig)</para></listitem>
21510 <listitem><para>Multiple row descriptor support (e.g. CARDINALITY) (Christof Petig)</para></listitem>
21511 <listitem><para>Fix for GRANT parameters (Lee Kindness)</para></listitem>
21512 <listitem><para>Fix INITIALLY DEFERRED bug</para></listitem>
21513 <listitem><para>Various bug fixes (Michael, Christof Petig)</para></listitem>
21514 <listitem><para>Auto allocation for indicator variable arrays (int *ind_p=NULL)</para></listitem>
21515 <listitem><para>Auto allocation for string arrays (char **foo_pp=NULL)</para></listitem>
21516 <listitem><para>ECPGfree_auto_mem fixed</para></listitem>
21517 <listitem><para>All function names with external linkage are now prefixed by ECPG</para></listitem>
21518 <listitem><para>Fixes for arrays of structures (Michael)</para></listitem>
21519 </itemizedlist>
21520 </sect3>
21522 <sect3>
21523 <title>Misc. Interfaces</title>
21524 <itemizedlist>
21525 <listitem><para>Python fix fetchone() (Gerhard Haring)</para></listitem>
21526 <listitem><para>Use UTF, Unicode in Tcl where appropriate (Vsevolod Lobko, Reinhard Max)</para></listitem>
21527 <listitem><para>Add Tcl COPY TO/FROM (ljb)</para></listitem>
21528 <listitem><para>Prevent output of default index op class in <application>pg_dump</> (Tom)</para></listitem>
21529 <listitem><para>Fix libpgeasy memory leak (Bruce)</para></listitem>
21530 </itemizedlist>
21531 </sect3>
21533 <sect3>
21534 <title>Build and Install</title>
21535 <itemizedlist>
21536 <listitem><para>Configure, dynamic loader, and shared library fixes (Peter E)</para></listitem>
21537 <listitem><para>Fixes in QNX 4 port (Bernd Tegge)</para></listitem>
21538 <listitem><para>Fixes in Cygwin and Windows ports (Jason Tishler, Gerhard Haring, Dmitry Yurtaev, Darko Prenosil, Mikhail Terekhov)</para></listitem>
21539 <listitem><para>Fix for Windows socket communication failures (Magnus, Mikhail Terekhov)</para></listitem>
21540 <listitem><para>Hurd compile fix (Oliver Elphick)</para></listitem>
21541 <listitem><para>BeOS fixes (Cyril Velter)</para></listitem>
21542 <listitem><para>Remove configure --enable-unicode-conversion, now enabled by multibyte (Tatsuo)</para></listitem>
21543 <listitem><para>AIX fixes (Tatsuo, Andreas)</para></listitem>
21544 <listitem><para>Fix parallel make (Peter E)</para></listitem>
21545 <listitem><para>Install SQL language manual pages into OS-specific directories (Peter E)</para></listitem>
21546 <listitem><para>Rename config.h to pg_config.h (Peter E)</para></listitem>
21547 <listitem><para>Reorganize installation layout of header files (Peter E)</para></listitem>
21548 </itemizedlist>
21549 </sect3>
21551 <sect3>
21552 <title>Source Code</title>
21553 <itemizedlist>
21554 <listitem><para>Remove SEP_CHAR (Bruce)</para></listitem>
21555 <listitem><para>New GUC hooks (Tom)</para></listitem>
21556 <listitem><para>Merge GUC and command line handling (Marko Kreen)</para></listitem>
21557 <listitem><para>Remove EXTEND INDEX (Martijn van Oosterhout, Tom)</para></listitem>
21558 <listitem><para>New pgjindent utility to indent java code (Bruce)</para></listitem>
21559 <listitem><para>Remove define of true/false when compiling under C++ (Leandro Fanzone, Tom)</para></listitem>
21560 <listitem><para>pgindent fixes (Bruce, Tom)</para></listitem>
21561 <listitem><para>Replace strcasecmp() with strcmp() where appropriate (Peter E)</para></listitem>
21562 <listitem><para>Dynahash portability improvements (Tom)</para></listitem>
21563 <listitem><para>Add 'volatile' usage in spinlock structures</para></listitem>
21564 <listitem><para>Improve signal handling logic (Tom)</para></listitem>
21565 </itemizedlist>
21566 </sect3>
21568 <sect3>
21569 <title>Contrib</title>
21570 <itemizedlist>
21571 <listitem><para>New contrib/rtree_gist (Oleg Bartunov, Teodor Sigaev)</para></listitem>
21572 <listitem><para>New contrib/tsearch full-text indexing (Oleg, Teodor Sigaev)</para></listitem>
21573 <listitem><para>Add contrib/dblink for remote database access (Joe Conway)</para></listitem>
21574 <listitem><para>contrib/ora2pg Oracle conversion utility (Gilles Darold)</para></listitem>
21575 <listitem><para>contrib/xml XML conversion utility (John Gray)</para></listitem>
21576 <listitem><para>contrib/fulltextindex fixes (Christopher Kings-Lynne)</para></listitem>
21577 <listitem><para>New contrib/fuzzystrmatch with levenshtein and metaphone, soundex merged (Joe Conway)</para></listitem>
21578 <listitem><para>Add contrib/intarray boolean queries, binary search, fixes (Oleg Bartunov)</para></listitem>
21579 <listitem><para>New pg_upgrade utility (Bruce)</para></listitem>
21580 <listitem><para>Add new pg_resetxlog options (Bruce, Tom)</para></listitem>
21581 </itemizedlist>
21582 </sect3>
21583 </sect2>
21584 </sect1>
21587 <sect1 id="release-7-1-3">
21588 <title>Release 7.1.3</title>
21590 <note>
21591 <title>Release date</title>
21592 <simpara>2001-08-15</simpara>
21593 </note>
21595 <sect2>
21596 <title>Migration to Version 7.1.3</title>
21598 <para>
21599 A dump/restore is <emphasis>not</emphasis> required for those running
21600 7.1.X.
21601 </para>
21602 </sect2>
21604 <sect2>
21605 <title>Changes</title>
21607 <para>
21608 <programlisting>
21609 Remove unused WAL segments of large transactions (Tom)
21610 Multiaction rule fix (Tom)
21611 PL/pgSQL memory allocation fix (Jan)
21612 VACUUM buffer fix (Tom)
21613 Regression test fixes (Tom)
21614 pg_dump fixes for GRANT/REVOKE/comments on views, user-defined types (Tom)
21615 Fix subselects with DISTINCT ON or LIMIT (Tom)
21616 BeOS fix
21617 Disable COPY TO/FROM a view (Tom)
21618 Cygwin build (Jason Tishler)
21619 </programlisting>
21620 </para>
21621 </sect2>
21622 </sect1>
21625 <sect1 id="release-7-1-2">
21626 <title>Release 7.1.2</title>
21628 <note>
21629 <title>Release date</title>
21630 <simpara>2001-05-11</simpara>
21631 </note>
21633 <para>
21634 This has one fix from 7.1.1.
21635 </para>
21638 <sect2>
21639 <title>Migration to Version 7.1.2</title>
21641 <para>
21642 A dump/restore is <emphasis>not</emphasis> required for those running
21643 7.1.X.
21644 </para>
21645 </sect2>
21647 <sect2>
21648 <title>Changes</title>
21650 <para>
21651 <programlisting>
21652 Fix PL/pgSQL SELECTs when returning no rows
21653 Fix for psql backslash core dump
21654 Referential integrity privilege fix
21655 Optimizer fixes
21656 pg_dump cleanups
21657 </programlisting>
21658 </para>
21659 </sect2>
21660 </sect1>
21663 <sect1 id="release-7-1-1">
21664 <title>Release 7.1.1</title>
21666 <note>
21667 <title>Release date</title>
21668 <simpara>2001-05-05</simpara>
21669 </note>
21671 <para>
21672 This has a variety of fixes from 7.1.
21673 </para>
21676 <sect2>
21677 <title>Migration to Version 7.1.1</title>
21679 <para>
21680 A dump/restore is <emphasis>not</emphasis> required for those running
21681 7.1.
21682 </para>
21683 </sect2>
21685 <sect2>
21686 <title>Changes</title>
21688 <para>
21689 <programlisting>
21690 Fix for numeric MODULO operator (Tom)
21691 pg_dump fixes (Philip)
21692 pg_dump can dump 7.0 databases (Philip)
21693 readline 4.2 fixes (Peter E)
21694 JOIN fixes (Tom)
21695 AIX, MSWIN, VAX, N32K fixes (Tom)
21696 Multibytes fixes (Tom)
21697 Unicode fixes (Tatsuo)
21698 Optimizer improvements (Tom)
21699 Fix for whole rows in functions (Tom)
21700 Fix for pg_ctl and option strings with spaces (Peter E)
21701 ODBC fixes (Hiroshi)
21702 EXTRACT can now take string argument (Thomas)
21703 Python fixes (Darcy)
21704 </programlisting>
21705 </para>
21706 </sect2>
21707 </sect1>
21710 <sect1 id="release-7-1">
21711 <title>Release 7.1</title>
21713 <note>
21714 <title>Release date</title>
21715 <simpara>2001-04-13</simpara>
21716 </note>
21718 <para>
21719 This release focuses on removing limitations that have existed in the
21720 <productname>PostgreSQL</productname> code for many years.
21721 </para>
21723 <para>
21724 Major changes in this release:
21725 </para>
21727 <variablelist>
21728 <varlistentry>
21729 <term>
21730 Write-ahead Log (WAL)
21731 </term>
21732 <listitem>
21733 <para>
21734 To maintain database consistency in case of an operating system crash,
21735 previous releases of <productname>PostgreSQL</productname> have forced
21736 all data modifications to disk before each transaction commit. With
21737 WAL, only one log file must be flushed to disk, greatly improving
21738 performance. If you have been using -F in previous releases to
21739 disable disk flushes, you might want to consider discontinuing its use.
21740 </para>
21741 </listitem>
21742 </varlistentry>
21744 <varlistentry>
21745 <term>
21746 TOAST
21747 </term>
21748 <listitem>
21749 <para>
21750 TOAST - Previous releases had a compiled-in row length limit,
21751 typically 8k - 32k. This limit made storage of long text fields
21752 difficult. With TOAST, long rows of any length can be stored with good
21753 performance.
21754 </para>
21755 </listitem>
21756 </varlistentry>
21758 <varlistentry>
21759 <term>
21760 Outer Joins
21761 </term>
21762 <listitem>
21763 <para>
21764 We now support outer joins. The UNION/NOT IN
21765 workaround for outer joins is no longer required. We use the SQL92
21766 outer join syntax.
21767 </para>
21768 </listitem>
21769 </varlistentry>
21771 <varlistentry>
21772 <term>
21773 Function Manager
21774 </term>
21775 <listitem>
21776 <para>
21777 The previous C function manager did not
21778 handle null values properly, nor did it support 64-bit <acronym>CPU</acronym>'s (Alpha). The new
21779 function manager does. You can continue using your old custom
21780 functions, but you might want to rewrite them in the future to use the new
21781 function manager call interface.
21782 </para>
21783 </listitem>
21784 </varlistentry>
21786 <varlistentry>
21787 <term>
21788 Complex Queries
21789 </term>
21790 <listitem>
21791 <para>
21792 A large number of complex queries that were
21793 unsupported in previous releases now work. Many combinations of views,
21794 aggregates, UNION, LIMIT, cursors, subqueries, and inherited tables
21795 now work properly. Inherited tables are now accessed by default.
21796 Subqueries in FROM are now supported.
21797 </para>
21798 </listitem>
21799 </varlistentry>
21801 </variablelist>
21803 <sect2>
21804 <title>Migration to Version 7.1</title>
21806 <para>
21807 A dump/restore using pg_dump is required for those wishing to migrate
21808 data from any previous release.
21809 </para>
21810 </sect2>
21812 <sect2>
21813 <title>Changes</title>
21815 <para>
21816 <programlisting>
21817 Bug Fixes
21818 ---------
21819 Many multibyte/Unicode/locale fixes (Tatsuo and others)
21820 More reliable ALTER TABLE RENAME (Tom)
21821 Kerberos V fixes (David Wragg)
21822 Fix for INSERT INTO...SELECT where targetlist has subqueries (Tom)
21823 Prompt username/password on standard error (Bruce)
21824 Large objects inv_read/inv_write fixes (Tom)
21825 Fixes for to_char(), to_date(), to_ascii(), and to_timestamp() (Karel,
21826 Daniel Baldoni)
21827 Prevent query expressions from leaking memory (Tom)
21828 Allow UPDATE of arrays elements (Tom)
21829 Wake up lock waiters during cancel (Hiroshi)
21830 Fix rare cursor crash when using hash join (Tom)
21831 Fix for DROP TABLE/INDEX in rolled-back transaction (Hiroshi)
21832 Fix psql crash from \l+ if MULTIBYTE enabled (Peter E)
21833 Fix truncation of rule names during CREATE VIEW (Ross Reedstrom)
21834 Fix PL/perl (Alex Kapranoff)
21835 Disallow LOCK on views (Mark Hollomon)
21836 Disallow INSERT/UPDATE/DELETE on views (Mark Hollomon)
21837 Disallow DROP RULE, CREATE INDEX, TRUNCATE on views (Mark Hollomon)
21838 Allow PL/pgSQL accept non-ASCII identifiers (Tatsuo)
21839 Allow views to proper handle GROUP BY, aggregates, DISTINCT (Tom)
21840 Fix rare failure with TRUNCATE command (Tom)
21841 Allow UNION/INTERSECT/EXCEPT to be used with ALL, subqueries, views,
21842 DISTINCT, ORDER BY, SELECT...INTO (Tom)
21843 Fix parser failures during aborted transactions (Tom)
21844 Allow temporary relations to properly clean up indexes (Bruce)
21845 Fix VACUUM problem with moving rows in same page (Tom)
21846 Modify pg_dump to better handle user-defined items in template1 (Philip)
21847 Allow LIMIT in VIEW (Tom)
21848 Require cursor FETCH to honor LIMIT (Tom)
21849 Allow PRIMARY/FOREIGN Key definitions on inherited columns (Stephan)
21850 Allow ORDER BY, LIMIT in subqueries (Tom)
21851 Allow UNION in CREATE RULE (Tom)
21852 Make ALTER/DROP TABLE rollback-able (Vadim, Tom)
21853 Store initdb collation in pg_control so collation cannot be changed (Tom)
21854 Fix INSERT...SELECT with rules (Tom)
21855 Fix FOR UPDATE inside views and subselects (Tom)
21856 Fix OVERLAPS operators conform to SQL92 spec regarding NULLs (Tom)
21857 Fix lpad() and rpad() to handle length less than input string (Tom)
21858 Fix use of NOTIFY in some rules (Tom)
21859 Overhaul btree code (Tom)
21860 Fix NOT NULL use in Pl/pgSQL variables (Tom)
21861 Overhaul GIST code (Oleg)
21862 Fix CLUSTER to preserve constraints and column default (Tom)
21863 Improved deadlock detection handling (Tom)
21864 Allow multiple SERIAL columns in a table (Tom)
21865 Prevent occasional index corruption (Vadim)
21867 Enhancements
21868 ------------
21869 Add OUTER JOINs (Tom)
21870 Function manager overhaul (Tom)
21871 Allow ALTER TABLE RENAME on indexes (Tom)
21872 Improve CLUSTER (Tom)
21873 Improve ps status display for more platforms (Peter E, Marc)
21874 Improve CREATE FUNCTION failure message (Ross)
21875 JDBC improvements (Peter, Travis Bauer, Christopher Cain, William Webber,
21876 Gunnar)
21877 Grand Unified Configuration scheme/GUC. Many options can now be set in
21878 data/postgresql.conf, postmaster/postgres flags, or SET commands (Peter E)
21879 Improved handling of file descriptor cache (Tom)
21880 New warning code about auto-created table alias entries (Bruce)
21881 Overhaul initdb process (Tom, Peter E)
21882 Overhaul of inherited tables; inherited tables now accessed by default;
21883 new ONLY key word prevents it (Chris Bitmead, Tom)
21884 ODBC cleanups/improvements (Nick Gorham, Stephan Szabo, Zoltan Kovacs,
21885 Michael Fork)
21886 Allow renaming of temp tables (Tom)
21887 Overhaul memory manager contexts (Tom)
21888 pg_dumpall uses CREATE USER or CREATE GROUP rather using COPY (Peter E)
21889 Overhaul pg_dump (Philip Warner)
21890 Allow pg_hba.conf secondary password file to specify only username (Peter E)
21891 Allow TEMPORARY or TEMP key word when creating temporary tables (Bruce)
21892 New memory leak checker (Karel)
21893 New SET SESSION CHARACTERISTICS (Thomas)
21894 Allow nested block comments (Thomas)
21895 Add WITHOUT TIME ZONE type qualifier (Thomas)
21896 New ALTER TABLE ADD CONSTRAINT (Stephan)
21897 Use NUMERIC accumulators for INTEGER aggregates (Tom)
21898 Overhaul aggregate code (Tom)
21899 New VARIANCE and STDDEV() aggregates
21900 Improve dependency ordering of pg_dump (Philip)
21901 New pg_restore command (Philip)
21902 New pg_dump tar output option (Philip)
21903 New pg_dump of large objects (Philip)
21904 New ESCAPE option to LIKE (Thomas)
21905 New case-insensitive LIKE - ILIKE (Thomas)
21906 Allow functional indexes to use binary-compatible type (Tom)
21907 Allow SQL functions to be used in more contexts (Tom)
21908 New pg_config utility (Peter E)
21909 New PL/pgSQL EXECUTE command which allows dynamic SQL and utility statements
21910 (Jan)
21911 New PL/pgSQL GET DIAGNOSTICS statement for SPI value access (Jan)
21912 New quote_identifiers() and quote_literal() functions (Jan)
21913 New ALTER TABLE table OWNER TO user command (Mark Hollomon)
21914 Allow subselects in FROM, i.e. FROM (SELECT ...) [AS] alias (Tom)
21915 Update PyGreSQL to version 3.1 (D'Arcy)
21916 Store tables as files named by OID (Vadim)
21917 New SQL function setval(seq,val,bool) for use in pg_dump (Philip)
21918 Require DROP VIEW to remove views, no DROP TABLE (Mark)
21919 Allow DROP VIEW view1, view2 (Mark)
21920 Allow multiple objects in DROP INDEX, DROP RULE, and DROP TYPE (Tom)
21921 Allow automatic conversion to/from Unicode (Tatsuo, Eiji)
21922 New /contrib/pgcrypto hashing functions (Marko Kreen)
21923 New pg_dumpall --globals-only option (Peter E)
21924 New CHECKPOINT command for WAL which creates new WAL log file (Vadim)
21925 New AT TIME ZONE syntax (Thomas)
21926 Allow location of Unix domain socket to be configurable (David J. MacKenzie)
21927 Allow postmaster to listen on a specific IP address (David J. MacKenzie)
21928 Allow socket path name to be specified in hostname by using leading slash
21929 (David J. MacKenzie)
21930 Allow CREATE DATABASE to specify template database (Tom)
21931 New utility to convert MySQL schema dumps to SQL92 and PostgreSQL (Thomas)
21932 New /contrib/rserv replication toolkit (Vadim)
21933 New file format for COPY BINARY (Tom)
21934 New /contrib/oid2name to map numeric files to table names (B Palmer)
21935 New "idle in transaction" ps status message (Marc)
21936 Update to pgaccess 0.98.7 (Constantin Teodorescu)
21937 pg_ctl now defaults to -w (wait) on shutdown, new -l (log) option
21938 Add rudimentary dependency checking to pg_dump (Philip)
21940 Types
21941 -----
21942 Fix INET/CIDR type ordering and add new functions (Tom)
21943 Make OID behave as an unsigned type (Tom)
21944 Allow BIGINT as synonym for INT8 (Peter E)
21945 New int2 and int8 comparison operators (Tom)
21946 New BIT and BIT VARYING types (Adriaan Joubert, Tom, Peter E)
21947 CHAR() no longer faster than VARCHAR() because of TOAST (Tom)
21948 New GIST seg/cube examples (Gene Selkov)
21949 Improved round(numeric) handling (Tom)
21950 Fix CIDR output formatting (Tom)
21951 New CIDR abbrev() function (Tom)
21953 Performance
21954 -----------
21955 Write-Ahead Log (WAL) to provide crash recovery with less performance
21956 overhead (Vadim)
21957 ANALYZE stage of VACUUM no longer exclusively locks table (Bruce)
21958 Reduced file seeks (Denis Perchine)
21959 Improve BTREE code for duplicate keys (Tom)
21960 Store all large objects in a single table (Denis Perchine, Tom)
21961 Improve memory allocation performance (Karel, Tom)
21963 Source Code
21964 -----------
21965 New function manager call conventions (Tom)
21966 SGI portability fixes (David Kaelbling)
21967 New configure --enable-syslog option (Peter E)
21968 New BSDI README (Bruce)
21969 configure script moved to top level, not /src (Peter E)
21970 Makefile/configuration/compilation overhaul (Peter E)
21971 New configure --with-python option (Peter E)
21972 Solaris cleanups (Peter E)
21973 Overhaul /contrib Makefiles (Karel)
21974 New OpenSSL configuration option (Magnus, Peter E)
21975 AIX fixes (Andreas)
21976 QNX fixes (Maurizio)
21977 New heap_open(), heap_openr() API (Tom)
21978 Remove colon and semi-colon operators (Thomas)
21979 New pg_class.relkind value for views (Mark Hollomon)
21980 Rename ichar() to chr() (Karel)
21981 New documentation for btrim(), ascii(), chr(), repeat() (Karel)
21982 Fixes for NT/Cygwin (Pete Forman)
21983 AIX port fixes (Andreas)
21984 New BeOS port (David Reid, Cyril Velter)
21985 Add proofreader's changes to docs (Addison-Wesley, Bruce)
21986 New Alpha spinlock code (Adriaan Joubert, Compaq)
21987 UnixWare port overhaul (Peter E)
21988 New Darwin/MacOS X port (Peter Bierman, Bruce Hartzler)
21989 New FreeBSD Alpha port (Alfred)
21990 Overhaul shared memory segments (Tom)
21991 Add IBM S/390 support (Neale Ferguson)
21992 Moved macmanuf to /contrib (Larry Rosenman)
21993 Syslog improvements (Larry Rosenman)
21994 New template0 database that contains no user additions (Tom)
21995 New /contrib/cube and /contrib/seg GIST sample code (Gene Selkov)
21996 Allow NetBSD's libedit instead of readline (Peter)
21997 Improved assembly language source code format (Bruce)
21998 New contrib/pg_logger
21999 New --template option to createdb
22000 New contrib/pg_control utility (Oliver)
22001 New FreeBSD tools ipc_check, start-scripts/freebsd
22002 </programlisting>
22003 </para>
22004 </sect2>
22005 </sect1>
22008 <sect1 id="release-7-0-3">
22009 <title>Release 7.0.3</title>
22011 <note>
22012 <title>Release date</title>
22013 <simpara>2000-11-11</simpara>
22014 </note>
22016 <para>
22017 This has a variety of fixes from 7.0.2.
22018 </para>
22021 <sect2>
22022 <title>Migration to Version 7.0.3</title>
22024 <para>
22025 A dump/restore is <emphasis>not</emphasis> required for those running
22026 7.0.*.
22027 </para>
22028 </sect2>
22030 <sect2>
22031 <title>Changes</title>
22033 <para>
22034 <programlisting>
22035 Jdbc fixes (Peter)
22036 Large object fix (Tom)
22037 Fix lean in COPY WITH OIDS leak (Tom)
22038 Fix backwards-index-scan (Tom)
22039 Fix SELECT ... FOR UPDATE so it checks for duplicate keys (Hiroshi)
22040 Add --enable-syslog to configure (Marc)
22041 Fix abort transaction at backend exit in rare cases (Tom)
22042 Fix for psql \l+ when multibyte enabled (Tatsuo)
22043 Allow PL/pgSQL to accept non ascii identifiers (Tatsuo)
22044 Make vacuum always flush buffers (Tom)
22045 Fix to allow cancel while waiting for a lock (Hiroshi)
22046 Fix for memory allocation problem in user authentication code (Tom)
22047 Remove bogus use of int4out() (Tom)
22048 Fixes for multiple subqueries in COALESCE or BETWEEN (Tom)
22049 Fix for failure of triggers on heap open in certain cases (Jeroen van
22050 Vianen)
22051 Fix for erroneous selectivity of not-equals (Tom)
22052 Fix for erroneous use of strcmp() (Tom)
22053 Fix for bug where storage manager accesses items beyond end of file
22054 (Tom)
22055 Fix to include kernel errno message in all smgr elog messages (Tom)
22056 Fix for '.' not in PATH at build time (SL Baur)
22057 Fix for out-of-file-descriptors error (Tom)
22058 Fix to make pg_dump dump 'iscachable' flag for functions (Tom)
22059 Fix for subselect in targetlist of Append node (Tom)
22060 Fix for mergejoin plans (Tom)
22061 Fix TRUNCATE failure on relations with indexes (Tom)
22062 Avoid database-wide restart on write error (Hiroshi)
22063 Fix nodeMaterial to honor chgParam by recomputing its output (Tom)
22064 Fix VACUUM problem with moving chain of update row versions when source
22065 and destination of a row version lie on the same page (Tom)
22066 Fix user.c CommandCounterIncrement (Tom)
22067 Fix for AM/PM boundary problem in to_char() (Karel Zak)
22068 Fix TIME aggregate handling (Tom)
22069 Fix to_char() to avoid coredump on NULL input (Tom)
22070 Buffer fix (Tom)
22071 Fix for inserting/copying longer multibyte strings into char() data
22072 types (Tatsuo)
22073 Fix for crash of backend, on abort (Tom)
22074 </programlisting>
22075 </para>
22076 </sect2>
22077 </sect1>
22080 <sect1 id="release-7-0-2">
22081 <title>Release 7.0.2</title>
22083 <note>
22084 <title>Release date</title>
22085 <simpara>2000-06-05</simpara>
22086 </note>
22088 <para>
22089 This is a repackaging of 7.0.1 with added documentation.
22090 </para>
22093 <sect2>
22094 <title>Migration to Version 7.0.2</title>
22096 <para>
22097 A dump/restore is <emphasis>not</emphasis> required for those running
22098 7.*.
22099 </para>
22100 </sect2>
22102 <sect2>
22103 <title>Changes</title>
22105 <para>
22106 <programlisting>
22107 Added documentation to tarball.
22108 </programlisting>
22109 </para>
22110 </sect2>
22111 </sect1>
22114 <sect1 id="release-7-0-1">
22115 <title>Release 7.0.1</title>
22117 <note>
22118 <title>Release date</title>
22119 <simpara>2000-06-01</simpara>
22120 </note>
22122 <para>
22123 This is a cleanup release for 7.0.
22124 </para>
22126 <sect2>
22127 <title>Migration to Version 7.0.1</title>
22129 <para>
22130 A dump/restore is <emphasis>not</emphasis> required for those running
22131 7.0.
22132 </para>
22133 </sect2>
22135 <sect2>
22136 <title>Changes</title>
22138 <para>
22139 <programlisting>
22140 Fix many CLUSTER failures (Tom)
22141 Allow ALTER TABLE RENAME works on indexes (Tom)
22142 Fix plpgsql to handle datetime-&gt;timestamp and timespan-&gt;interval (Bruce)
22143 New configure --with-setproctitle switch to use setproctitle() (Marc, Bruce)
22144 Fix the off by one errors in ResultSet from 6.5.3, and more.
22145 jdbc ResultSet fixes (Joseph Shraibman)
22146 optimizer tunings (Tom)
22147 Fix create user for pgaccess
22148 Fix for UNLISTEN failure
22149 IRIX fixes (David Kaelbling)
22150 QNX fixes (Andreas Kardos)
22151 Reduce COPY IN lock level (Tom)
22152 Change libpqeasy to use PQconnectdb() style parameters (Bruce)
22153 Fix pg_dump to handle OID indexes (Tom)
22154 Fix small memory leak (Tom)
22155 Solaris fix for createdb/dropdb (Tatsuo)
22156 Fix for non-blocking connections (Alfred Perlstein)
22157 Fix improper recovery after RENAME TABLE failures (Tom)
22158 Copy pg_ident.conf.sample into /lib directory in install (Bruce)
22159 Add SJIS UDC (NEC selection IBM kanji) support (Eiji Tokuya)
22160 Fix too long syslog message (Tatsuo)
22161 Fix problem with quoted indexes that are too long (Tom)
22162 JDBC ResultSet.getTimestamp() fix (Gregory Krasnow &amp; Floyd Marinescu)
22163 ecpg changes (Michael)
22164 </programlisting>
22165 </para>
22166 </sect2>
22167 </sect1>
22169 <sect1 id="release-7-0">
22170 <title>Release 7.0</title>
22172 <note>
22173 <title>Release date</title>
22174 <simpara>2000-05-08</simpara>
22175 </note>
22177 <para>
22178 This release contains improvements in many areas, demonstrating
22179 the continued growth of <productname>PostgreSQL</productname>.
22180 There are more improvements and fixes in 7.0 than in any previous
22181 release. The developers have confidence that this is the best
22182 release yet; we do our best to put out only solid releases, and
22183 this one is no exception.
22184 </para>
22186 <para>
22187 Major changes in this release:
22188 </para>
22190 <variablelist>
22191 <varlistentry>
22192 <term>
22193 Foreign Keys
22194 </term>
22195 <listitem>
22196 <para>
22197 Foreign keys are now implemented, with the exception of PARTIAL MATCH
22198 foreign keys. Many users have been asking for this feature, and we are
22199 pleased to offer it.
22200 </para>
22201 </listitem>
22202 </varlistentry>
22204 <varlistentry>
22205 <term>
22206 Optimizer Overhaul
22207 </term>
22208 <listitem>
22209 <para>
22210 Continuing on work started a year ago, the optimizer has been
22211 improved, allowing better query plan selection and faster performance
22212 with less memory usage.
22213 </para>
22214 </listitem>
22215 </varlistentry>
22217 <varlistentry>
22218 <term>
22219 Updated <application>psql</application>
22220 </term>
22221 <listitem>
22222 <para>
22223 <application>psql</application>, our interactive terminal monitor, has been
22224 updated with a variety of new features. See the <application>psql</application> manual page for details.
22225 </para>
22226 </listitem>
22227 </varlistentry>
22229 <varlistentry>
22230 <term>
22231 Join Syntax
22232 </term>
22233 <listitem>
22234 <para>
22235 SQL92 join syntax is now supported, though only as
22236 <literal>INNER JOIN</> for this release. <literal>JOIN</>,
22237 <literal>NATURAL JOIN</>, <literal>JOIN</>/<literal>USING</>,
22238 and <literal>JOIN</>/<literal>ON</> are available, as are
22239 column correlation names.
22240 </para>
22241 </listitem>
22243 </varlistentry>
22244 </variablelist>
22246 <sect2>
22247 <title>Migration to Version 7.0</title>
22249 <para>
22250 A dump/restore using <application>pg_dump</application>
22251 is required for those wishing to migrate data from any
22252 previous release of <productname>PostgreSQL</productname>.
22253 For those upgrading from 6.5.*, you can instead use
22254 <application>pg_upgrade</application> to upgrade to this
22255 release; however, a full dump/reload installation is always the
22256 most robust method for upgrades.
22257 </para>
22259 <para>
22260 Interface and compatibility issues to consider for the new
22261 release include:
22262 </para>
22264 <itemizedlist>
22265 <listitem>
22266 <para>
22267 The date/time types <type>datetime</type> and
22268 <type>timespan</type> have been superseded by the
22269 SQL92-defined types <type>timestamp</type> and
22270 <type>interval</type>. Although there has been some effort to
22271 ease the transition by allowing
22272 <productname>PostgreSQL</productname> to recognize
22273 the deprecated type names and translate them to the new type
22274 names, this mechanism cannot be completely transparent to
22275 your existing application.
22276 </para>
22277 </listitem>
22279 <listitem>
22280 <para>
22281 The optimizer has been substantially improved in the area of
22282 query cost estimation. In some cases, this will result in
22283 decreased query times as the optimizer makes a better choice
22284 for the preferred plan. However, in a small number of cases,
22285 usually involving pathological distributions of data, your
22286 query times might go up. If you are dealing with large amounts
22287 of data, you might want to check your queries to verify
22288 performance.
22289 </para>
22290 </listitem>
22292 <listitem>
22293 <para>
22294 The <acronym>JDBC</acronym> and <acronym>ODBC</acronym>
22295 interfaces have been upgraded and extended.
22296 </para>
22297 </listitem>
22299 <listitem>
22300 <para>
22301 The string function <function>CHAR_LENGTH</function> is now a
22302 native function. Previous versions translated this into a call
22303 to <function>LENGTH</function>, which could result in
22304 ambiguity with other types implementing
22305 <function>LENGTH</function> such as the geometric types.
22306 </para>
22307 </listitem>
22308 </itemizedlist>
22309 </sect2>
22311 <sect2>
22312 <title>Changes</title>
22314 <para>
22315 <programlisting>
22316 Bug Fixes
22317 ---------
22318 Prevent function calls exceeding maximum number of arguments (Tom)
22319 Improve CASE construct (Tom)
22320 Fix SELECT coalesce(f1,0) FROM int4_tbl GROUP BY f1 (Tom)
22321 Fix SELECT sentence.words[0] FROM sentence GROUP BY sentence.words[0] (Tom)
22322 Fix GROUP BY scan bug (Tom)
22323 Improvements in SQL grammar processing (Tom)
22324 Fix for views involved in INSERT ... SELECT ... (Tom)
22325 Fix for SELECT a/2, a/2 FROM test_missing_target GROUP BY a/2 (Tom)
22326 Fix for subselects in INSERT ... SELECT (Tom)
22327 Prevent INSERT ... SELECT ... ORDER BY (Tom)
22328 Fixes for relations greater than 2GB, including vacuum
22329 Improve propagating system table changes to other backends (Tom)
22330 Improve propagating user table changes to other backends (Tom)
22331 Fix handling of temp tables in complex situations (Bruce, Tom)
22332 Allow table locking at table open, improving concurrent reliability (Tom)
22333 Properly quote sequence names in pg_dump (Ross J. Reedstrom)
22334 Prevent DROP DATABASE while others accessing
22335 Prevent any rows from being returned by GROUP BY if no rows processed (Tom)
22336 Fix SELECT COUNT(1) FROM table WHERE ...' if no rows matching WHERE (Tom)
22337 Fix pg_upgrade so it works for MVCC (Tom)
22338 Fix for SELECT ... WHERE x IN (SELECT ... HAVING SUM(x) &gt; 1) (Tom)
22339 Fix for "f1 datetime DEFAULT 'now'" (Tom)
22340 Fix problems with CURRENT_DATE used in DEFAULT (Tom)
22341 Allow comment-only lines, and ;;; lines too. (Tom)
22342 Improve recovery after failed disk writes, disk full (Hiroshi)
22343 Fix cases where table is mentioned in FROM but not joined (Tom)
22344 Allow HAVING clause without aggregate functions (Tom)
22345 Fix for "--" comment and no trailing newline, as seen in perl interface
22346 Improve pg_dump failure error reports (Bruce)
22347 Allow sorts and hashes to exceed 2GB file sizes (Tom)
22348 Fix for pg_dump dumping of inherited rules (Tom)
22349 Fix for NULL handling comparisons (Tom)
22350 Fix inconsistent state caused by failed CREATE/DROP commands (Hiroshi)
22351 Fix for dbname with dash
22352 Prevent DROP INDEX from interfering with other backends (Tom)
22353 Fix file descriptor leak in verify_password()
22354 Fix for "Unable to identify an operator =$" problem
22355 Fix ODBC so no segfault if CommLog and Debug enabled (Dirk Niggemann)
22356 Fix for recursive exit call (Massimo)
22357 Fix for extra-long timezones (Jeroen van Vianen)
22358 Make pg_dump preserve primary key information (Peter E)
22359 Prevent databases with single quotes (Peter E)
22360 Prevent DROP DATABASE inside transaction (Peter E)
22361 ecpg memory leak fixes (Stephen Birch)
22362 Fix for SELECT null::text, SELECT int4fac(null) and SELECT 2 + (null) (Tom)
22363 Y2K timestamp fix (Massimo)
22364 Fix for VACUUM 'HEAP_MOVED_IN was not expected' errors (Tom)
22365 Fix for views with tables/columns containing spaces (Tom)
22366 Prevent privileges on indexes (Peter E)
22367 Fix for spinlock stuck problem when error is generated (Hiroshi)
22368 Fix ipcclean on Linux
22369 Fix handling of NULL constraint conditions (Tom)
22370 Fix memory leak in odbc driver (Nick Gorham)
22371 Fix for privilege check on UNION tables (Tom)
22372 Fix to allow SELECT 'a' LIKE 'a' (Tom)
22373 Fix for SELECT 1 + NULL (Tom)
22374 Fixes to CHAR
22375 Fix log() on numeric type (Tom)
22376 Deprecate ':' and ';' operators
22377 Allow vacuum of temporary tables
22378 Disallow inherited columns with the same name as new columns
22379 Recover or force failure when disk space is exhausted (Hiroshi)
22380 Fix INSERT INTO ... SELECT with AS columns matching result columns
22381 Fix INSERT ... SELECT ... GROUP BY groups by target columns not source columns (Tom)
22382 Fix CREATE TABLE test (a char(5) DEFAULT text '', b int4) with INSERT (Tom)
22383 Fix UNION with LIMIT
22384 Fix CREATE TABLE x AS SELECT 1 UNION SELECT 2
22385 Fix CREATE TABLE test(col char(2) DEFAULT user)
22386 Fix mismatched types in CREATE TABLE ... DEFAULT
22387 Fix SELECT * FROM pg_class where oid in (0,-1)
22388 Fix SELECT COUNT('asdf') FROM pg_class WHERE oid=12
22389 Prevent user who can create databases can modifying pg_database table (Peter E)
22390 Fix btree to give a useful elog when key &gt; 1/2 (page - overhead) (Tom)
22391 Fix INSERT of 0.0 into DECIMAL(4,4) field (Tom)
22393 Enhancements
22394 ------------
22395 New CLI interface include file sqlcli.h, based on SQL3/SQL98
22396 Remove all limits on query length, row length limit still exists (Tom)
22397 Update jdbc protocol to 2.0 (Jens Glaser <email>jens@jens.de</email>)
22398 Add TRUNCATE command to quickly truncate relation (Mike Mascari)
22399 Fix to give super user and createdb user proper update catalog rights (Peter E)
22400 Allow ecpg bool variables to have NULL values (Christof)
22401 Issue ecpg error if NULL value for variable with no NULL indicator (Christof)
22402 Allow ^C to cancel COPY command (Massimo)
22403 Add SET FSYNC and SHOW PG_OPTIONS commands(Massimo)
22404 Function name overloading for dynamically-loaded C functions (Frankpitt)
22405 Add CmdTuples() to libpq++(Vince)
22406 New CREATE CONSTRAINT TRIGGER and SET CONSTRAINTS commands(Jan)
22407 Allow CREATE FUNCTION/WITH clause to be used for all language types
22408 configure --enable-debug adds -g (Peter E)
22409 configure --disable-debug removes -g (Peter E)
22410 Allow more complex default expressions (Tom)
22411 First real FOREIGN KEY constraint trigger functionality (Jan)
22412 Add FOREIGN KEY ... MATCH FULL ... ON DELETE CASCADE (Jan)
22413 Add FOREIGN KEY ... MATCH &lt;unspecified&gt; referential actions (Don Baccus)
22414 Allow WHERE restriction on ctid (physical heap location) (Hiroshi)
22415 Move pginterface from contrib to interface directory, rename to pgeasy (Bruce)
22416 Change pgeasy connectdb() parameter ordering (Bruce)
22417 Require SELECT DISTINCT target list to have all ORDER BY columns (Tom)
22418 Add Oracle's COMMENT ON command (Mike Mascari <email>mascarim@yahoo.com</email>)
22419 libpq's PQsetNoticeProcessor function now returns previous hook(Peter E)
22420 Prevent PQsetNoticeProcessor from being set to NULL (Peter E)
22421 Make USING in COPY optional (Bruce)
22422 Allow subselects in the target list (Tom)
22423 Allow subselects on the left side of comparison operators (Tom)
22424 New parallel regression test (Jan)
22425 Change backend-side COPY to write files with permissions 644 not 666 (Tom)
22426 Force permissions on PGDATA directory to be secure, even if it exists (Tom)
22427 Added psql LASTOID variable to return last inserted oid (Peter E)
22428 Allow concurrent vacuum and remove pg_vlock vacuum lock file (Tom)
22429 Add privilege check for vacuum (Peter E)
22430 New libpq functions to allow asynchronous connections: PQconnectStart(),
22431 PQconnectPoll(), PQresetStart(), PQresetPoll(), PQsetenvStart(),
22432 PQsetenvPoll(), PQsetenvAbort (Ewan Mellor)
22433 New libpq PQsetenv() function (Ewan Mellor)
22434 create/alter user extension (Peter E)
22435 New postmaster.pid and postmaster.opts under $PGDATA (Tatsuo)
22436 New scripts for create/drop user/db (Peter E)
22437 Major psql overhaul (Peter E)
22438 Add const to libpq interface (Peter E)
22439 New libpq function PQoidValue (Peter E)
22440 Show specific non-aggregate causing problem with GROUP BY (Tom)
22441 Make changes to pg_shadow recreate pg_pwd file (Peter E)
22442 Add aggregate(DISTINCT ...) (Tom)
22443 Allow flag to control COPY input/output of NULLs (Peter E)
22444 Make postgres user have a password by default (Peter E)
22445 Add CREATE/ALTER/DROP GROUP (Peter E)
22446 All administration scripts now support --long options (Peter E, Karel)
22447 Vacuumdb script now supports --all option (Peter E)
22448 ecpg new portable FETCH syntax
22449 Add ecpg EXEC SQL IFDEF, EXEC SQL IFNDEF, EXEC SQL ELSE, EXEC SQL ELIF
22450 and EXEC SQL ENDIF directives
22451 Add pg_ctl script to control backend start-up (Tatsuo)
22452 Add postmaster.opts.default file to store start-up flags (Tatsuo)
22453 Allow --with-mb=SQL_ASCII
22454 Increase maximum number of index keys to 16 (Bruce)
22455 Increase maximum number of function arguments to 16 (Bruce)
22456 Allow configuration of maximum number of index keys and arguments (Bruce)
22457 Allow unprivileged users to change their passwords (Peter E)
22458 Password authentication enabled; required for new users (Peter E)
22459 Disallow dropping a user who owns a database (Peter E)
22460 Change initdb option --with-mb to --enable-multibyte
22461 Add option for initdb to prompts for superuser password (Peter E)
22462 Allow complex type casts like col::numeric(9,2) and col::int2::float8 (Tom)
22463 Updated user interfaces on initdb, initlocation, pg_dump, ipcclean (Peter E)
22464 New pg_char_to_encoding() and pg_encoding_to_char() functions (Tatsuo)
22465 libpq non-blocking mode (Alfred Perlstein)
22466 Improve conversion of types in casts that don't specify a length
22467 New plperl internal programming language (Mark Hollomon)
22468 Allow COPY IN to read file that do not end with a newline (Tom)
22469 Indicate when long identifiers are truncated (Tom)
22470 Allow aggregates to use type equivalency (Peter E)
22471 Add Oracle's to_char(), to_date(), to_datetime(), to_timestamp(), to_number()
22472 conversion functions (Karel Zak &lt;zakkr@zf.jcu.cz&gt;)
22473 Add SELECT DISTINCT ON (expr [, expr ...]) targetlist ... (Tom)
22474 Check to be sure ORDER BY is compatible with the DISTINCT operation (Tom)
22475 Add NUMERIC and int8 types to ODBC
22476 Improve EXPLAIN results for Append, Group, Agg, Unique (Tom)
22477 Add ALTER TABLE ... ADD FOREIGN KEY (Stephan Szabo)
22478 Allow SELECT .. FOR UPDATE in PL/pgSQL (Hiroshi)
22479 Enable backward sequential scan even after reaching EOF (Hiroshi)
22480 Add btree indexing of boolean values, &gt;= and &lt;= (Don Baccus)
22481 Print current line number when COPY FROM fails (Massimo)
22482 Recognize POSIX time zone e.g. "PST+8" and "GMT-8" (Thomas)
22483 Add DEC as synonym for DECIMAL (Thomas)
22484 Add SESSION_USER as SQL92 key word, same as CURRENT_USER (Thomas)
22485 Implement SQL92 column aliases (aka correlation names) (Thomas)
22486 Implement SQL92 join syntax (Thomas)
22487 Make INTERVAL reserved word allowed as a column identifier (Thomas)
22488 Implement REINDEX command (Hiroshi)
22489 Accept ALL in aggregate function SUM(ALL col) (Tom)
22490 Prevent GROUP BY from using column aliases (Tom)
22491 New psql \encoding option (Tatsuo)
22492 Allow PQrequestCancel() to terminate when in waiting-for-lock state (Hiroshi)
22493 Allow negation of a negative number in all cases
22494 Add ecpg descriptors (Christof, Michael)
22495 Allow CREATE VIEW v AS SELECT f1::char(8) FROM tbl
22496 Allow casts with length, like foo::char(8)
22497 New libpq functions PQsetClientEncoding(), PQclientEncoding() (Tatsuo)
22498 Add support for SJIS user defined characters (Tatsuo)
22499 Larger views/rules supported
22500 Make libpq's PQconndefaults() thread-safe (Tom)
22501 Disable // as comment to be ANSI conforming, should use -- (Tom)
22502 Allow column aliases on views CREATE VIEW name (collist)
22503 Fixes for views with subqueries (Tom)
22504 Allow UPDATE table SET fld = (SELECT ...) (Tom)
22505 SET command options no longer require quotes
22506 Update pgaccess to 0.98.6
22507 New SET SEED command
22508 New pg_options.sample file
22509 New SET FSYNC command (Massimo)
22510 Allow pg_descriptions when creating tables
22511 Allow pg_descriptions when creating types, columns, and functions
22512 Allow psql \copy to allow delimiters (Peter E)
22513 Allow psql to print nulls as distinct from "" [null] (Peter E)
22515 Types
22516 -----
22517 Many array fixes (Tom)
22518 Allow bare column names to be subscripted as arrays (Tom)
22519 Improve type casting of int and float constants (Tom)
22520 Cleanups for int8 inputs, range checking, and type conversion (Tom)
22521 Fix for SELECT timespan('21:11:26'::time) (Tom)
22522 netmask('x.x.x.x/0') is 255.255.255.255 instead of 0.0.0.0 (Oleg Sharoiko)
22523 Add btree index on NUMERIC (Jan)
22524 Perl fix for large objects containing NUL characters (Douglas Thomson)
22525 ODBC fix for large objects (free)
22526 Fix indexing of cidr data type
22527 Fix for Ethernet MAC addresses (macaddr type) comparisons
22528 Fix for date/time types when overflows happened in computations (Tom)
22529 Allow array on int8 (Peter E)
22530 Fix for rounding/overflow of NUMERIC type, like NUMERIC(4,4) (Tom)
22531 Allow NUMERIC arrays
22532 Fix bugs in NUMERIC ceil() and floor() functions (Tom)
22533 Make char_length()/octet_length including trailing blanks (Tom)
22534 Made abstime/reltime use int4 instead of time_t (Peter E)
22535 New lztext data type for compressed text fields
22536 Revise code to handle coercion of int and float constants (Tom)
22537 Start at new code to implement a BIT and BIT VARYING type (Adriaan Joubert)
22538 NUMERIC now accepts scientific notation (Tom)
22539 NUMERIC to int4 rounds (Tom)
22540 Convert float4/8 to NUMERIC properly (Tom)
22541 Allow type conversion with NUMERIC (Thomas)
22542 Make ISO date style (2000-02-16 09:33) the default (Thomas)
22543 Add NATIONAL CHAR [ VARYING ] (Thomas)
22544 Allow NUMERIC round and trunc to accept negative scales (Tom)
22545 New TIME WITH TIME ZONE type (Thomas)
22546 Add MAX()/MIN() on time type (Thomas)
22547 Add abs(), mod(), fac() for int8 (Thomas)
22548 Rename functions to round(), sqrt(), cbrt(), pow() for float8 (Thomas)
22549 Add transcendental math functions (e.g. sin(), acos()) for float8 (Thomas)
22550 Add exp() and ln() for NUMERIC type
22551 Rename NUMERIC power() to pow() (Thomas)
22552 Improved TRANSLATE() function (Edwin Ramirez, Tom)
22553 Allow X=-Y operators (Tom)
22554 Allow SELECT float8(COUNT(*))/(SELECT COUNT(*) FROM t) FROM t GROUP BY f1; (Tom)
22555 Allow LOCALE to use indexes in regular expression searches (Tom)
22556 Allow creation of functional indexes to use default types
22558 Performance
22559 -----------
22560 Prevent exponential space consumption with many AND's and OR's (Tom)
22561 Collect attribute selectivity values for system columns (Tom)
22562 Reduce memory usage of aggregates (Tom)
22563 Fix for LIKE optimization to use indexes with multibyte encodings (Tom)
22564 Fix r-tree index optimizer selectivity (Thomas)
22565 Improve optimizer selectivity computations and functions (Tom)
22566 Optimize btree searching for cases where many equal keys exist (Tom)
22567 Enable fast LIKE index processing only if index present (Tom)
22568 Re-use free space on index pages with duplicates (Tom)
22569 Improve hash join processing (Tom)
22570 Prevent descending sort if result is already sorted(Hiroshi)
22571 Allow commuting of index scan query qualifications (Tom)
22572 Prefer index scans in cases where ORDER BY/GROUP BY is required (Tom)
22573 Allocate large memory requests in fix-sized chunks for performance (Tom)
22574 Fix vacuum's performance by reducing memory allocation requests (Tom)
22575 Implement constant-expression simplification (Bernard Frankpitt, Tom)
22576 Use secondary columns to be used to determine start of index scan (Hiroshi)
22577 Prevent quadruple use of disk space when doing internal sorting (Tom)
22578 Faster sorting by calling fewer functions (Tom)
22579 Create system indexes to match all system caches (Bruce, Hiroshi)
22580 Make system caches use system indexes (Bruce)
22581 Make all system indexes unique (Bruce)
22582 Improve pg_statistics management for VACUUM speed improvement (Tom)
22583 Flush backend cache less frequently (Tom, Hiroshi)
22584 COPY now reuses previous memory allocation, improving performance (Tom)
22585 Improve optimization cost estimation (Tom)
22586 Improve optimizer estimate of range queries x &gt; lowbound AND x &lt; highbound (Tom)
22587 Use DNF instead of CNF where appropriate (Tom, Taral)
22588 Further cleanup for OR-of-AND WHERE-clauses (Tom)
22589 Make use of index in OR clauses (x = 1 AND y = 2) OR (x = 2 AND y = 4) (Tom)
22590 Smarter optimizer computations for random index page access (Tom)
22591 New SET variable to control optimizer costs (Tom)
22592 Optimizer queries based on LIMIT, OFFSET, and EXISTS qualifications (Tom)
22593 Reduce optimizer internal housekeeping of join paths for speedup (Tom)
22594 Major subquery speedup (Tom)
22595 Fewer fsync writes when fsync is not disabled (Tom)
22596 Improved LIKE optimizer estimates (Tom)
22597 Prevent fsync in SELECT-only queries (Vadim)
22598 Make index creation use psort code, because it is now faster (Tom)
22599 Allow creation of sort temp tables &gt; 1 Gig
22601 Source Tree Changes
22602 -------------------
22603 Fix for linux PPC compile
22604 New generic expression-tree-walker subroutine (Tom)
22605 Change form() to varargform() to prevent portability problems
22606 Improved range checking for large integers on Alphas
22607 Clean up #include in /include directory (Bruce)
22608 Add scripts for checking includes (Bruce)
22609 Remove un-needed #include's from *.c files (Bruce)
22610 Change #include's to use &lt;&gt; and "" as appropriate (Bruce)
22611 Enable Windows compilation of libpq
22612 Alpha spinlock fix from Uncle George <email>gatgul@voicenet.com</email>
22613 Overhaul of optimizer data structures (Tom)
22614 Fix to cygipc library (Yutaka Tanida)
22615 Allow pgsql to work on newer Cygwin snapshots (Dan)
22616 New catalog version number (Tom)
22617 Add Linux ARM
22618 Rename heap_replace to heap_update
22619 Update for QNX (Dr. Andreas Kardos)
22620 New platform-specific regression handling (Tom)
22621 Rename oid8 -&gt; oidvector and int28 -&gt; int2vector (Bruce)
22622 Included all yacc and lex files into the distribution (Peter E.)
22623 Remove lextest, no longer needed (Peter E)
22624 Fix for libpq and psql on Windows (Magnus)
22625 Internally change datetime and timespan into timestamp and interval (Thomas)
22626 Fix for plpgsql on BSD/OS
22627 Add SQL_ASCII test case to the regression test (Tatsuo)
22628 configure --with-mb now deprecated (Tatsuo)
22629 NT fixes
22630 NetBSD fixes (Johnny C. Lam <email>lamj@stat.cmu.edu</email>)
22631 Fixes for Alpha compiles
22632 New multibyte encodings
22633 </programlisting>
22634 </para>
22635 </sect2>
22636 </sect1>
22638 <sect1 id="release-6-5-3">
22639 <title>Release 6.5.3</title>
22641 <note>
22642 <title>Release date</title>
22643 <simpara>1999-10-13</simpara>
22644 </note>
22646 <para>
22647 This is basically a cleanup release for 6.5.2. We have added a new
22648 <application>PgAccess</> that was missing in 6.5.2, and installed an NT-specific fix.
22649 </para>
22652 <sect2>
22653 <title>Migration to Version 6.5.3</title>
22655 <para>
22656 A dump/restore is <emphasis>not</emphasis> required for those running
22657 6.5.*.
22658 </para>
22659 </sect2>
22660 <sect2>
22661 <title>Changes</title>
22663 <para>
22664 <programlisting>
22665 Updated version of pgaccess 0.98
22666 NT-specific patch
22667 Fix dumping rules on inherited tables
22668 </programlisting>
22669 </para>
22670 </sect2>
22671 </sect1>
22674 <sect1 id="release-6-5-2">
22675 <title>Release 6.5.2</title>
22677 <note>
22678 <title>Release date</title>
22679 <simpara>1999-09-15</simpara>
22680 </note>
22682 <para>
22683 This is basically a cleanup release for 6.5.1. We have fixed a variety of
22684 problems reported by 6.5.1 users.
22685 </para>
22688 <sect2>
22689 <title>Migration to Version 6.5.2</title>
22691 <para>
22692 A dump/restore is <emphasis>not</emphasis> required for those running
22693 6.5.*.
22694 </para>
22695 </sect2>
22697 <sect2>
22698 <title>Changes</title>
22700 <para>
22701 <programlisting>
22702 subselect+CASE fixes(Tom)
22703 Add SHLIB_LINK setting for solaris_i386 and solaris_sparc ports(Daren Sefcik)
22704 Fixes for CASE in WHERE join clauses(Tom)
22705 Fix BTScan abort(Tom)
22706 Repair the check for redundant UNIQUE and PRIMARY KEY indexes(Thomas)
22707 Improve it so that it checks for multicolumn constraints(Thomas)
22708 Fix for Windows making problem with MB enabled(Hiroki Kataoka)
22709 Allow BSD yacc and bison to compile pl code(Bruce)
22710 Fix SET NAMES working
22711 int8 fixes(Thomas)
22712 Fix vacuum's memory consumption(Hiroshi,Tatsuo)
22713 Reduce the total memory consumption of vacuum(Tom)
22714 Fix for timestamp(datetime)
22715 Rule deparsing bugfixes(Tom)
22716 Fix quoting problems in mkMakefile.tcldefs.sh.in and mkMakefile.tkdefs.sh.in(Tom)
22717 This is to re-use space on index pages freed by vacuum(Vadim)
22718 document -x for pg_dump(Bruce)
22719 Fix for unary operators in rule deparser(Tom)
22720 Comment out FileUnlink of excess segments during mdtruncate()(Tom)
22721 IRIX linking fix from Yu Cao &gt;yucao@falcon.kla-tencor.com&lt;
22722 Repair logic error in LIKE: should not return LIKE_ABORT
22723 when reach end of pattern before end of text(Tom)
22724 Repair incorrect cleanup of heap memory allocation during transaction abort(Tom)
22725 Updated version of pgaccess 0.98
22726 </programlisting>
22727 </para>
22728 </sect2>
22729 </sect1>
22731 <sect1 id="release-6-5-1">
22732 <title>Release 6.5.1</title>
22734 <note>
22735 <title>Release date</title>
22736 <simpara>1999-07-15</simpara>
22737 </note>
22739 <para>
22740 This is basically a cleanup release for 6.5. We have fixed a variety of
22741 problems reported by 6.5 users.
22742 </para>
22744 <sect2>
22745 <title>Migration to Version 6.5.1</title>
22747 <para>
22748 A dump/restore is <emphasis>not</emphasis> required for those running
22749 6.5.
22750 </para>
22751 </sect2>
22753 <sect2>
22754 <title>Changes</title>
22756 <para>
22757 <programlisting>
22758 Add NT README file
22759 Portability fixes for linux_ppc, IRIX, linux_alpha, OpenBSD, alpha
22760 Remove QUERY_LIMIT, use SELECT...LIMIT
22761 Fix for EXPLAIN on inheritance(Tom)
22762 Patch to allow vacuum on multisegment tables(Hiroshi)
22763 R-Tree optimizer selectivity fix(Tom)
22764 ACL file descriptor leak fix(Atsushi Ogawa)
22765 New expression subtree code(Tom)
22766 Avoid disk writes for read-only transactions(Vadim)
22767 Fix for removal of temp tables if last transaction was aborted(Bruce)
22768 Fix to prevent too large row from being created(Bruce)
22769 plpgsql fixes
22770 Allow port numbers 32k - 64k(Bruce)
22771 Add ^ precedence(Bruce)
22772 Rename sort files called pg_temp to pg_sorttemp(Bruce)
22773 Fix for microseconds in time values(Tom)
22774 Tutorial source cleanup
22775 New linux_m68k port
22776 Fix for sorting of NULL's in some cases(Tom)
22777 Shared library dependencies fixed (Tom)
22778 Fixed glitches affecting GROUP BY in subselects(Tom)
22779 Fix some compiler warnings (Tomoaki Nishiyama)
22780 Add Win1250 (Czech) support (Pavel Behal)
22781 </programlisting>
22782 </para>
22783 </sect2>
22784 </sect1>
22786 <sect1 id="release-6-5">
22787 <title>Release 6.5</title>
22789 <note>
22790 <title>Release date</title>
22791 <simpara>1999-06-09</simpara>
22792 </note>
22794 <para>
22795 This release marks a major step in the development team's mastery of the source
22796 code we inherited from Berkeley. You will see we are now easily adding
22797 major features, thanks to the increasing size and experience of our
22798 world-wide development team.
22799 </para>
22801 <para>
22802 Here is a brief summary of the more notable changes:
22804 <variablelist>
22805 <varlistentry>
22806 <term>
22807 Multiversion concurrency control(MVCC)
22808 </term>
22809 <listitem>
22810 <para>
22811 This removes our old table-level locking, and replaces it with
22812 a locking system that is superior to most commercial database
22813 systems. In a traditional system, each row that is modified
22814 is locked until committed, preventing reads by other users.
22815 MVCC uses the natural multiversion nature of
22816 <productname>PostgreSQL</productname> to allow readers to
22817 continue reading consistent data during writer activity.
22818 Writers continue to use the compact pg_log transaction system.
22819 This is all performed without having to allocate a lock for
22820 every row like traditional database systems. So, basically,
22821 we no longer are restricted by simple table-level locking; we
22822 have something better than row-level locking.
22823 </para>
22824 </listitem>
22825 </varlistentry>
22827 <varlistentry>
22828 <term>
22829 Hot backups from <application>pg_dump</application>
22830 </term>
22831 <listitem>
22832 <para>
22833 <application>pg_dump</application> takes advantage of the new
22834 MVCC features to give a consistent database dump/backup while
22835 the database stays online and available for queries.
22836 </para>
22837 </listitem>
22838 </varlistentry>
22840 <varlistentry>
22841 <term>
22842 Numeric data type
22843 </term>
22844 <listitem>
22845 <para>
22846 We now have a true numeric data type, with
22847 user-specified precision.
22848 </para>
22849 </listitem>
22850 </varlistentry>
22852 <varlistentry>
22853 <term>
22854 Temporary tables
22855 </term>
22856 <listitem>
22857 <para>
22858 Temporary tables are guaranteed to have unique names
22859 within a database session, and are destroyed on session exit.
22860 </para>
22861 </listitem>
22862 </varlistentry>
22864 <varlistentry>
22865 <term>
22866 New SQL features
22867 </term>
22868 <listitem>
22869 <para>
22870 We now have CASE, INTERSECT, and EXCEPT statement
22871 support. We have new LIMIT/OFFSET, SET TRANSACTION ISOLATION LEVEL,
22872 SELECT ... FOR UPDATE, and an improved LOCK TABLE command.
22873 </para>
22874 </listitem>
22875 </varlistentry>
22877 <varlistentry>
22878 <term>
22879 Speedups
22880 </term>
22881 <listitem>
22882 <para>
22883 We continue to speed up <productname>PostgreSQL</productname>,
22884 thanks to the variety of talents within our team. We have
22885 sped up memory allocation, optimization, table joins, and row
22886 transfer routines.
22887 </para>
22888 </listitem>
22889 </varlistentry>
22891 <varlistentry>
22892 <term>
22893 Ports
22894 </term>
22895 <listitem>
22896 <para>
22897 We continue to expand our port list, this time including
22898 <systemitem class="osname">Windows NT</>/<systemitem>ix86</> and <systemitem class="osname">NetBSD</>/<systemitem>arm32</>.
22899 </para>
22900 </listitem>
22901 </varlistentry>
22903 <varlistentry>
22904 <term>
22905 Interfaces
22906 </term>
22907 <listitem>
22908 <para>
22909 Most interfaces have new versions, and existing functionality
22910 has been improved.
22911 </para>
22912 </listitem>
22913 </varlistentry>
22915 <varlistentry>
22916 <term>
22917 Documentation
22918 </term>
22919 <listitem>
22920 <para>
22921 New and updated material is present throughout the
22922 documentation. New <acronym>FAQ</acronym>s have been
22923 contributed for <systemitem class="osname">SGI</> and <systemitem class="osname">AIX</> platforms.
22924 The <citetitle>Tutorial</citetitle> has introductory information
22925 on <acronym>SQL</acronym> from Stefan Simkovics.
22926 For the <citetitle>User's Guide</citetitle>, there are
22927 reference pages covering the postmaster and more utility
22928 programs, and a new appendix
22929 contains details on date/time behavior.
22930 The <citetitle>Administrator's Guide</citetitle> has a new
22931 chapter on troubleshooting from Tom Lane.
22932 And the <citetitle>Programmer's Guide</citetitle> has a
22933 description of query processing, also from Stefan, and details
22934 on obtaining the <productname>PostgreSQL</productname> source
22935 tree via anonymous <productname>CVS</productname> and
22936 <productname>CVSup</productname>.
22937 </para>
22938 </listitem>
22939 </varlistentry>
22940 </variablelist>
22941 </para>
22943 <sect2>
22944 <title>Migration to Version 6.5</title>
22946 <para>
22947 A dump/restore using <application>pg_dump</application>
22948 is required for those wishing to migrate data from any
22949 previous release of <productname>PostgreSQL</productname>.
22950 <application>pg_upgrade</application> can <emphasis>not</emphasis>
22951 be used to upgrade to this release because the on-disk structure
22952 of the tables has changed compared to previous releases.
22953 </para>
22955 <para>
22956 The new Multiversion Concurrency Control (MVCC) features can
22957 give somewhat different behaviors in multiuser
22958 environments. <emphasis>Read and understand the following section
22959 to ensure that your existing applications will give you the
22960 behavior you need.</emphasis>
22961 </para>
22963 <sect3>
22964 <title>Multiversion Concurrency Control</title>
22966 <para>
22967 Because readers in 6.5 don't lock data, regardless of transaction
22968 isolation level, data read by one transaction can be overwritten by
22969 another. In other words, if a row is returned by
22970 <command>SELECT</command> it doesn't mean that this row really exists
22971 at the time it is returned (i.e. sometime after the statement or
22972 transaction began) nor that the row is protected from being deleted or
22973 updated by concurrent transactions before the current transaction does
22974 a commit or rollback.
22975 </para>
22977 <para>
22978 To ensure the actual existence of a row and protect it against
22979 concurrent updates one must use <command>SELECT FOR UPDATE</command> or
22980 an appropriate <command>LOCK TABLE</command> statement. This should be
22981 taken into account when porting applications from previous releases of
22982 <productname>PostgreSQL</productname> and other environments.
22983 </para>
22985 <para>
22986 Keep the above in mind if you are using
22987 <filename>contrib/refint.*</filename> triggers for
22988 referential integrity. Additional techniques are required now. One way is
22989 to use <command>LOCK parent_table IN SHARE ROW EXCLUSIVE MODE</command>
22990 command if a transaction is going to update/delete a primary key and
22991 use <command>LOCK parent_table IN SHARE MODE</command> command if a
22992 transaction is going to update/insert a foreign key.
22994 <note>
22995 <para>
22996 Note that if you run a transaction in SERIALIZABLE mode then you must
22997 execute the <command>LOCK</command> commands above before execution of any
22998 <acronym>DML</acronym> statement
22999 (<command>SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO</command>) in the
23000 transaction.
23001 </para>
23002 </note>
23003 </para>
23005 <para>
23006 These inconveniences will disappear in the future
23007 when the ability to read dirty
23008 (uncommitted) data (regardless of isolation level) and true referential
23009 integrity will be implemented.
23010 </para>
23011 </sect3>
23012 </sect2>
23014 <sect2>
23015 <title>Changes</title>
23017 <para>
23018 <programlisting>
23019 Bug Fixes
23020 ---------
23021 Fix text&lt;-&gt;float8 and text&lt;-&gt;float4 conversion functions(Thomas)
23022 Fix for creating tables with mixed-case constraints(Billy)
23023 Change exp()/pow() behavior to generate error on underflow/overflow(Jan)
23024 Fix bug in pg_dump -z
23025 Memory overrun cleanups(Tatsuo)
23026 Fix for lo_import crash(Tatsuo)
23027 Adjust handling of data type names to suppress double quotes(Thomas)
23028 Use type coercion for matching columns and DEFAULT(Thomas)
23029 Fix deadlock so it only checks once after one second of sleep(Bruce)
23030 Fixes for aggregates and PL/pgsql(Hiroshi)
23031 Fix for subquery crash(Vadim)
23032 Fix for libpq function PQfnumber and case-insensitive names(Bahman Rafatjoo)
23033 Fix for large object write-in-middle, no extra block, memory consumption(Tatsuo)
23034 Fix for pg_dump -d or -D and quote special characters in INSERT
23035 Repair serious problems with dynahash(Tom)
23036 Fix INET/CIDR portability problems
23037 Fix problem with selectivity error in ALTER TABLE ADD COLUMN(Bruce)
23038 Fix executor so mergejoin of different column types works(Tom)
23039 Fix for Alpha OR selectivity bug
23040 Fix OR index selectivity problem(Bruce)
23041 Fix so \d shows proper length for char()/varchar()(Ryan)
23042 Fix tutorial code(Clark)
23043 Improve destroyuser checking(Oliver)
23044 Fix for Kerberos(Rodney McDuff)
23045 Fix for dropping database while dirty buffers(Bruce)
23046 Fix so sequence nextval() can be case-sensitive(Bruce)
23047 Fix !!= operator
23048 Drop buffers before destroying database files(Bruce)
23049 Fix case where executor evaluates functions twice(Tatsuo)
23050 Allow sequence nextval actions to be case-sensitive(Bruce)
23051 Fix optimizer indexing not working for negative numbers(Bruce)
23052 Fix for memory leak in executor with fjIsNull
23053 Fix for aggregate memory leaks(Erik Riedel)
23054 Allow user name containing a dash to grant privileges
23055 Cleanup of NULL in inet types
23056 Clean up system table bugs(Tom)
23057 Fix problems of PAGER and \? command(Masaaki Sakaida)
23058 Reduce default multisegment file size limit to 1GB(Peter)
23059 Fix for dumping of CREATE OPERATOR(Tom)
23060 Fix for backward scanning of cursors(Hiroshi Inoue)
23061 Fix for COPY FROM STDIN when using \i(Tom)
23062 Fix for subselect is compared inside an expression(Jan)
23063 Fix handling of error reporting while returning rows(Tom)
23064 Fix problems with reference to array types(Tom,Jan)
23065 Prevent UPDATE SET oid(Jan)
23066 Fix pg_dump so -t option can handle case-sensitive tablenames
23067 Fixes for GROUP BY in special cases(Tom, Jan)
23068 Fix for memory leak in failed queries(Tom)
23069 DEFAULT now supports mixed-case identifiers(Tom)
23070 Fix for multisegment uses of DROP/RENAME table, indexes(Ole Gjerde)
23071 Disable use of pg_dump with both -o and -d options(Bruce)
23072 Allow pg_dump to properly dump group privileges(Bruce)
23073 Fix GROUP BY in INSERT INTO table SELECT * FROM table2(Jan)
23074 Fix for computations in views(Jan)
23075 Fix for aggregates on array indexes(Tom)
23076 Fix for DEFAULT handles single quotes in value requiring too many quotes
23077 Fix security problem with non-super users importing/exporting large objects(Tom)
23078 Rollback of transaction that creates table cleaned up properly(Tom)
23079 Fix to allow long table and column names to generate proper serial names(Tom)
23081 Enhancements
23082 ------------
23083 Add "vacuumdb" utility
23084 Speed up libpq by allocating memory better(Tom)
23085 EXPLAIN all indexes used(Tom)
23086 Implement CASE, COALESCE, NULLIF expression(Thomas)
23087 New pg_dump table output format(Constantin)
23088 Add string min()/max() functions(Thomas)
23089 Extend new type coercion techniques to aggregates(Thomas)
23090 New moddatetime contrib(Terry)
23091 Update to pgaccess 0.96(Constantin)
23092 Add routines for single-byte "char" type(Thomas)
23093 Improved substr() function(Thomas)
23094 Improved multibyte handling(Tatsuo)
23095 Multiversion concurrency control/MVCC(Vadim)
23096 New Serialized mode(Vadim)
23097 Fix for tables over 2gigs(Peter)
23098 New SET TRANSACTION ISOLATION LEVEL(Vadim)
23099 New LOCK TABLE IN ... MODE(Vadim)
23100 Update ODBC driver(Byron)
23101 New NUMERIC data type(Jan)
23102 New SELECT FOR UPDATE(Vadim)
23103 Handle "NaN" and "Infinity" for input values(Jan)
23104 Improved date/year handling(Thomas)
23105 Improved handling of backend connections(Magnus)
23106 New options ELOG_TIMESTAMPS and USE_SYSLOG options for log files(Massimo)
23107 New TCL_ARRAYS option(Massimo)
23108 New INTERSECT and EXCEPT(Stefan)
23109 New pg_index.indisprimary for primary key tracking(D'Arcy)
23110 New pg_dump option to allow dropping of tables before creation(Brook)
23111 Speedup of row output routines(Tom)
23112 New READ COMMITTED isolation level(Vadim)
23113 New TEMP tables/indexes(Bruce)
23114 Prevent sorting if result is already sorted(Jan)
23115 New memory allocation optimization(Jan)
23116 Allow psql to do \p\g(Bruce)
23117 Allow multiple rule actions(Jan)
23118 Added LIMIT/OFFSET functionality(Jan)
23119 Improve optimizer when joining a large number of tables(Bruce)
23120 New intro to SQL from S. Simkovics' Master's Thesis (Stefan, Thomas)
23121 New intro to backend processing from S. Simkovics' Master's Thesis (Stefan)
23122 Improved int8 support(Ryan Bradetich, Thomas, Tom)
23123 New routines to convert between int8 and text/varchar types(Thomas)
23124 New bushy plans, where meta-tables are joined(Bruce)
23125 Enable right-hand queries by default(Bruce)
23126 Allow reliable maximum number of backends to be set at configure time
23127 (--with-maxbackends and postmaster switch (-N backends))(Tom)
23128 GEQO default now 10 tables because of optimizer speedups(Tom)
23129 Allow NULL=Var for MS-SQL portability(Michael, Bruce)
23130 Modify contrib check_primary_key() so either "automatic" or "dependent"(Anand)
23131 Allow psql \d on a view show query(Ryan)
23132 Speedup for LIKE(Bruce)
23133 Ecpg fixes/features, see src/interfaces/ecpg/ChangeLog file(Michael)
23134 JDBC fixes/features, see src/interfaces/jdbc/CHANGELOG(Peter)
23135 Make % operator have precedence like /(Bruce)
23136 Add new postgres -O option to allow system table structure changes(Bruce)
23137 Update contrib/pginterface/findoidjoins script(Tom)
23138 Major speedup in vacuum of deleted rows with indexes(Vadim)
23139 Allow non-SQL functions to run different versions based on arguments(Tom)
23140 Add -E option that shows actual queries sent by \dt and friends(Masaaki Sakaida)
23141 Add version number in start-up banners for psql(Masaaki Sakaida)
23142 New contrib/vacuumlo removes large objects not referenced(Peter)
23143 New initialization for table sizes so non-vacuumed tables perform better(Tom)
23144 Improve error messages when a connection is rejected(Tom)
23145 Support for arrays of char() and varchar() fields(Massimo)
23146 Overhaul of hash code to increase reliability and performance(Tom)
23147 Update to PyGreSQL 2.4(D'Arcy)
23148 Changed debug options so -d4 and -d5 produce different node displays(Jan)
23149 New pg_options: pretty_plan, pretty_parse, pretty_rewritten(Jan)
23150 Better optimization statistics for system table access(Tom)
23151 Better handling of non-default block sizes(Massimo)
23152 Improve GEQO optimizer memory consumption(Tom)
23153 UNION now supports ORDER BY of columns not in target list(Jan)
23154 Major libpq++ improvements(Vince Vielhaber)
23155 pg_dump now uses -z(ACL's) as default(Bruce)
23156 backend cache, memory speedups(Tom)
23157 have pg_dump do everything in one snapshot transaction(Vadim)
23158 fix for large object memory leakage, fix for pg_dumping(Tom)
23159 INET type now respects netmask for comparisons
23160 Make VACUUM ANALYZE only use a readlock(Vadim)
23161 Allow VIEWs on UNIONS(Jan)
23162 pg_dump now can generate consistent snapshots on active databases(Vadim)
23164 Source Tree Changes
23165 -------------------
23166 Improve port matching(Tom)
23167 Portability fixes for SunOS
23168 Add Windows NT backend port and enable dynamic loading(Magnus and Daniel Horak)
23169 New port to Cobalt Qube(Mips) running Linux(Tatsuo)
23170 Port to NetBSD/m68k(Mr. Mutsuki Nakajima)
23171 Port to NetBSD/sun3(Mr. Mutsuki Nakajima)
23172 Port to NetBSD/macppc(Toshimi Aoki)
23173 Fix for tcl/tk configuration(Vince)
23174 Removed CURRENT key word for rule queries(Jan)
23175 NT dynamic loading now works(Daniel Horak)
23176 Add ARM32 support(Andrew McMurry)
23177 Better support for HP-UX 11 and UnixWare
23178 Improve file handling to be more uniform, prevent file descriptor leak(Tom)
23179 New install commands for plpgsql(Jan)
23180 </programlisting>
23181 </para>
23182 </sect2>
23183 </sect1>
23186 <sect1 id="release-6-4-2">
23187 <title>Release 6.4.2</title>
23189 <note>
23190 <title>Release date</title>
23191 <simpara>1998-12-20</simpara>
23192 </note>
23194 <para>
23195 The 6.4.1 release was improperly packaged. This also has one additional
23196 bug fix.
23197 </para>
23200 <sect2>
23201 <title>Migration to Version 6.4.2</title>
23203 <para>
23204 A dump/restore is <emphasis>not</emphasis> required for those running
23205 6.4.*.
23206 </para>
23207 </sect2>
23208 <sect2>
23209 <title>Changes</title>
23211 <para>
23212 <programlisting>
23213 Fix for datetime constant problem on some platforms(Thomas)
23214 </programlisting>
23215 </para>
23216 </sect2>
23217 </sect1>
23221 <sect1 id="release-6-4-1">
23222 <title>Release 6.4.1</title>
23224 <note>
23225 <title>Release date</title>
23226 <simpara>1998-12-18</simpara>
23227 </note>
23229 <para>
23230 This is basically a cleanup release for 6.4. We have fixed a variety of
23231 problems reported by 6.4 users.
23232 </para>
23235 <sect2>
23236 <title>Migration to Version 6.4.1</title>
23238 <para>
23239 A dump/restore is <emphasis>not</emphasis> required for those running
23240 6.4.
23241 </para>
23242 </sect2>
23243 <sect2>
23244 <title>Changes</title>
23246 <para>
23247 <programlisting>
23248 Add pg_dump -N flag to force double quotes around identifiers. This is
23249 the default(Thomas)
23250 Fix for NOT in where clause causing crash(Bruce)
23251 EXPLAIN VERBOSE coredump fix(Vadim)
23252 Fix shared-library problems on Linux
23253 Fix test for table existence to allow mixed-case and whitespace in
23254 the table name(Thomas)
23255 Fix a couple of pg_dump bugs
23256 Configure matches template/.similar entries better(Tom)
23257 Change builtin function names from SPI_* to spi_*
23258 OR WHERE clause fix(Vadim)
23259 Fixes for mixed-case table names(Billy)
23260 contrib/linux/postgres.init.csh/sh fix(Thomas)
23261 libpq memory overrun fix
23262 SunOS fixes(Tom)
23263 Change exp() behavior to generate error on underflow(Thomas)
23264 pg_dump fixes for memory leak, inheritance constraints, layout change
23265 update pgaccess to 0.93
23266 Fix prototype for 64-bit platforms
23267 Multibyte fixes(Tatsuo)
23268 New ecpg man page
23269 Fix memory overruns(Tatsuo)
23270 Fix for lo_import() crash(Bruce)
23271 Better search for install program(Tom)
23272 Timezone fixes(Tom)
23273 HP-UX fixes(Tom)
23274 Use implicit type coercion for matching DEFAULT values(Thomas)
23275 Add routines to help with single-byte (internal) character type(Thomas)
23276 Compilation of libpq for Windows fixes(Magnus)
23277 Upgrade to PyGreSQL 2.2(D'Arcy)
23278 </programlisting>
23279 </para>
23280 </sect2>
23281 </sect1>
23285 <sect1 id="release-6-4">
23286 <title>Release 6.4</title>
23288 <note>
23289 <title>Release date</title>
23290 <simpara>1998-10-30</simpara>
23291 </note>
23293 <para>
23294 There are <emphasis>many</emphasis> new features and improvements in this release.
23295 Thanks to our developers and maintainers, nearly every aspect of the system
23296 has received some attention since the previous release.
23297 Here is a brief, incomplete summary:
23299 <itemizedlist>
23300 <listitem>
23301 <para>
23302 Views and rules are now functional thanks to extensive new code in the
23303 rewrite rules system from Jan Wieck. He also wrote a chapter on it
23304 for the <citetitle>Programmer's Guide</citetitle>.
23305 </para>
23306 </listitem>
23307 <listitem>
23308 <para>
23309 Jan also contributed a second procedural language, <application>PL/pgSQL</application>, to go with the
23310 original <application>PL/pgTCL</application> procedural language he contributed last release.
23311 </para>
23312 </listitem>
23314 <listitem>
23315 <para>
23316 We have optional multiple-byte character set support from Tatsuo Ishii
23317 to complement our existing locale support.
23318 </para>
23319 </listitem>
23321 <listitem>
23322 <para>
23323 Client/server communications has been cleaned up, with better support for
23324 asynchronous messages and interrupts thanks to Tom Lane.
23325 </para>
23326 </listitem>
23328 <listitem>
23329 <para>
23330 The parser will now perform automatic type coercion to match arguments
23331 to available operators and functions, and to match columns and expressions
23332 with target columns. This uses a generic mechanism which supports
23333 the type extensibility features of <productname>PostgreSQL</productname>.
23334 There is a new chapter in the <citetitle>User's Guide</citetitle>
23335 which covers this topic.
23336 </para>
23337 </listitem>
23339 <listitem>
23340 <para>
23341 Three new data types have been added.
23342 Two types, <type>inet</type> and <type>cidr</type>, support various forms
23343 of IP network, subnet, and machine addressing. There is now an 8-byte integer
23344 type available on some platforms. See the chapter on data types
23345 in the <citetitle>User's Guide</citetitle> for details.
23346 A fourth type, <type>serial</type>, is now supported by the parser as an
23347 amalgam of the <type>int4</type> type, a sequence, and a unique index.
23348 </para>
23349 </listitem>
23351 <listitem>
23352 <para>
23353 Several more <acronym>SQL92</acronym>-compatible syntax features have been
23354 added, including <command>INSERT DEFAULT VALUES</command>
23355 </para>
23356 </listitem>
23358 <listitem>
23359 <para>
23360 The automatic configuration and installation system has received some
23361 attention, and should be more robust for more platforms than it has ever
23362 been.
23363 </para>
23364 </listitem>
23366 </itemizedlist>
23367 </para>
23369 <sect2>
23370 <title>Migration to Version 6.4</title>
23372 <para>
23373 A dump/restore using <application>pg_dump</application>
23374 or <application>pg_dumpall</application>
23375 is required for those wishing to migrate data from any
23376 previous release of <productname>PostgreSQL</productname>.
23377 </para>
23378 </sect2>
23380 <sect2>
23381 <title>Changes</title>
23383 <para>
23384 <programlisting>
23385 Bug Fixes
23386 ---------
23387 Fix for a tiny memory leak in PQsetdb/PQfinish(Bryan)
23388 Remove char2-16 data types, use char/varchar(Darren)
23389 Pqfn not handles a NOTICE message(Anders)
23390 Reduced busywaiting overhead for spinlocks with many backends (dg)
23391 Stuck spinlock detection (dg)
23392 Fix up "ISO-style" timespan decoding and encoding(Thomas)
23393 Fix problem with table drop after rollback of transaction(Vadim)
23394 Change error message and remove non-functional update message(Vadim)
23395 Fix for COPY array checking
23396 Fix for SELECT 1 UNION SELECT NULL
23397 Fix for buffer leaks in large object calls(Pascal)
23398 Change owner from oid to int4 type(Bruce)
23399 Fix a bug in the oracle compatibility functions btrim() ltrim() and rtrim()
23400 Fix for shared invalidation cache overflow(Massimo)
23401 Prevent file descriptor leaks in failed COPY's(Bruce)
23402 Fix memory leak in libpgtcl's pg_select(Constantin)
23403 Fix problems with username/passwords over 8 characters(Tom)
23404 Fix problems with handling of asynchronous NOTIFY in backend(Tom)
23405 Fix of many bad system table entries(Tom)
23407 Enhancements
23408 ------------
23409 Upgrade ecpg and ecpglib,see src/interfaces/ecpc/ChangeLog(Michael)
23410 Show the index used in an EXPLAIN(Zeugswetter)
23411 EXPLAIN invokes rule system and shows plan(s) for rewritten queries(Jan)
23412 Multibyte awareness of many data types and functions, via configure(Tatsuo)
23413 New configure --with-mb option(Tatsuo)
23414 New initdb --pgencoding option(Tatsuo)
23415 New createdb -E multibyte option(Tatsuo)
23416 Select version(); now returns PostgreSQL version(Jeroen)
23417 libpq now allows asynchronous clients(Tom)
23418 Allow cancel from client of backend query(Tom)
23419 psql now cancels query with Control-C(Tom)
23420 libpq users need not issue dummy queries to get NOTIFY messages(Tom)
23421 NOTIFY now sends sender's PID, so you can tell whether it was your own(Tom)
23422 PGresult struct now includes associated error message, if any(Tom)
23423 Define "tz_hour" and "tz_minute" arguments to date_part()(Thomas)
23424 Add routines to convert between varchar and bpchar(Thomas)
23425 Add routines to allow sizing of varchar and bpchar into target columns(Thomas)
23426 Add bit flags to support timezonehour and minute in data retrieval(Thomas)
23427 Allow more variations on valid floating point numbers (e.g. ".1", "1e6")(Thomas)
23428 Fixes for unary minus parsing with leading spaces(Thomas)
23429 Implement TIMEZONE_HOUR, TIMEZONE_MINUTE per SQL92 specs(Thomas)
23430 Check for and properly ignore FOREIGN KEY column constraints(Thomas)
23431 Define USER as synonym for CURRENT_USER per SQL92 specs(Thomas)
23432 Enable HAVING clause but no fixes elsewhere yet.
23433 Make "char" type a synonym for "char(1)" (actually implemented as bpchar)(Thomas)
23434 Save string type if specified for DEFAULT clause handling(Thomas)
23435 Coerce operations involving different data types(Thomas)
23436 Allow some index use for columns of different types(Thomas)
23437 Add capabilities for automatic type conversion(Thomas)
23438 Cleanups for large objects, so file is truncated on open(Peter)
23439 Readline cleanups(Tom)
23440 Allow psql \f \ to make spaces as delimiter(Bruce)
23441 Pass pg_attribute.atttypmod to the frontend for column field lengths(Tom,Bruce)
23442 Msql compatibility library in /contrib(Aldrin)
23443 Remove the requirement that ORDER/GROUP BY clause identifiers be
23444 included in the target list(David)
23445 Convert columns to match columns in UNION clauses(Thomas)
23446 Remove fork()/exec() and only do fork()(Bruce)
23447 Jdbc cleanups(Peter)
23448 Show backend status on ps command line(only works on some platforms)(Bruce)
23449 Pg_hba.conf now has a sameuser option in the database field
23450 Make lo_unlink take oid param, not int4
23451 New DISABLE_COMPLEX_MACRO for compilers that cannot handle our macros(Bruce)
23452 Libpgtcl now handles NOTIFY as a Tcl event, need not send dummy queries(Tom)
23453 libpgtcl cleanups(Tom)
23454 Add -error option to libpgtcl's pg_result command(Tom)
23455 New locale patch, see docs/README/locale(Oleg)
23456 Fix for pg_dump so CONSTRAINT and CHECK syntax is correct(ccb)
23457 New contrib/lo code for large object orphan removal(Peter)
23458 New psql command "SET CLIENT_ENCODING TO 'encoding'" for multibytes
23459 feature, see /doc/README.mb(Tatsuo)
23460 contrib/noupdate code to revoke update permission on a column
23461 libpq can now be compiled on Windows(Magnus)
23462 Add PQsetdbLogin() in libpq
23463 New 8-byte integer type, checked by configure for OS support(Thomas)
23464 Better support for quoted table/column names(Thomas)
23465 Surround table and column names with double-quotes in pg_dump(Thomas)
23466 PQreset() now works with passwords(Tom)
23467 Handle case of GROUP BY target list column number out of range(David)
23468 Allow UNION in subselects
23469 Add auto-size to screen to \d? commands(Bruce)
23470 Use UNION to show all \d? results in one query(Bruce)
23471 Add \d? field search feature(Bruce)
23472 Pg_dump issues fewer \connect requests(Tom)
23473 Make pg_dump -z flag work better, document it in manual page(Tom)
23474 Add HAVING clause with full support for subselects and unions(Stephan)
23475 Full text indexing routines in contrib/fulltextindex(Maarten)
23476 Transaction ids now stored in shared memory(Vadim)
23477 New PGCLIENTENCODING when issuing COPY command(Tatsuo)
23478 Support for SQL92 syntax "SET NAMES"(Tatsuo)
23479 Support for LATIN2-5(Tatsuo)
23480 Add UNICODE regression test case(Tatsuo)
23481 Lock manager cleanup, new locking modes for LLL(Vadim)
23482 Allow index use with OR clauses(Bruce)
23483 Allows "SELECT NULL ORDER BY 1;"
23484 Explain VERBOSE prints the plan, and now pretty-prints the plan to
23485 the postmaster log file(Bruce)
23486 Add indexes display to \d command(Bruce)
23487 Allow GROUP BY on functions(David)
23488 New pg_class.relkind for large objects(Bruce)
23489 New way to send libpq NOTICE messages to a different location(Tom)
23490 New \w write command to psql(Bruce)
23491 New /contrib/findoidjoins scans oid columns to find join relationships(Bruce)
23492 Allow binary-compatible indexes to be considered when checking for valid
23493 Indexes for restriction clauses containing a constant(Thomas)
23494 New ISBN/ISSN code in /contrib/isbn_issn
23495 Allow NOT LIKE, IN, NOT IN, BETWEEN, and NOT BETWEEN constraint(Thomas)
23496 New rewrite system fixes many problems with rules and views(Jan)
23497 * Rules on relations work
23498 * Event qualifications on insert/update/delete work
23499 * New OLD variable to reference CURRENT, CURRENT will be remove in future
23500 * Update rules can reference NEW and OLD in rule qualifications/actions
23501 * Insert/update/delete rules on views work
23502 * Multiple rule actions are now supported, surrounded by parentheses
23503 * Regular users can create views/rules on tables they have RULE permits
23504 * Rules and views inherit the privileges of the creator
23505 * No rules at the column level
23506 * No UPDATE NEW/OLD rules
23507 * New pg_tables, pg_indexes, pg_rules and pg_views system views
23508 * Only a single action on SELECT rules
23509 * Total rewrite overhaul, perhaps for 6.5
23510 * handle subselects
23511 * handle aggregates on views
23512 * handle insert into select from view works
23513 System indexes are now multikey(Bruce)
23514 Oidint2, oidint4, and oidname types are removed(Bruce)
23515 Use system cache for more system table lookups(Bruce)
23516 New backend programming language PL/pgSQL in backend/pl(Jan)
23517 New SERIAL data type, auto-creates sequence/index(Thomas)
23518 Enable assert checking without a recompile(Massimo)
23519 User lock enhancements(Massimo)
23520 New setval() command to set sequence value(Massimo)
23521 Auto-remove unix socket file on start-up if no postmaster running(Massimo)
23522 Conditional trace package(Massimo)
23523 New UNLISTEN command(Massimo)
23524 psql and libpq now compile under Windows using win32.mak(Magnus)
23525 Lo_read no longer stores trailing NULL(Bruce)
23526 Identifiers are now truncated to 31 characters internally(Bruce)
23527 Createuser options now available on the command line
23528 Code for 64-bit integer supported added, configure tested, int8 type(Thomas)
23529 Prevent file descriptor leaf from failed COPY(Bruce)
23530 New pg_upgrade command(Bruce)
23531 Updated /contrib directories(Massimo)
23532 New CREATE TABLE DEFAULT VALUES statement available(Thomas)
23533 New INSERT INTO TABLE DEFAULT VALUES statement available(Thomas)
23534 New DECLARE and FETCH feature(Thomas)
23535 libpq's internal structures now not exported(Tom)
23536 Allow up to 8 key indexes(Bruce)
23537 Remove ARCHIVE key word, that is no longer used(Thomas)
23538 pg_dump -n flag to suppress quotes around indentifiers
23539 disable system columns for views(Jan)
23540 new INET and CIDR types for network addresses(TomH, Paul)
23541 no more double quotes in psql output
23542 pg_dump now dumps views(Terry)
23543 new SET QUERY_LIMIT(Tatsuo,Jan)
23545 Source Tree Changes
23546 -------------------
23547 /contrib cleanup(Jun)
23548 Inline some small functions called for every row(Bruce)
23549 Alpha/linux fixes
23550 HP-UX cleanups(Tom)
23551 Multibyte regression tests(Soonmyung.)
23552 Remove --disabled options from configure
23553 Define PGDOC to use POSTGRESDIR by default
23554 Make regression optional
23555 Remove extra braces code to pgindent(Bruce)
23556 Add bsdi shared library support(Bruce)
23557 New --without-CXX support configure option(Brook)
23558 New FAQ_CVS
23559 Update backend flowchart in tools/backend(Bruce)
23560 Change atttypmod from int16 to int32(Bruce, Tom)
23561 Getrusage() fix for platforms that do not have it(Tom)
23562 Add PQconnectdb, PGUSER, PGPASSWORD to libpq man page
23563 NS32K platform fixes(Phil Nelson, John Buller)
23564 SCO 7/UnixWare 2.x fixes(Billy,others)
23565 Sparc/Solaris 2.5 fixes(Ryan)
23566 Pgbuiltin.3 is obsolete, move to doc files(Thomas)
23567 Even more documentation(Thomas)
23568 Nextstep support(Jacek)
23569 Aix support(David)
23570 pginterface manual page(Bruce)
23571 shared libraries all have version numbers
23572 merged all OS-specific shared library defines into one file
23573 smarter TCL/TK configuration checking(Billy)
23574 smarter perl configuration(Brook)
23575 configure uses supplied install-sh if no install script found(Tom)
23576 new Makefile.shlib for shared library configuration(Tom)
23577 </programlisting>
23578 </para>
23579 </sect2>
23580 </sect1>
23582 <sect1 id="release-6-3-2">
23583 <title>Release 6.3.2</title>
23585 <note>
23586 <title>Release date</title>
23587 <simpara>1998-04-07</simpara>
23588 </note>
23590 <para>
23591 This is a bug-fix release for 6.3.x.
23592 Refer to the release notes for version 6.3 for a more complete summary of new features.
23593 </para>
23594 <para>
23595 Summary:
23597 <itemizedlist>
23598 <listitem>
23599 <para>
23600 Repairs automatic configuration support for some platforms, including Linux,
23601 from breakage inadvertently introduced in version 6.3.1.
23602 </para>
23603 </listitem>
23605 <listitem>
23606 <para>
23607 Correctly handles function calls on the left side of BETWEEN and LIKE clauses.
23608 </para>
23609 </listitem>
23611 </itemizedlist>
23612 </para>
23613 <para>
23614 A dump/restore is NOT required for those running 6.3 or 6.3.1. A
23615 <literal>make distclean</>, <literal>make</>, and <literal>make install</> is all that is required.
23616 This last step should be performed while the postmaster is not running.
23617 You should re-link any custom applications that use <productname>PostgreSQL</productname> libraries.
23618 </para>
23619 <para>
23620 For upgrades from pre-6.3 installations,
23621 refer to the installation and migration instructions for version 6.3.
23622 </para>
23624 <sect2>
23625 <title>Changes</title>
23627 <para>
23628 <programlisting>
23629 Configure detection improvements for tcl/tk(Brook Milligan, Alvin)
23630 Manual page improvements(Bruce)
23631 BETWEEN and LIKE fix(Thomas)
23632 fix for psql \connect used by pg_dump(Oliver Elphick)
23633 New odbc driver
23634 pgaccess, version 0.86
23635 qsort removed, now uses libc version, cleanups(Jeroen)
23636 fix for buffer over-runs detected(Maurice Gittens)
23637 fix for buffer overrun in libpgtcl(Randy Kunkee)
23638 fix for UNION with DISTINCT or ORDER BY(Bruce)
23639 gettimeofday configure check(Doug Winterburn)
23640 Fix "indexes not used" bug(Vadim)
23641 docs additions(Thomas)
23642 Fix for backend memory leak(Bruce)
23643 libreadline cleanup(Erwan MAS)
23644 Remove DISTDIR(Bruce)
23645 Makefile dependency cleanup(Jeroen van Vianen)
23646 ASSERT fixes(Bruce)
23647 </programlisting>
23648 </para>
23649 </sect2>
23650 </sect1>
23652 <sect1 id="release-6-3-1">
23653 <title>Release 6.3.1</title>
23655 <note>
23656 <title>Release date</title>
23657 <simpara>1998-03-23</simpara>
23658 </note>
23660 <para>
23661 Summary:
23663 <itemizedlist>
23664 <listitem>
23665 <para>
23666 Additional support for multibyte character sets.
23667 </para>
23668 </listitem>
23670 <listitem>
23671 <para>
23672 Repair byte ordering for mixed-endian clients and servers.
23673 </para>
23674 </listitem>
23676 <listitem>
23677 <para>
23678 Minor updates to allowed SQL syntax.
23679 </para>
23680 </listitem>
23682 <listitem>
23683 <para>
23684 Improvements to the configuration autodetection for installation.
23685 </para>
23686 </listitem>
23688 </itemizedlist>
23689 </para>
23690 <para>
23691 A dump/restore is NOT required for those running 6.3. A
23692 <literal>make distclean</>, <literal>make</>, and <literal>make install</> is all that is required.
23693 This last step should be performed while the postmaster is not running.
23694 You should re-link any custom applications that use <productname>PostgreSQL</productname> libraries.
23695 </para>
23696 <para>
23697 For upgrades from pre-6.3 installations,
23698 refer to the installation and migration instructions for version 6.3.
23699 </para>
23701 <sect2>
23702 <title>Changes</title>
23704 <para>
23705 <programlisting>
23706 ecpg cleanup/fixes, now version 1.1(Michael Meskes)
23707 pg_user cleanup(Bruce)
23708 large object fix for pg_dump and tclsh (alvin)
23709 LIKE fix for multiple adjacent underscores
23710 fix for redefining builtin functions(Thomas)
23711 ultrix4 cleanup
23712 upgrade to pg_access 0.83
23713 updated CLUSTER manual page
23714 multibyte character set support, see doc/README.mb(Tatsuo)
23715 configure --with-pgport fix
23716 pg_ident fix
23717 big-endian fix for backend communications(Kataoka)
23718 SUBSTR() and substring() fix(Jan)
23719 several jdbc fixes(Peter)
23720 libpgtcl improvements, see libptcl/README(Randy Kunkee)
23721 Fix for "Datasize = 0" error(Vadim)
23722 Prevent \do from wrapping(Bruce)
23723 Remove duplicate Russian character set entries
23724 Sunos4 cleanup
23725 Allow optional TABLE key word in LOCK and SELECT INTO(Thomas)
23726 CREATE SEQUENCE options to allow a negative integer(Thomas)
23727 Add "PASSWORD" as an allowed column identifier(Thomas)
23728 Add checks for UNION target fields(Bruce)
23729 Fix Alpha port(Dwayne Bailey)
23730 Fix for text arrays containing quotes(Doug Gibson)
23731 Solaris compile fix(Albert Chin-A-Young)
23732 Better identify tcl and tk libs and includes(Bruce)
23733 </programlisting>
23734 </para>
23735 </sect2>
23736 </sect1>
23738 <sect1 id="release-6-3">
23739 <title>Release 6.3</title>
23741 <note>
23742 <title>Release date</title>
23743 <simpara>1998-03-01</simpara>
23744 </note>
23746 <para>
23747 There are <emphasis>many</emphasis> new features and improvements in this release.
23748 Here is a brief, incomplete summary:
23750 <itemizedlist>
23751 <listitem>
23752 <para>
23753 Many new SQL features, including
23754 full <acronym>SQL92</acronym> subselect capability
23755 (everything is here but target-list subselects).
23756 </para>
23757 </listitem>
23759 <listitem>
23760 <para>
23761 Support for client-side environment variables to specify time zone and date style.
23762 </para>
23763 </listitem>
23765 <listitem>
23766 <para>
23767 Socket interface for client/server connection. This is the default now
23768 so you might need to start <application>postmaster</application> with the
23769 <option>-i</option> flag.
23770 </para>
23771 </listitem>
23773 <listitem>
23774 <para>
23775 Better password authorization mechanisms. Default table privileges have changed.
23776 </para>
23777 </listitem>
23779 <listitem>
23780 <para>
23781 Old-style <firstterm>time travel</firstterm>
23782 has been removed. Performance has been improved.
23783 </para>
23784 </listitem>
23785 </itemizedlist>
23786 </para>
23788 <note>
23789 <para>
23790 Bruce Momjian wrote the following notes to introduce the new release.
23791 </para>
23792 </note>
23794 <para>
23795 There are some general 6.3 issues that I want to mention. These are
23796 only the big items that cannot be described in one sentence. A review
23797 of the detailed changes list is still needed.
23798 </para>
23799 <para>
23800 First, we now have subselects. Now that we have them, I would like to
23801 mention that without subselects, SQL is a very limited language.
23802 Subselects are a major feature, and you should review your code for
23803 places where subselects provide a better solution for your queries. I
23804 think you will find that there are more uses for subselects than you might
23805 think. Vadim has put us on the big SQL map with subselects, and fully
23806 functional ones too. The only thing you cannot do with subselects is to
23807 use them in the target list.
23808 </para>
23809 <para>
23810 Second, 6.3 uses Unix domain sockets rather than TCP/IP by default. To
23811 enable connections from other machines, you have to use the new
23812 postmaster -i option, and of course edit <filename>pg_hba.conf</filename>. Also, for this
23813 reason, the format of <filename>pg_hba.conf</filename> has changed.
23814 </para>
23815 <para>
23816 Third, <type>char()</type> fields will now allow faster access than <type>varchar()</type> or
23817 <type>text</type>. Specifically, the <type>text</> and <type>varchar()</type> have a penalty for access to
23818 any columns after the first column of this type. <type>char()</type> used to also
23819 have this access penalty, but it no longer does. This might suggest that
23820 you redesign some of your tables, especially if you have short character
23821 columns that you have defined as <type>varchar()</type> or <type>text</type>. This and other
23822 changes make 6.3 even faster than earlier releases.
23823 </para>
23824 <para>
23825 We now have passwords definable independent of any Unix file. There are
23826 new SQL USER commands.
23827 See the <citetitle>Administrator's Guide</citetitle> for more
23828 information. There is a new table, pg_shadow, which is used to store
23829 user information and user passwords, and it by default only SELECT-able
23830 by the <systemitem>postgres</systemitem> super-user. pg_user is now a view of pg_shadow, and is
23831 SELECT-able by PUBLIC. You should keep using pg_user in your
23832 application without changes.
23833 </para>
23834 <para>
23835 User-created tables now no longer have SELECT privilege to PUBLIC by
23836 default. This was done because the ANSI standard requires it. You can
23837 of course GRANT any privileges you want after the table is created.
23838 System tables continue to be SELECT-able by PUBLIC.
23839 </para>
23840 <para>
23841 We also have real deadlock detection code. No more sixty-second
23842 timeouts. And the new locking code implements a <acronym>FIFO</acronym> better, so there
23843 should be less resource starvation during heavy use.
23844 </para>
23845 <para>
23846 Many complaints have been made about inadequate documentation in previous
23847 releases. Thomas has put much effort into many new manuals for this
23848 release. Check out the doc/ directory.
23849 </para>
23850 <para>
23851 For performance reasons, time travel is gone, but can be implemented
23852 using triggers (see <filename>pgsql/contrib/spi/README</filename>). Please check out the new
23853 \d command for types, operators, etc. Also, views have their own
23854 privileges now, not based on the underlying tables, so privileges on
23855 them have to be set separately. Check <filename>/pgsql/interfaces</filename> for some new
23856 ways to talk to <productname>PostgreSQL</productname>.
23857 </para>
23858 <para>
23859 This is the first release that really required an explanation for
23860 existing users. In many ways, this was necessary because the new
23861 release removes many limitations, and the work-arounds people were using
23862 are no longer needed.
23863 </para>
23865 <sect2>
23866 <title>Migration to Version 6.3</title>
23868 <para>
23869 A dump/restore using <application>pg_dump</application>
23870 or <application>pg_dumpall</application>
23871 is required for those wishing to migrate data from any
23872 previous release of <productname>PostgreSQL</productname>.
23873 </para>
23874 </sect2>
23876 <sect2>
23877 <title>Changes</title>
23879 <para>
23880 <programlisting>
23881 Bug Fixes
23882 ---------
23883 Fix binary cursors broken by MOVE implementation(Vadim)
23884 Fix for tcl library crash(Jan)
23885 Fix for array handling, from Gerhard Hintermayer
23886 Fix acl error, and remove duplicate pqtrace(Bruce)
23887 Fix psql \e for empty file(Bruce)
23888 Fix for textcat on varchar() fields(Bruce)
23889 Fix for DBT Sendproc (Zeugswetter Andres)
23890 Fix vacuum analyze syntax problem(Bruce)
23891 Fix for international identifiers(Tatsuo)
23892 Fix aggregates on inherited tables(Bruce)
23893 Fix substr() for out-of-bounds data
23894 Fix for select 1=1 or 2=2, select 1=1 and 2=2, and select sum(2+2)(Bruce)
23895 Fix notty output to show status result. -q option still turns it off(Bruce)
23896 Fix for count(*), aggs with views and multiple tables and sum(3)(Bruce)
23897 Fix cluster(Bruce)
23898 Fix for PQtrace start/stop several times(Bruce)
23899 Fix a variety of locking problems like newer lock waiters getting
23900 lock before older waiters, and having readlock people not share
23901 locks if a writer is waiting for a lock, and waiting writers not
23902 getting priority over waiting readers(Bruce)
23903 Fix crashes in psql when executing queries from external files(James)
23904 Fix problem with multiple order by columns, with the first one having
23905 NULL values(Jeroen)
23906 Use correct hash table support functions for float8 and int4(Thomas)
23907 Re-enable JOIN= option in CREATE OPERATOR statement (Thomas)
23908 Change precedence for boolean operators to match expected behavior(Thomas)
23909 Generate elog(ERROR) on over-large integer(Bruce)
23910 Allow multiple-argument functions in constraint clauses(Thomas)
23911 Check boolean input literals for 'true','false','yes','no','1','0'
23912 and throw elog(ERROR) if unrecognized(Thomas)
23913 Major large objects fix
23914 Fix for GROUP BY showing duplicates(Vadim)
23915 Fix for index scans in MergeJoin(Vadim)
23917 Enhancements
23918 ------------
23919 Subselects with EXISTS, IN, ALL, ANY key words (Vadim, Bruce, Thomas)
23920 New User Manual(Thomas, others)
23921 Speedup by inlining some frequently-called functions
23922 Real deadlock detection, no more timeouts(Bruce)
23923 Add SQL92 "constants" CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP,
23924 CURRENT_USER(Thomas)
23925 Modify constraint syntax to be SQL92-compliant(Thomas)
23926 Implement SQL92 PRIMARY KEY and UNIQUE clauses using indexes(Thomas)
23927 Recognize SQL92 syntax for FOREIGN KEY. Throw elog notice(Thomas)
23928 Allow NOT NULL UNIQUE constraint clause (each allowed separately before)(Thomas)
23929 Allow PostgreSQL-style casting ("::") of non-constants(Thomas)
23930 Add support for SQL3 TRUE and FALSE boolean constants(Thomas)
23931 Support SQL92 syntax for IS TRUE/IS FALSE/IS NOT TRUE/IS NOT FALSE(Thomas)
23932 Allow shorter strings for boolean literals (e.g. "t", "tr", "tru")(Thomas)
23933 Allow SQL92 delimited identifiers(Thomas)
23934 Implement SQL92 binary and hexadecimal string decoding (b'10' and x'1F')(Thomas)
23935 Support SQL92 syntax for type coercion of literal strings
23936 (e.g. "DATETIME 'now'")(Thomas)
23937 Add conversions for int2, int4, and OID types to and from text(Thomas)
23938 Use shared lock when building indexes(Vadim)
23939 Free memory allocated for an user query inside transaction block after
23940 this query is done, was turned off in &lt;= 6.2.1(Vadim)
23941 New SQL statement CREATE PROCEDURAL LANGUAGE(Jan)
23942 New <productname>PostgreSQL</productname> Procedural Language (PL) backend interface(Jan)
23943 Rename pg_dump -H option to -h(Bruce)
23944 Add Java support for passwords, European dates(Peter)
23945 Use indexes for LIKE and ~, !~ operations(Bruce)
23946 Add hash functions for datetime and timespan(Thomas)
23947 Time Travel removed(Vadim, Bruce)
23948 Add paging for \d and \z, and fix \i(Bruce)
23949 Add Unix domain socket support to backend and to frontend library(Goran)
23950 Implement CREATE DATABASE/WITH LOCATION and initlocation utility(Thomas)
23951 Allow more SQL92 and/or <productname>PostgreSQL</productname> reserved words as column identifiers(Thomas)
23952 Augment support for SQL92 SET TIME ZONE...(Thomas)
23953 SET/SHOW/RESET TIME ZONE uses TZ backend environment variable(Thomas)
23954 Implement SET keyword = DEFAULT and SET TIME ZONE DEFAULT(Thomas)
23955 Enable SET TIME ZONE using TZ environment variable(Thomas)
23956 Add PGDATESTYLE environment variable to frontend and backend initialization(Thomas)
23957 Add PGTZ, PGCOSTHEAP, PGCOSTINDEX, PGRPLANS, PGGEQO
23958 frontend library initialization environment variables(Thomas)
23959 Regression tests time zone automatically set with "setenv PGTZ PST8PDT"(Thomas)
23960 Add pg_description table for info on tables, columns, operators, types, and
23961 aggregates(Bruce)
23962 Increase 16 char limit on system table/index names to 32 characters(Bruce)
23963 Rename system indexes(Bruce)
23964 Add 'GERMAN' option to SET DATESTYLE(Thomas)
23965 Define an "ISO-style" timespan output format with "hh:mm:ss" fields(Thomas)
23966 Allow fractional values for delta times (e.g. '2.5 days')(Thomas)
23967 Validate numeric input more carefully for delta times(Thomas)
23968 Implement day of year as possible input to date_part()(Thomas)
23969 Define timespan_finite() and text_timespan() functions(Thomas)
23970 Remove archive stuff(Bruce)
23971 Allow for a pg_password authentication database that is separate from
23972 the system password file(Todd)
23973 Dump ACLs, GRANT, REVOKE privileges(Matt)
23974 Define text, varchar, and bpchar string length functions(Thomas)
23975 Fix Query handling for inheritance, and cost computations(Bruce)
23976 Implement CREATE TABLE/AS SELECT (alternative to SELECT/INTO)(Thomas)
23977 Allow NOT, IS NULL, IS NOT NULL in constraints(Thomas)
23978 Implement UNIONs for SELECT(Bruce)
23979 Add UNION, GROUP, DISTINCT to INSERT(Bruce)
23980 varchar() stores only necessary bytes on disk(Bruce)
23981 Fix for BLOBs(Peter)
23982 Mega-Patch for JDBC...see README_6.3 for list of changes(Peter)
23983 Remove unused "option" from PQconnectdb()
23984 New LOCK command and lock manual page describing deadlocks(Bruce)
23985 Add new psql \da, \dd, \df, \do, \dS, and \dT commands(Bruce)
23986 Enhance psql \z to show sequences(Bruce)
23987 Show NOT NULL and DEFAULT in psql \d table(Bruce)
23988 New psql .psqlrc file start-up(Andrew)
23989 Modify sample start-up script in contrib/linux to show syslog(Thomas)
23990 New types for IP and MAC addresses in contrib/ip_and_mac(TomH)
23991 Unix system time conversions with date/time types in contrib/unixdate(Thomas)
23992 Update of contrib stuff(Massimo)
23993 Add Unix socket support to DBD::Pg(Goran)
23994 New python interface (PyGreSQL 2.0)(D'Arcy)
23995 New frontend/backend protocol has a version number, network byte order(Phil)
23996 Security features in pg_hba.conf enhanced and documented, many cleanups(Phil)
23997 CHAR() now faster access than VARCHAR() or TEXT
23998 ecpg embedded SQL preprocessor
23999 Reduce system column overhead(Vadmin)
24000 Remove pg_time table(Vadim)
24001 Add pg_type attribute to identify types that need length (bpchar, varchar)
24002 Add report of offending line when COPY command fails
24003 Allow VIEW privileges to be set separately from the underlying tables.
24004 For security, use GRANT/REVOKE on views as appropriate(Jan)
24005 Tables now have no default GRANT SELECT TO PUBLIC. You must
24006 explicitly grant such privileges.
24007 Clean up tutorial examples(Darren)
24009 Source Tree Changes
24010 -------------------
24011 Add new html development tools, and flow chart in /tools/backend
24012 Fix for SCO compiles
24013 Stratus computer port Robert Gillies
24014 Added support for shlib for BSD44_derived &amp; i386_solaris
24015 Make configure more automated(Brook)
24016 Add script to check regression test results
24017 Break parser functions into smaller files, group together(Bruce)
24018 Rename heap_create to heap_create_and_catalog, rename heap_creatr
24019 to heap_create()(Bruce)
24020 Sparc/Linux patch for locking(TomS)
24021 Remove PORTNAME and reorganize port-specific stuff(Marc)
24022 Add optimizer README file(Bruce)
24023 Remove some recursion in optimizer and clean up some code there(Bruce)
24024 Fix for NetBSD locking(Henry)
24025 Fix for libptcl make(Tatsuo)
24026 AIX patch(Darren)
24027 Change IS TRUE, IS FALSE, ... to expressions using "=" rather than
24028 function calls to istrue() or isfalse() to allow optimization(Thomas)
24029 Various fixes NetBSD/Sparc related(TomH)
24030 Alpha linux locking(Travis,Ryan)
24031 Change elog(WARN) to elog(ERROR)(Bruce)
24032 FAQ for FreeBSD(Marc)
24033 Bring in the PostODBC source tree as part of our standard distribution(Marc)
24034 A minor patch for HP/UX 10 vs 9(Stan)
24035 New pg_attribute.atttypmod for type-specific info like varchar length(Bruce)
24036 UnixWare patches(Billy)
24037 New i386 'lock' for spinlock asm(Billy)
24038 Support for multiplexed backends is removed
24039 Start an OpenBSD port
24040 Start an AUX port
24041 Start a Cygnus port
24042 Add string functions to regression suite(Thomas)
24043 Expand a few function names formerly truncated to 16 characters(Thomas)
24044 Remove un-needed malloc() calls and replace with palloc()(Bruce)
24045 </programlisting>
24046 </para>
24047 </sect2>
24048 </sect1>
24050 <sect1 id="release-6-2-1">
24051 <title>Release 6.2.1</title>
24053 <note>
24054 <title>Release date</title>
24055 <simpara>1997-10-17</simpara>
24056 </note>
24058 <para>
24059 6.2.1 is a bug-fix and usability release on 6.2.
24060 </para>
24061 <para>
24062 Summary:
24064 <itemizedlist>
24065 <listitem>
24066 <para>
24067 Allow strings to span lines, per <acronym>SQL92</acronym>.
24068 </para>
24069 </listitem>
24071 <listitem>
24072 <para>
24073 Include example trigger function for inserting user names on table updates.
24074 </para>
24075 </listitem>
24077 </itemizedlist>
24078 </para>
24079 <para>
24080 This is a minor bug-fix release on 6.2.
24081 For upgrades from pre-6.2 systems, a full dump/reload is required.
24082 Refer to the 6.2 release notes for instructions.
24083 </para>
24085 <sect2>
24086 <title>Migration from version 6.2 to version 6.2.1</title>
24088 <para>
24089 This is a minor bug-fix release. A dump/reload is not required from version 6.2,
24090 but is required from any release prior to 6.2.
24091 </para>
24092 <para>
24093 In upgrading from version 6.2, if you choose to dump/reload you will find that
24094 avg(money) is now calculated correctly. All other bug fixes take effect
24095 upon updating the executables.
24096 </para>
24097 <para>
24098 Another way to avoid dump/reload is to use the following SQL command
24099 from <command>psql</command> to update the existing system table:
24101 <programlisting>
24102 update pg_aggregate set aggfinalfn = 'cash_div_flt8'
24103 where aggname = 'avg' and aggbasetype = 790;
24104 </programlisting>
24105 </para>
24106 <para>
24107 This will need to be done to every existing database, including template1.
24108 </para>
24109 </sect2>
24111 <sect2>
24112 <title>Changes</title>
24114 <para>
24115 <programlisting>
24116 Allow TIME and TYPE column names(Thomas)
24117 Allow larger range of true/false as boolean values(Thomas)
24118 Support output of "now" and "current"(Thomas)
24119 Handle DEFAULT with INSERT of NULL properly(Vadim)
24120 Fix for relation reference counts problem in buffer manager(Vadim)
24121 Allow strings to span lines, like ANSI(Thomas)
24122 Fix for backward cursor with ORDER BY(Vadim)
24123 Fix avg(cash) computation(Thomas)
24124 Fix for specifying a column twice in ORDER/GROUP BY(Vadim)
24125 Documented new libpq function to return affected rows, PQcmdTuples(Bruce)
24126 Trigger function for inserting user names for INSERT/UPDATE(Brook Milligan)
24127 </programlisting>
24128 </para>
24129 </sect2>
24130 </sect1>
24132 <sect1 id="release-6-2">
24133 <title>Release 6.2</title>
24135 <note>
24136 <title>Release date</title>
24137 <simpara>1997-10-02</simpara>
24138 </note>
24140 <para>
24141 A dump/restore is required for those wishing to migrate data from
24142 previous releases of <productname>PostgreSQL</productname>.
24143 </para>
24145 <sect2>
24146 <title>Migration from version 6.1 to version 6.2</title>
24148 <para>
24149 This migration requires a complete dump of the 6.1 database and a
24150 restore of the database in 6.2.
24151 </para>
24152 <para>
24153 Note that the <command>pg_dump</command> and <command>pg_dumpall</command> utility from 6.2 should be used
24154 to dump the 6.1 database.
24155 </para>
24156 </sect2>
24158 <sect2>
24159 <title>Migration from version 1.<replaceable>x</> to version 6.2</title>
24161 <para>
24162 Those migrating from earlier 1.* releases should first upgrade to 1.09
24163 because the COPY output format was improved from the 1.02 release.
24164 </para>
24165 </sect2>
24167 <sect2>
24168 <title>Changes</title>
24170 <para>
24171 <programlisting>
24172 Bug Fixes
24173 ---------
24174 Fix problems with pg_dump for inheritance, sequences, archive tables(Bruce)
24175 Fix compile errors on overflow due to shifts, unsigned, and bad prototypes
24176 from Solaris(Diab Jerius)
24177 Fix bugs in geometric line arithmetic (bad intersection calculations)(Thomas)
24178 Check for geometric intersections at endpoints to avoid rounding ugliness(Thomas)
24179 Catch non-functional delete attempts(Vadim)
24180 Change time function names to be more consistent(Michael Reifenberg)
24181 Check for zero divides(Michael Reifenberg)
24182 Fix very old bug which made rows changed/inserted by a command
24183 visible to the command itself (so we had multiple update of
24184 updated rows, etc.)(Vadim)
24185 Fix for SELECT null, 'fail' FROM pg_am (Patrick)
24186 SELECT NULL as EMPTY_FIELD now allowed(Patrick)
24187 Remove un-needed signal stuff from contrib/pginterface
24188 Fix OR (where x != 1 or x isnull didn't return rows with x NULL) (Vadim)
24189 Fix time_cmp function (Vadim)
24190 Fix handling of functions with non-attribute first argument in
24191 WHERE clauses (Vadim)
24192 Fix GROUP BY when order of entries is different from order
24193 in target list (Vadim)
24194 Fix pg_dump for aggregates without sfunc1 (Vadim)
24196 Enhancements
24197 ------------
24198 Default genetic optimizer GEQO parameter is now 8(Bruce)
24199 Allow use parameters in target list having aggregates in functions(Vadim)
24200 Added JDBC driver as an interface(Adrian &amp; Peter)
24201 pg_password utility
24202 Return number of rows inserted/affected by INSERT/UPDATE/DELETE etc.(Vadim)
24203 Triggers implemented with CREATE TRIGGER (SQL3)(Vadim)
24204 SPI (Server Programming Interface) allows execution of queries inside
24205 C-functions (Vadim)
24206 NOT NULL implemented (SQL92)(Robson Paniago de Miranda)
24207 Include reserved words for string handling, outer joins, and unions(Thomas)
24208 Implement extended comments ("/* ... */") using exclusive states(Thomas)
24209 Add "//" single-line comments(Bruce)
24210 Remove some restrictions on characters in operator names(Thomas)
24211 DEFAULT and CONSTRAINT for tables implemented (SQL92)(Vadim &amp; Thomas)
24212 Add text concatenation operator and function (SQL92)(Thomas)
24213 Support WITH TIME ZONE syntax (SQL92)(Thomas)
24214 Support INTERVAL unit TO unit syntax (SQL92)(Thomas)
24215 Define types DOUBLE PRECISION, INTERVAL, CHARACTER,
24216 and CHARACTER VARYING (SQL92)(Thomas)
24217 Define type FLOAT(p) and rudimentary DECIMAL(p,s), NUMERIC(p,s) (SQL92)(Thomas)
24218 Define EXTRACT(), POSITION(), SUBSTRING(), and TRIM() (SQL92)(Thomas)
24219 Define CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP (SQL92)(Thomas)
24220 Add syntax and warnings for UNION, HAVING, INNER and OUTER JOIN (SQL92)(Thomas)
24221 Add more reserved words, mostly for SQL92 compliance(Thomas)
24222 Allow hh:mm:ss time entry for timespan/reltime types(Thomas)
24223 Add center() routines for lseg, path, polygon(Thomas)
24224 Add distance() routines for circle-polygon, polygon-polygon(Thomas)
24225 Check explicitly for points and polygons contained within polygons
24226 using an axis-crossing algorithm(Thomas)
24227 Add routine to convert circle-box(Thomas)
24228 Merge conflicting operators for different geometric data types(Thomas)
24229 Replace distance operator "&lt;===&gt;" with "&lt;-&gt;"(Thomas)
24230 Replace "above" operator "!^" with "&gt;^" and "below" operator "!|" with "&lt;^"(Thomas)
24231 Add routines for text trimming on both ends, substring, and string position(Thomas)
24232 Added conversion routines circle(box) and poly(circle)(Thomas)
24233 Allow internal sorts to be stored in memory rather than in files(Bruce &amp; Vadim)
24234 Allow functions and operators on internally-identical types to succeed(Bruce)
24235 Speed up backend start-up after profiling analysis(Bruce)
24236 Inline frequently called functions for performance(Bruce)
24237 Reduce open() calls(Bruce)
24238 psql: Add PAGER for \h and \?,\C fix
24239 Fix for psql pager when no tty(Bruce)
24240 New entab utility(Bruce)
24241 General trigger functions for referential integrity (Vadim)
24242 General trigger functions for time travel (Vadim)
24243 General trigger functions for AUTOINCREMENT/IDENTITY feature (Vadim)
24244 MOVE implementation (Vadim)
24246 Source Tree Changes
24247 -------------------
24248 HP-UX 10 patches (Vladimir Turin)
24249 Added SCO support, (Daniel Harris)
24250 MkLinux patches (Tatsuo Ishii)
24251 Change geometric box terminology from "length" to "width"(Thomas)
24252 Deprecate temporary unstored slope fields in geometric code(Thomas)
24253 Remove restart instructions from INSTALL(Bruce)
24254 Look in /usr/ucb first for install(Bruce)
24255 Fix c++ copy example code(Thomas)
24256 Add -o to psql manual page(Bruce)
24257 Prevent relname unallocated string length from being copied into database(Bruce)
24258 Cleanup for NAMEDATALEN use(Bruce)
24259 Fix pg_proc names over 15 chars in output(Bruce)
24260 Add strNcpy() function(Bruce)
24261 remove some (void) casts that are unnecessary(Bruce)
24262 new interfaces directory(Marc)
24263 Replace fopen() calls with calls to fd.c functions(Bruce)
24264 Make functions static where possible(Bruce)
24265 enclose unused functions in #ifdef NOT_USED(Bruce)
24266 Remove call to difftime() in timestamp support to fix SunOS(Bruce &amp; Thomas)
24267 Changes for Digital Unix
24268 Portability fix for pg_dumpall(Bruce)
24269 Rename pg_attribute.attnvals to attdispersion(Bruce)
24270 "intro/unix" manual page now "pgintro"(Bruce)
24271 "built-in" manual page now "pgbuiltin"(Bruce)
24272 "drop" manual page now "drop_table"(Bruce)
24273 Add "create_trigger", "drop_trigger" manual pages(Thomas)
24274 Add constraints regression test(Vadim &amp; Thomas)
24275 Add comments syntax regression test(Thomas)
24276 Add PGINDENT and support program(Bruce)
24277 Massive commit to run PGINDENT on all *.c and *.h files(Bruce)
24278 Files moved to /src/tools directory(Bruce)
24279 SPI and Trigger programming guides (Vadim &amp; D'Arcy)
24280 </programlisting>
24281 </para>
24282 </sect2>
24283 </sect1>
24285 <sect1 id="release-6-1-1">
24286 <title>Release 6.1.1</title>
24288 <note>
24289 <title>Release date</title>
24290 <simpara>1997-07-22</simpara>
24291 </note>
24293 <sect2>
24294 <title>Migration from version 6.1 to version 6.1.1</title>
24296 <para>
24297 This is a minor bug-fix release. A dump/reload is not required from version 6.1,
24298 but is required from any release prior to 6.1.
24299 Refer to the release notes for 6.1 for more details.
24300 </para>
24301 </sect2>
24303 <sect2>
24304 <title>Changes</title>
24306 <para>
24307 <programlisting>
24308 fix for SET with options (Thomas)
24309 allow pg_dump/pg_dumpall to preserve ownership of all tables/objects(Bruce)
24310 new psql \connect option allows changing usernames without changing databases
24311 fix for initdb --debug option(Yoshihiko Ichikawa))
24312 lextest cleanup(Bruce)
24313 hash fixes(Vadim)
24314 fix date/time month boundary arithmetic(Thomas)
24315 fix timezone daylight handling for some ports(Thomas, Bruce, Tatsuo)
24316 timestamp overhauled to use standard functions(Thomas)
24317 other code cleanup in date/time routines(Thomas)
24318 psql's \d now case-insensitive(Bruce)
24319 psql's backslash commands can now have trailing semicolon(Bruce)
24320 fix memory leak in psql when using \g(Bruce)
24321 major fix for endian handling of communication to server(Thomas, Tatsuo)
24322 Fix for Solaris assembler and include files(Yoshihiko Ichikawa)
24323 allow underscores in usernames(Bruce)
24324 pg_dumpall now returns proper status, portability fix(Bruce)
24325 </programlisting>
24326 </para>
24327 </sect2>
24328 </sect1>
24330 <sect1 id="release-6-1">
24331 <title>Release 6.1</title>
24333 <note>
24334 <title>Release date</title>
24335 <simpara>1997-06-08</simpara>
24336 </note>
24338 <para>
24339 The regression tests have been adapted and extensively modified for the
24340 6.1 release of <productname>PostgreSQL</productname>.
24341 </para>
24343 <para>
24344 Three new data types (<type>datetime</type>, <type>timespan</type>, and <type>circle</type>) have been added to
24345 the native set of <productname>PostgreSQL</productname> types. Points, boxes, paths, and polygons
24346 have had their output formats made consistent across the data types.
24347 The polygon output in misc.out has only been spot-checked for correctness
24348 relative to the original regression output.
24349 </para>
24351 <para>
24352 <productname>PostgreSQL</productname> 6.1 introduces a new, alternate
24353 optimizer which uses <firstterm>genetic</firstterm>
24354 algorithms. These algorithms introduce a random behavior in the ordering
24355 of query results when the query contains multiple qualifiers or multiple
24356 tables (giving the optimizer a choice on order of evaluation). Several
24357 regression tests have been modified to explicitly order the results, and
24358 hence are insensitive to optimizer choices. A few regression tests are
24359 for data types which are inherently unordered (e.g. points and time
24360 intervals) and tests involving those types are explicitly bracketed with
24361 <command>set geqo to 'off'</command> and <command>reset geqo</command>.
24362 </para>
24364 <para>
24365 The interpretation of array specifiers (the curly braces around atomic
24366 values) appears to have changed sometime after the original regression
24367 tests were generated. The current <filename>./expected/*.out</filename> files reflect this
24368 new interpretation, which might not be correct!
24369 </para>
24371 <para>
24372 The float8 regression test fails on at least some platforms. This is due
24373 to differences in implementations of <function>pow()</function> and <function>exp()</function> and the signaling
24374 mechanisms used for overflow and underflow conditions.
24375 </para>
24377 <para>
24378 The <quote>random</> results in the random test should cause the
24379 <quote>random</quote> test to be <quote>failed</quote>, since the
24380 regression tests are evaluated using a simple diff. However,
24381 <quote>random</> does not seem to produce random results on my test
24382 machine (Linux/<application>gcc</>/i686).
24383 </para>
24385 <sect2>
24386 <title>Migration to Version 6.1</title>
24388 <para>
24389 This migration requires a complete dump of the 6.0 database and a
24390 restore of the database in 6.1.
24391 </para>
24392 <para>
24393 Those migrating from earlier 1.* releases should first upgrade to 1.09
24394 because the COPY output format was improved from the 1.02 release.
24395 </para>
24396 </sect2>
24398 <sect2>
24399 <title>Changes</title>
24401 <para>
24402 <programlisting>
24403 Bug Fixes
24404 ---------
24405 packet length checking in library routines
24406 lock manager priority patch
24407 check for under/over flow of float8(Bruce)
24408 multitable join fix(Vadim)
24409 SIGPIPE crash fix(Darren)
24410 large object fixes(Sven)
24411 allow btree indexes to handle NULLs(Vadim)
24412 timezone fixes(D'Arcy)
24413 select SUM(x) can return NULL on no rows(Thomas)
24414 internal optimizer, executor bug fixes(Vadim)
24415 fix problem where inner loop in &lt; or &lt;= has no rows(Vadim)
24416 prevent re-commuting join index clauses(Vadim)
24417 fix join clauses for multiple tables(Vadim)
24418 fix hash, hashjoin for arrays(Vadim)
24419 fix btree for abstime type(Vadim)
24420 large object fixes(Raymond)
24421 fix buffer leak in hash indexes (Vadim)
24422 fix rtree for use in inner scan (Vadim)
24423 fix gist for use in inner scan, cleanups (Vadim, Andrea)
24424 avoid unnecessary local buffers allocation (Vadim, Massimo)
24425 fix local buffers leak in transaction aborts (Vadim)
24426 fix file manager memmory leaks, cleanups (Vadim, Massimo)
24427 fix storage manager memmory leaks (Vadim)
24428 fix btree duplicates handling (Vadim)
24429 fix deleted rows reincarnation caused by vacuum (Vadim)
24430 fix SELECT varchar()/char() INTO TABLE made zero-length fields(Bruce)
24431 many psql, pg_dump, and libpq memory leaks fixed using Purify (Igor)
24433 Enhancements
24434 ------------
24435 attribute optimization statistics(Bruce)
24436 much faster new btree bulk load code(Paul)
24437 BTREE UNIQUE added to bulk load code(Vadim)
24438 new lock debug code(Massimo)
24439 massive changes to libpg++(Leo)
24440 new GEQO optimizer speeds table multitable optimization(Martin)
24441 new WARN message for non-unique insert into unique key(Marc)
24442 update x=-3, no spaces, now valid(Bruce)
24443 remove case-sensitive identifier handling(Bruce,Thomas,Dan)
24444 debug backend now pretty-prints tree(Darren)
24445 new Oracle character functions(Edmund)
24446 new plaintext password functions(Dan)
24447 no such class or insufficient privilege changed to distinct messages(Dan)
24448 new ANSI timestamp function(Dan)
24449 new ANSI Time and Date types (Thomas)
24450 move large chunks of data in backend(Martin)
24451 multicolumn btree indexes(Vadim)
24452 new SET var TO value command(Martin)
24453 update transaction status on reads(Dan)
24454 new locale settings for character types(Oleg)
24455 new SEQUENCE serial number generator(Vadim)
24456 GROUP BY function now possible(Vadim)
24457 re-organize regression test(Thomas,Marc)
24458 new optimizer operation weights(Vadim)
24459 new psql \z grant/permit option(Marc)
24460 new MONEY data type(D'Arcy,Thomas)
24461 tcp socket communication speed improved(Vadim)
24462 new VACUUM option for attribute statistics, and for certain columns (Vadim)
24463 many geometric type improvements(Thomas,Keith)
24464 additional regression tests(Thomas)
24465 new datestyle variable(Thomas,Vadim,Martin)
24466 more comparison operators for sorting types(Thomas)
24467 new conversion functions(Thomas)
24468 new more compact btree format(Vadim)
24469 allow pg_dumpall to preserve database ownership(Bruce)
24470 new SET GEQO=# and R_PLANS variable(Vadim)
24471 old (!GEQO) optimizer can use right-sided plans (Vadim)
24472 typechecking improvement in SQL parser(Bruce)
24473 new SET, SHOW, RESET commands(Thomas,Vadim)
24474 new \connect database USER option
24475 new destroydb -i option (Igor)
24476 new \dt and \di psql commands (Darren)
24477 SELECT "\n" now escapes newline (A. Duursma)
24478 new geometry conversion functions from old format (Thomas)
24480 Source tree changes
24481 -------------------
24482 new configuration script(Marc)
24483 readline configuration option added(Marc)
24484 OS-specific configuration options removed(Marc)
24485 new OS-specific template files(Marc)
24486 no more need to edit Makefile.global(Marc)
24487 re-arrange include files(Marc)
24488 nextstep patches (Gregor Hoffleit)
24489 removed Windows-specific code(Bruce)
24490 removed postmaster -e option, now only postgres -e option (Bruce)
24491 merge duplicate library code in front/backends(Martin)
24492 now works with eBones, international Kerberos(Jun)
24493 more shared library support
24494 c++ include file cleanup(Bruce)
24495 warn about buggy flex(Bruce)
24496 DG/UX, Ultrix, IRIX, AIX portability fixes
24497 </programlisting>
24498 </para>
24499 </sect2>
24500 </sect1>
24502 <sect1 id="release-6-0">
24503 <title>Release 6.0</title>
24505 <note>
24506 <title>Release date</title>
24507 <simpara>1997-01-29</simpara>
24508 </note>
24510 <para>
24511 A dump/restore is required for those wishing to migrate data from
24512 previous releases of <productname>PostgreSQL</productname>.
24513 </para>
24515 <sect2>
24516 <title>Migration from version 1.09 to version 6.0</title>
24518 <para>
24519 This migration requires a complete dump of the 1.09 database and a
24520 restore of the database in 6.0.
24521 </para>
24522 </sect2>
24524 <sect2>
24525 <title>Migration from pre-1.09 to version 6.0</title>
24527 <para>
24528 Those migrating from earlier 1.* releases should first upgrade to 1.09
24529 because the COPY output format was improved from the 1.02 release.
24530 </para>
24531 </sect2>
24533 <sect2>
24534 <title>Changes</title>
24536 <para>
24537 <programlisting>
24538 Bug Fixes
24539 ---------
24540 ALTER TABLE bug - running postgres process needs to re-read table definition
24541 Allow vacuum to be run on one table or entire database(Bruce)
24542 Array fixes
24543 Fix array over-runs of memory writes(Kurt)
24544 Fix elusive btree range/non-range bug(Dan)
24545 Fix for hash indexes on some types like time and date
24546 Fix for pg_log size explosion
24547 Fix permissions on lo_export()(Bruce)
24548 Fix uninitialized reads of memory(Kurt)
24549 Fixed ALTER TABLE ... char(3) bug(Bruce)
24550 Fixed a few small memory leaks
24551 Fixed EXPLAIN handling of options and changed full_path option name
24552 Fixed output of group acl privileges
24553 Memory leaks (hunt and destroy with tools like Purify(Kurt)
24554 Minor improvements to rules system
24555 NOTIFY fixes
24556 New asserts for run-checking
24557 Overhauled parser/analyze code to properly report errors and increase speed
24558 Pg_dump -d now handles NULL's properly(Bruce)
24559 Prevent SELECT NULL from crashing server (Bruce)
24560 Properly report errors when INSERT ... SELECT columns did not match
24561 Properly report errors when insert column names were not correct
24562 psql \g filename now works(Bruce)
24563 psql fixed problem with multiple statements on one line with multiple outputs
24564 Removed duplicate system OIDs
24565 SELECT * INTO TABLE . GROUP/ORDER BY gives unlink error if table exists(Bruce)
24566 Several fixes for queries that crashed the backend
24567 Starting quote in insert string errors(Bruce)
24568 Submitting an empty query now returns empty status, not just " " query(Bruce)
24570 Enhancements
24571 ------------
24572 Add EXPLAIN manual page(Bruce)
24573 Add UNIQUE index capability(Dan)
24574 Add hostname/user level access control rather than just hostname and user
24575 Add synonym of != for &lt;&gt;(Bruce)
24576 Allow "select oid,* from table"
24577 Allow BY,ORDER BY to specify columns by number, or by non-alias table.column(Bruce)
24578 Allow COPY from the frontend(Bryan)
24579 Allow GROUP BY to use alias column name(Bruce)
24580 Allow actual compression, not just reuse on the same page(Vadim)
24581 Allow installation-configuration option to auto-add all local users(Bryan)
24582 Allow libpq to distinguish between text value '' and null(Bruce)
24583 Allow non-postgres users with createdb privs to destroydb's
24584 Allow restriction on who can create C functions(Bryan)
24585 Allow restriction on who can do backend COPY(Bryan)
24586 Can shrink tables, pg_time and pg_log(Vadim &amp; Erich)
24587 Change debug level 2 to print queries only, changed debug heading layout(Bruce)
24588 Change default decimal constant representation from float4 to float8(Bruce)
24589 European date format now set when postmaster is started
24590 Execute lowercase function names if not found with exact case
24591 Fixes for aggregate/GROUP processing, allow 'select sum(func(x),sum(x+y) from z'
24592 Gist now included in the distribution(Marc)
24593 Idend authentication of local users(Bryan)
24594 Implement BETWEEN qualifier(Bruce)
24595 Implement IN qualifier(Bruce)
24596 libpq has PQgetisnull()(Bruce)
24597 libpq++ improvements
24598 New options to initdb(Bryan)
24599 Pg_dump allow dump of OIDs(Bruce)
24600 Pg_dump create indexes after tables are loaded for speed(Bruce)
24601 Pg_dumpall dumps all databases, and the user table
24602 Pginterface additions for NULL values(Bruce)
24603 Prevent postmaster from being run as root
24604 psql \h and \? is now readable(Bruce)
24605 psql allow backslashed, semicolons anywhere on the line(Bruce)
24606 psql changed command prompt for lines in query or in quotes(Bruce)
24607 psql char(3) now displays as (bp)char in \d output(Bruce)
24608 psql return code now more accurate(Bryan?)
24609 psql updated help syntax(Bruce)
24610 Re-visit and fix vacuum(Vadim)
24611 Reduce size of regression diffs, remove timezone name difference(Bruce)
24612 Remove compile-time parameters to enable binary distributions(Bryan)
24613 Reverse meaning of HBA masks(Bryan)
24614 Secure Authentication of local users(Bryan)
24615 Speed up vacuum(Vadim)
24616 Vacuum now had VERBOSE option(Bruce)
24618 Source tree changes
24619 -------------------
24620 All functions now have prototypes that are compared against the calls
24621 Allow asserts to be disabled easily from Makefile.global(Bruce)
24622 Change oid constants used in code to #define names
24623 Decoupled sparc and solaris defines(Kurt)
24624 Gcc -Wall compiles cleanly with warnings only from unfixable constructs
24625 Major include file reorganization/reduction(Marc)
24626 Make now stops on compile failure(Bryan)
24627 Makefile restructuring(Bryan, Marc)
24628 Merge bsdi_2_1 to bsdi(Bruce)
24629 Monitor program removed
24630 Name change from Postgres95 to PostgreSQL
24631 New config.h file(Marc, Bryan)
24632 PG_VERSION now set to 6.0 and used by postmaster
24633 Portability additions, including Ultrix, DG/UX, AIX, and Solaris
24634 Reduced the number of #define's, centralized #define's
24635 Remove duplicate OIDS in system tables(Dan)
24636 Remove duplicate system catalog info or report mismatches(Dan)
24637 Removed many os-specific #define's
24638 Restructured object file generation/location(Bryan, Marc)
24639 Restructured port-specific file locations(Bryan, Marc)
24640 Unused/uninitialized variables corrected
24641 </programlisting>
24642 </para>
24643 </sect2>
24644 </sect1>
24646 <sect1 id="release-1-09">
24647 <title>Release 1.09</title>
24649 <note>
24650 <title>Release date</title>
24651 <simpara>1996-11-04</simpara>
24652 </note>
24654 <para>
24655 Sorry, we didn't keep track of changes from 1.02 to 1.09. Some of
24656 the changes listed in 6.0 were actually included in the 1.02.1 to 1.09
24657 releases.
24658 </para>
24659 </sect1>
24661 <sect1 id="release-1-02">
24662 <title>Release 1.02</title>
24664 <note>
24665 <title>Release date</title>
24666 <simpara>1996-08-01</simpara>
24667 </note>
24669 <sect2>
24670 <title>Migration from version 1.02 to version 1.02.1</title>
24672 <para>
24673 Here is a new migration file for 1.02.1. It includes the 'copy' change
24674 and a script to convert old <acronym>ASCII</acronym> files.
24675 </para>
24676 <note>
24677 <para>
24678 The following notes are for the benefit of users who want to migrate
24679 databases from <productname>Postgres95</> 1.01 and 1.02 to <productname>Postgres95</> 1.02.1.
24680 </para>
24681 <para>
24682 If you are starting afresh with <productname>Postgres95</> 1.02.1 and do not need
24683 to migrate old databases, you do not need to read any further.
24684 </para>
24685 </note>
24687 <para>
24688 In order to upgrade older <productname>Postgres95</> version 1.01 or 1.02 databases to
24689 version 1.02.1, the following steps are required:
24690 </para>
24691 <procedure>
24692 <step>
24693 <para>
24694 Start up a new 1.02.1 postmaster
24695 </para>
24696 </step>
24697 <step>
24698 <para>
24699 Add the new built-in functions and operators of 1.02.1 to 1.01 or 1.02
24700 databases. This is done by running the new 1.02.1 server against
24701 your own 1.01 or 1.02 database and applying the queries attached at
24702 the end of the file. This can be done easily through <command>psql</>. If your
24703 1.01 or 1.02 database is named <literal>testdb</literal> and you have cut the commands
24704 from the end of this file and saved them in <filename>addfunc.sql</filename>:
24705 <programlisting>
24706 % psql testdb -f addfunc.sql
24707 </programlisting>
24709 Those upgrading 1.02 databases will get a warning when executing the
24710 last two statements in the file because they are already present in 1.02. This is
24711 not a cause for concern.
24712 </para>
24713 </step>
24714 </procedure>
24715 </sect2>
24717 <sect2>
24718 <title>Dump/Reload Procedure</title>
24720 <para>
24721 If you are trying to reload a pg_dump or text-mode, <literal>copy tablename to
24722 stdout</literal> generated with a previous version, you will need to run the
24723 attached <command>sed</command> script on the ASCII file before loading it into the
24724 database. The old format used '.' as end-of-data, while '\.' is now the
24725 end-of-data marker. Also, empty strings are now loaded in as '' rather
24726 than NULL. See the copy manual page for full details.
24728 <programlisting>
24729 sed 's/^\.$/\\./g' &lt;in_file &gt;out_file
24730 </programlisting>
24731 </para>
24732 <para>
24733 If you are loading an older binary copy or non-<systemitem>stdout</> copy, there is no
24734 end-of-data character, and hence no conversion necessary.
24736 <programlisting>
24737 -- following lines added by agc to reflect the case-insensitive
24738 -- regexp searching for varchar (in 1.02), and bpchar (in 1.02.1)
24739 create operator ~* (leftarg = bpchar, rightarg = text, procedure = texticregexeq);
24740 create operator !~* (leftarg = bpchar, rightarg = text, procedure = texticregexne);
24741 create operator ~* (leftarg = varchar, rightarg = text, procedure = texticregexeq);
24742 create operator !~* (leftarg = varchar, rightarg = text, procedure = texticregexne);
24743 </programlisting>
24744 </para>
24745 </sect2>
24747 <sect2>
24748 <title>Changes</title>
24750 <para>
24751 <programlisting>
24752 Source code maintenance and development
24753 * worldwide team of volunteers
24754 * the source tree now in CVS at ftp.ki.net
24756 Enhancements
24757 * psql (and underlying libpq library) now has many more options for
24758 formatting output, including HTML
24759 * pg_dump now output the schema and/or the data, with many fixes to
24760 enhance completeness.
24761 * psql used in place of monitor in administration shell scripts.
24762 monitor to be deprecated in next release.
24763 * date/time functions enhanced
24764 * NULL insert/update/comparison fixed/enhanced
24765 * TCL/TK lib and shell fixed to work with both tck7.4/tk4.0 and tcl7.5/tk4.1
24767 Bug Fixes (almost too numerous to mention)
24768 * indexes
24769 * storage management
24770 * check for NULL pointer before dereferencing
24771 * Makefile fixes
24773 New Ports
24774 * added SolarisX86 port
24775 * added BSD/OS 2.1 port
24776 * added DG/UX port
24777 </programlisting>
24778 </para>
24779 <!--
24780 Contributors (apologies to any missed)
24781 * Kurt J. Lidl &lt;lidl@va.pubnix.com&gt;
24782 (missed in first run, but no less important)
24783 * Erich Stamberger &lt;eberger@gewi.kfunigraz.ac.at&gt;
24784 * Jason Wright &lt;jason@shiloh.vnet.net&gt;
24785 * Cees de Groot &lt;C.deGroot@inter.NL.net&gt;
24786 * ernst.molitor@uni-bonn.de
24787 * michael.siebenborn@ae3.Hypo.DE (Michael Siebenborn (6929))
24788 * Brian E. Gallew &lt;geek+@cmu.edu&gt;
24789 * Vadim B. Mikheev &lt;vadim@sable.krasnoyarsk.su&gt;
24790 * Adam Sussman &lt;myddryn@vidya.com&gt;
24791 * Chris Dunlop &lt;chris@onthe.net.au&gt;
24792 * Marc G. Fournier &lt;scrappy@ki.net&gt;
24793 * Dan McGuirk &lt;mcguirk@indirect.com&gt;
24794 * Dr_George_D_Detlefsen &lt;drgeorge@ilt.com&gt;
24795 * Erich Stamberger &lt;eberger@gewi.kfunigraz.ac.at&gt;
24796 * Massimo Dal Zotto &lt;dz@cs.unitn.it&gt;
24797 * Randy Kunkee &lt;kunkee@Starbase.NeoSoft.COM&gt;
24798 * Rick Weldon &lt;rick@wisetech.com&gt;
24799 * Thomas van Reimersdahl &lt;reimersd@dali.techinfo.rwth-aachen.de&gt;
24800 * david bennett &lt;dave@bensoft.com&gt;
24801 * ernst.molitor@uni-bonn.de
24802 * Julian Assange &lt;proff@suburbia.net&gt;
24803 * Bruce Momjian &lt;pgman@candle.pha.pa.us&gt;
24804 * Paul "Shag" Walmsley &lt;ccshag@cclabs.missouri.edu&gt;
24805 * "Alistair G. Crooks" &lt;azcb0@sde.uts.amdahl.com&gt;
24807 </sect2>
24808 </sect1>
24810 <sect1 id="release-1-01">
24811 <title>Release 1.01</title>
24813 <note>
24814 <title>Release date</title>
24815 <simpara>1996-02-23</simpara>
24816 </note>
24819 <sect2>
24820 <title>Migration from version 1.0 to version 1.01</title>
24822 <para>
24823 The following notes are for the benefit of users who want to migrate
24824 databases from <productname>Postgres95</> 1.0 to <productname>Postgres95</> 1.01.
24825 </para>
24826 <para>
24827 If you are starting afresh with <productname>Postgres95</> 1.01 and do not need
24828 to migrate old databases, you do not need to read any further.
24829 </para>
24830 <para>
24831 In order to <productname>Postgres95</> version 1.01 with databases created with
24832 <productname>Postgres95</> version 1.0, the following steps are required:
24833 </para>
24834 <procedure>
24835 <step>
24836 <para>
24837 Set the definition of <symbol>NAMEDATALEN</symbol> in <filename>src/Makefile.global</filename> to 16
24838 and <symbol>OIDNAMELEN</symbol> to 20.
24839 </para>
24840 </step>
24841 <step>
24842 <para>
24843 Decide whether you want to use Host based authentication.
24844 </para>
24845 <substeps>
24846 <step>
24847 <para>
24848 If you do, you must create a file name <literal>pg_hba</literal> in your top-level data
24849 directory (typically the value of your <envar>$PGDATA</envar>). <filename>src/libpq/pg_hba</filename>
24850 shows an example syntax.
24851 </para>
24852 </step>
24853 <step>
24854 <para>
24855 If you do not want host-based authentication, you can comment out
24856 the line:
24857 <programlisting>
24858 HBA = 1
24859 </programlisting>
24860 in <filename>src/Makefile.global</filename>
24861 </para>
24862 <para>
24863 Note that host-based authentication is turned on by default, and if
24864 you do not take steps A or B above, the out-of-the-box 1.01 will
24865 not allow you to connect to 1.0 databases.
24866 </para>
24867 </step>
24868 </substeps>
24869 </step>
24871 <step>
24872 <para>
24873 Compile and install 1.01, but DO NOT do the <command>initdb</command> step.
24874 </para>
24875 </step>
24876 <step>
24877 <para>
24878 Before doing anything else, terminate your 1.0 postmaster, and
24879 backup your existing <envar>$PGDATA</envar> directory.
24880 </para>
24881 </step>
24882 <step>
24883 <para>
24884 Set your <envar>PGDATA</envar> environment variable to your 1.0 databases, but set up
24885 path up so that 1.01 binaries are being used.
24886 </para>
24887 </step>
24888 <step>
24889 <para>
24890 Modify the file <filename><envar>$PGDATA</envar>/PG_VERSION</filename> from 5.0 to 5.1
24891 </para>
24892 </step>
24893 <step>
24894 <para>
24895 Start up a new 1.01 postmaster
24896 </para>
24897 </step>
24898 <step>
24899 <para>
24900 Add the new built-in functions and operators of 1.01 to 1.0
24901 databases. This is done by running the new 1.01 server against
24902 your own 1.0 database and applying the queries attached and saving
24903 in the file 1.0_to_1.01.sql. This can be done easily through <command>psql</command>.
24904 If your 1.0 database is name <literal>testdb</literal>:
24906 <programlisting>
24907 % psql testdb -f 1.0_to_1.01.sql
24908 </programlisting>
24910 and then execute the following commands (cut and paste from here):
24912 <programlisting>
24913 -- add builtin functions that are new to 1.01
24915 create function int4eqoid (int4, oid) returns bool as 'foo'
24916 language 'internal';
24917 create function oideqint4 (oid, int4) returns bool as 'foo'
24918 language 'internal';
24919 create function char2icregexeq (char2, text) returns bool as 'foo'
24920 language 'internal';
24921 create function char2icregexne (char2, text) returns bool as 'foo'
24922 language 'internal';
24923 create function char4icregexeq (char4, text) returns bool as 'foo'
24924 language 'internal';
24925 create function char4icregexne (char4, text) returns bool as 'foo'
24926 language 'internal';
24927 create function char8icregexeq (char8, text) returns bool as 'foo'
24928 language 'internal';
24929 create function char8icregexne (char8, text) returns bool as 'foo'
24930 language 'internal';
24931 create function char16icregexeq (char16, text) returns bool as 'foo'
24932 language 'internal';
24933 create function char16icregexne (char16, text) returns bool as 'foo'
24934 language 'internal';
24935 create function texticregexeq (text, text) returns bool as 'foo'
24936 language 'internal';
24937 create function texticregexne (text, text) returns bool as 'foo'
24938 language 'internal';
24940 -- add builtin functions that are new to 1.01
24942 create operator = (leftarg = int4, rightarg = oid, procedure = int4eqoid);
24943 create operator = (leftarg = oid, rightarg = int4, procedure = oideqint4);
24944 create operator ~* (leftarg = char2, rightarg = text, procedure = char2icregexeq);
24945 create operator !~* (leftarg = char2, rightarg = text, procedure = char2icregexne);
24946 create operator ~* (leftarg = char4, rightarg = text, procedure = char4icregexeq);
24947 create operator !~* (leftarg = char4, rightarg = text, procedure = char4icregexne);
24948 create operator ~* (leftarg = char8, rightarg = text, procedure = char8icregexeq);
24949 create operator !~* (leftarg = char8, rightarg = text, procedure = char8icregexne);
24950 create operator ~* (leftarg = char16, rightarg = text, procedure = char16icregexeq);
24951 create operator !~* (leftarg = char16, rightarg = text, procedure = char16icregexne);
24952 create operator ~* (leftarg = text, rightarg = text, procedure = texticregexeq);
24953 create operator !~* (leftarg = text, rightarg = text, procedure = texticregexne);
24954 </programlisting>
24955 </para>
24956 </step>
24957 </procedure>
24958 </sect2>
24960 <sect2>
24961 <title>Changes</title>
24963 <para>
24964 <programlisting>
24965 Incompatibilities:
24966 * 1.01 is backwards compatible with 1.0 database provided the user
24967 follow the steps outlined in the MIGRATION_from_1.0_to_1.01 file.
24968 If those steps are not taken, 1.01 is not compatible with 1.0 database.
24970 Enhancements:
24971 * added PQdisplayTuples() to libpq and changed monitor and psql to use it
24972 * added NeXT port (requires SysVIPC implementation)
24973 * added CAST .. AS ... syntax
24974 * added ASC and DESC key words
24975 * added 'internal' as a possible language for CREATE FUNCTION
24976 internal functions are C functions which have been statically linked
24977 into the postgres backend.
24978 * a new type "name" has been added for system identifiers (table names,
24979 attribute names, etc.) This replaces the old char16 type. The
24980 of name is set by the NAMEDATALEN #define in src/Makefile.global
24981 * a readable reference manual that describes the query language.
24982 * added host-based access control. A configuration file ($PGDATA/pg_hba)
24983 is used to hold the configuration data. If host-based access control
24984 is not desired, comment out HBA=1 in src/Makefile.global.
24985 * changed regex handling to be uniform use of Henry Spencer's regex code
24986 regardless of platform. The regex code is included in the distribution
24987 * added functions and operators for case-insensitive regular expressions.
24988 The operators are ~* and !~*.
24989 * pg_dump uses COPY instead of SELECT loop for better performance
24991 Bug fixes:
24992 * fixed an optimizer bug that was causing core dumps when
24993 functions calls were used in comparisons in the WHERE clause
24994 * changed all uses of getuid to geteuid so that effective uids are used
24995 * psql now returns non-zero status on errors when using -c
24996 * applied public patches 1-14
24997 </programlisting>
24998 </para>
24999 </sect2>
25000 </sect1>
25002 <sect1 id="release-1-0">
25003 <title>Release 1.0</title>
25005 <note>
25006 <title>Release date</title>
25007 <simpara>1995-09-05</simpara>
25008 </note>
25010 <sect2>
25011 <title>Changes</title>
25013 <para>
25014 <programlisting>
25015 Copyright change:
25016 * The copyright of <productname>Postgres</productname> 1.0 has been loosened to be freely modifiable
25017 and modifiable for any purpose. Please read the COPYRIGHT file.
25018 Thanks to Professor Michael Stonebraker for making this possible.
25020 Incompatibilities:
25021 * date formats have to be MM-DD-YYYY (or DD-MM-YYYY if you're using
25022 EUROPEAN STYLE). This follows SQL-92 specs.
25023 * "delimiters" is now a key word
25025 Enhancements:
25026 * sql LIKE syntax has been added
25027 * copy command now takes an optional USING DELIMITER specification.
25028 delimiters can be any single-character string.
25029 * IRIX 5.3 port has been added.
25030 Thanks to Paul Walmsley and others.
25031 * updated pg_dump to work with new libpq
25032 * \d has been added psql
25033 Thanks to Keith Parks
25034 * regexp performance for architectures that use POSIX regex has been
25035 improved due to caching of precompiled patterns.
25036 Thanks to Alistair Crooks
25037 * a new version of libpq++
25038 Thanks to William Wanders
25040 Bug fixes:
25041 * arbitrary userids can be specified in the createuser script
25042 * \c to connect to other databases in psql now works.
25043 * bad pg_proc entry for float4inc() is fixed
25044 * users with usecreatedb field set can now create databases without
25045 having to be usesuper
25046 * remove access control entries when the entry no longer has any
25047 privileges
25048 * fixed non-portable datetimes implementation
25049 * added kerberos flags to the src/backend/Makefile
25050 * libpq now works with kerberos
25051 * typographic errors in the user manual have been corrected.
25052 * btrees with multiple index never worked, now we tell you they don't
25053 work when you try to use them
25054 </programlisting>
25055 </para>
25056 </sect2>
25057 </sect1>
25059 <sect1 id="release-0-03">
25060 <title><productname>Postgres95</productname> Release 0.03</title>
25062 <note>
25063 <title>Release date</title>
25064 <simpara>1995-07-21</simpara>
25065 </note>
25067 <sect2>
25068 <title>Changes</title>
25069 <para>
25070 <programlisting>
25071 Incompatible changes:
25072 * BETA-0.3 IS INCOMPATIBLE WITH DATABASES CREATED WITH PREVIOUS VERSIONS
25073 (due to system catalog changes and indexing structure changes).
25074 * double-quote (") is deprecated as a quoting character for string literals;
25075 you need to convert them to single quotes ('). <!-- " -->
25076 * name of aggregates (eg. int4sum) are renamed in accordance with the
25077 SQL standard (eg. sum).
25078 * CHANGE ACL syntax is replaced by GRANT/REVOKE syntax.
25079 * float literals (eg. 3.14) are now of type float4 (instead of float8 in
25080 previous releases); you might have to do typecasting if you depend on it
25081 being of type float8. If you neglect to do the typecasting and you assign
25082 a float literal to a field of type float8, you might get incorrect values
25083 stored!
25084 * LIBPQ has been totally revamped so that frontend applications
25085 can connect to multiple backends
25086 * the usesysid field in pg_user has been changed from int2 to int4 to
25087 allow wider range of Unix user ids.
25088 * the netbsd/freebsd/bsd o/s ports have been consolidated into a
25089 single BSD44_derived port. (thanks to Alistair Crooks)
25091 SQL standard-compliance (the following details changes that makes postgres95
25092 more compliant to the SQL-92 standard):
25093 * the following SQL types are now built-in: smallint, int(eger), float, real,
25094 char(N), varchar(N), date and time.
25096 The following are aliases to existing postgres types:
25097 smallint -&gt; int2
25098 integer, int -&gt; int4
25099 float, real -&gt; float4
25100 char(N) and varchar(N) are implemented as truncated text types. In
25101 addition, char(N) does blank-padding.
25102 * single-quote (') is used for quoting string literals; '' (in addition to
25103 \') is supported as means of inserting a single quote in a string
25104 * SQL standard aggregate names (MAX, MIN, AVG, SUM, COUNT) are used
25105 (Also, aggregates can now be overloaded, i.e. you can define your
25106 own MAX aggregate to take in a user-defined type.)
25107 * CHANGE ACL removed. GRANT/REVOKE syntax added.
25108 - Privileges can be given to a group using the "GROUP" key word.
25109 For example:
25110 GRANT SELECT ON foobar TO GROUP my_group;
25111 The key word 'PUBLIC' is also supported to mean all users.
25113 Privileges can only be granted or revoked to one user or group
25114 at a time.
25116 "WITH GRANT OPTION" is not supported. Only class owners can change
25117 access control
25118 - The default access control is to grant users readonly access.
25119 You must explicitly grant insert/update access to users. To change
25120 this, modify the line in
25121 src/backend/utils/acl.h
25122 that defines ACL_WORLD_DEFAULT
25124 Bug fixes:
25125 * the bug where aggregates of empty tables were not run has been fixed. Now,
25126 aggregates run on empty tables will return the initial conditions of the
25127 aggregates. Thus, COUNT of an empty table will now properly return 0.
25128 MAX/MIN of an empty table will return a row of value NULL.
25129 * allow the use of \; inside the monitor
25130 * the LISTEN/NOTIFY asynchronous notification mechanism now work
25131 * NOTIFY in rule action bodies now work
25132 * hash indexes work, and access methods in general should perform better.
25133 creation of large btree indexes should be much faster. (thanks to Paul
25134 Aoki)
25136 Other changes and enhancements:
25137 * addition of an EXPLAIN statement used for explaining the query execution
25138 plan (eg. "EXPLAIN SELECT * FROM EMP" prints out the execution plan for
25139 the query).
25140 * WARN and NOTICE messages no longer have timestamps on them. To turn on
25141 timestamps of error messages, uncomment the line in
25142 src/backend/utils/elog.h:
25143 /* define ELOG_TIMESTAMPS */
25144 * On an access control violation, the message
25145 "Either no such class or insufficient privilege"
25146 will be given. This is the same message that is returned when
25147 a class is not found. This dissuades non-privileged users from
25148 guessing the existence of privileged classes.
25149 * some additional system catalog changes have been made that are not
25150 visible to the user.
25152 libpgtcl changes:
25153 * The -oid option has been added to the "pg_result" tcl command.
25154 pg_result -oid returns oid of the last row inserted. If the
25155 last command was not an INSERT, then pg_result -oid returns "".
25156 * the large object interface is available as pg_lo* tcl commands:
25157 pg_lo_open, pg_lo_close, pg_lo_creat, etc.
25159 Portability enhancements and New Ports:
25160 * flex/lex problems have been cleared up. Now, you should be able to use
25161 flex instead of lex on any platforms. We no longer make assumptions of
25162 what lexer you use based on the platform you use.
25163 * The Linux-ELF port is now supported. Various configuration have been
25164 tested: The following configuration is known to work:
25165 kernel 1.2.10, gcc 2.6.3, libc 4.7.2, flex 2.5.2, bison 1.24
25166 with everything in ELF format,
25168 New utilities:
25169 * ipcclean added to the distribution
25170 ipcclean usually does not need to be run, but if your backend crashes
25171 and leaves shared memory segments hanging around, ipcclean will
25172 clean them up for you.
25174 New documentation:
25175 * the user manual has been revised and libpq documentation added.
25176 </programlisting>
25177 </para>
25178 </sect2>
25179 </sect1>
25181 <sect1 id="release-0-02">
25182 <title><productname>Postgres95</productname> Release 0.02</title>
25184 <note>
25185 <title>Release date</title>
25186 <simpara>1995-05-25</simpara>
25187 </note>
25189 <sect2>
25190 <title>Changes</title>
25192 <para>
25193 <programlisting>
25194 Incompatible changes:
25195 * The SQL statement for creating a database is 'CREATE DATABASE' instead
25196 of 'CREATEDB'. Similarly, dropping a database is 'DROP DATABASE' instead
25197 of 'DESTROYDB'. However, the names of the executables 'createdb' and
25198 'destroydb' remain the same.
25200 New tools:
25201 * pgperl - a Perl (4.036) interface to Postgres95
25202 * pg_dump - a utility for dumping out a postgres database into a
25203 script file containing query commands. The script files are in a ASCII
25204 format and can be used to reconstruct the database, even on other
25205 machines and other architectures. (Also good for converting
25206 a Postgres 4.2 database to Postgres95 database.)
25208 The following ports have been incorporated into postgres95-beta-0.02:
25209 * the NetBSD port by Alistair Crooks
25210 * the AIX port by Mike Tung
25211 * the Windows NT port by Jon Forrest (more stuff but not done yet)
25212 * the Linux ELF port by Brian Gallew
25214 The following bugs have been fixed in postgres95-beta-0.02:
25215 * new lines not escaped in COPY OUT and problem with COPY OUT when first
25216 attribute is a '.'
25217 * cannot type return to use the default user id in createuser
25218 * SELECT DISTINCT on big tables crashes
25219 * Linux installation problems
25220 * monitor doesn't allow use of 'localhost' as PGHOST
25221 * psql core dumps when doing \c or \l
25222 * the "pgtclsh" target missing from src/bin/pgtclsh/Makefile
25223 * libpgtcl has a hard-wired default port number
25224 * SELECT DISTINCT INTO TABLE hangs
25225 * CREATE TYPE doesn't accept 'variable' as the internallength
25226 * wrong result using more than 1 aggregate in a SELECT
25227 </programlisting>
25228 </para>
25229 </sect2>
25230 </sect1>
25232 <sect1 id="release-0-01">
25233 <title><productname>Postgres95</productname> Release 0.01</title>
25235 <note>
25236 <title>Release date</title>
25237 <simpara>1995-05-01</simpara>
25238 </note>
25240 <para>
25241 Initial release.
25242 </para>
25243 </sect1>
25245 <![IGNORE[
25246 <sect1 id="timing-results">
25247 <title>Timing Results</title>
25249 <para>
25250 These timing results are from running the regression test with the commands
25252 <programlisting>
25253 % cd src/test/regress
25254 % make all
25255 % time make runtest
25256 </programlisting>
25257 </para>
25258 <para>
25259 Timing under Linux 2.0.27 seems to have a roughly 5% variation from run
25260 to run, presumably due to the scheduling vagaries of multitasking systems.
25261 </para>
25263 <sect2>
25264 <title>Version 6.5</title>
25266 <para>
25267 As has been the case for previous releases, timing between
25268 releases is not directly comparable since new regression tests
25269 have been added. In general, 6.5 is faster than previous
25270 releases.
25271 </para>
25273 <para>
25274 Timing with <function>fsync()</function> disabled:
25276 <programlisting>
25277 Time System
25278 02:00 Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 -O2 -m486
25279 04:38 Sparc Ultra 1 143MHz, 64MB, Solaris 2.6
25280 </programlisting>
25281 </para>
25283 <para>
25284 Timing with <function>fsync()</function> enabled:
25286 <programlisting>
25287 Time System
25288 04:21 Dual Pentium Pro 180, 224MB, UW-SCSI, Linux 2.0.36, gcc 2.7.2.3 -O2 -m486
25289 </programlisting>
25291 For the <systemitem class="osname">Linux</systemitem> system above, using <acronym>UW-SCSI</acronym> disks rather than (older) <acronym>IDE</acronym>
25292 disks leads to a 50% improvement in speed on the regression test.
25293 </para>
25294 </sect2>
25296 <sect2>
25297 <title>Version 6.4beta</title>
25299 <para>
25300 The times for this release are not directly comparable to those for previous releases
25301 since some additional regression tests have been included.
25302 In general, however, 6.4 should be slightly faster than the previous release (thanks, Bruce!).
25303 </para>
25304 <para>
25305 <programlisting>
25306 Time System
25307 02:26 Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
25308 </programlisting>
25309 </para>
25310 </sect2>
25312 <sect2>
25313 <title>Version 6.3</title>
25315 <para>
25316 The times for this release are not directly comparable to those for previous releases
25317 since some additional regression tests have been included and some obsolete tests involving
25318 time travel have been removed.
25319 In general, however, 6.3 is substantially faster than previous releases (thanks, Bruce!).
25320 </para>
25321 <para>
25322 <programlisting>
25323 Time System
25324 02:30 Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
25325 04:12 Dual Pentium Pro 180, 96MB, EIDE, Linux 2.0.30, gcc 2.7.2.1 -O2 -m486
25326 </programlisting>
25327 </para>
25328 </sect2>
25330 <sect2>
25331 <title>Version 6.1</title>
25333 <para>
25334 <programlisting>
25335 Time System
25336 06:12 Pentium Pro 180, 32MB, EIDE, Linux 2.0.30, gcc 2.7.2 -O2 -m486
25337 12:06 P-100, 48MB, Linux 2.0.29, gcc
25338 39:58 Sparc IPC 32MB, Solaris 2.5, gcc 2.7.2.1 -O -g
25339 </programlisting>
25340 </para>
25341 </sect2>
25342 </sect1>
25344 </appendix>