Fix xslt_process() to ensure that it inserts a NULL terminator after the
[PostgreSQL.git] / doc / src / sgml / release-8.3.sgml
blobe1b0b0c0ea339fa6ffb163c6260a44522b77e946
1 <!-- $PostgreSQL$ -->
2 <!-- See header comment in release.sgml about typical markup -->
4 <sect1 id="release-8-3-7">
5 <title>Release 8.3.7</title>
7 <note>
8 <title>Release date</title>
9 <simpara>2009-03-16</simpara>
10 </note>
12 <para>
13 This release contains a variety of fixes from 8.3.6.
14 For information about new features in the 8.3 major release, see
15 <xref linkend="release-8-3">.
16 </para>
18 <sect2>
19 <title>Migration to Version 8.3.7</title>
21 <para>
22 A dump/restore is not required for those running 8.3.X.
23 However, if you are upgrading from a version earlier than 8.3.5,
24 see the release notes for 8.3.5.
25 </para>
27 </sect2>
29 <sect2>
30 <title>Changes</title>
32 <itemizedlist>
34 <listitem>
35 <para>
36 Prevent error recursion crashes when encoding conversion fails (Tom)
37 </para>
39 <para>
40 This change extends fixes made in the last two minor releases for
41 related failure scenarios. The previous fixes were narrowly tailored
42 for the original problem reports, but we have now recognized that
43 <emphasis>any</> error thrown by an encoding conversion function could
44 potentially lead to infinite recursion while trying to report the
45 error. The solution therefore is to disable translation and encoding
46 conversion and report the plain-ASCII form of any error message,
47 if we find we have gotten into a recursive error reporting situation.
48 (CVE-2009-0922)
49 </para>
50 </listitem>
52 <listitem>
53 <para>
54 Disallow <command>CREATE CONVERSION</> with the wrong encodings
55 for the specified conversion function (Heikki)
56 </para>
58 <para>
59 This prevents one possible scenario for encoding conversion failure.
60 The previous change is a backstop to guard against other kinds of
61 failures in the same area.
62 </para>
63 </listitem>
65 <listitem>
66 <para>
67 Fix <function>xpath()</> to not modify the path expression unless
68 necessary, and to make a saner attempt at it when necessary (Andrew)
69 </para>
71 <para>
72 The SQL standard suggests that <function>xpath</> should work on data
73 that is a document fragment, but <application>libxml</> doesn't support
74 that, and indeed it's not clear that this is sensible according to the
75 XPath standard. <function>xpath</> attempted to work around this
76 mismatch by modifying both the data and the path expression, but the
77 modification was buggy and could cause valid searches to fail. Now,
78 <function>xpath</> checks whether the data is in fact a well-formed
79 document, and if so invokes <application>libxml</> with no change to the
80 data or path expression. Otherwise, a different modification method
81 that is somewhat less likely to fail is used.
82 </para>
84 <note>
85 <para>
86 The new modification method is still not 100% satisfactory, and it
87 seems likely that no real solution is possible. This patch should
88 therefore be viewed as a band-aid to keep from breaking existing
89 applications unnecessarily. It is likely that
90 <productname>PostgreSQL</> 8.4 will simply reject use of
91 <function>xpath</> on data that is not a well-formed document.
92 </para>
93 </note>
94 </listitem>
96 <listitem>
97 <para>
98 Fix core dump when <function>to_char()</> is given format codes that
99 are inappropriate for the type of the data argument (Tom)
100 </para>
101 </listitem>
103 <listitem>
104 <para>
105 Fix possible failure in text search when C locale is used with
106 a multi-byte encoding (Teodor)
107 </para>
109 <para>
110 Crashes were possible on platforms where <type>wchar_t</> is narrower
111 than <type>int</>; Windows in particular.
112 </para>
113 </listitem>
115 <listitem>
116 <para>
117 Fix extreme inefficiency in text search parser's handling of an
118 email-like string containing multiple <literal>@</> characters (Heikki)
119 </para>
120 </listitem>
122 <listitem>
123 <para>
124 Fix planner problem with sub-<command>SELECT</> in the output list
125 of a larger subquery (Tom)
126 </para>
128 <para>
129 The known symptom of this bug is a <quote>failed to locate grouping
130 columns</> error that is dependent on the datatype involved;
131 but there could be other issues as well.
132 </para>
133 </listitem>
135 <listitem>
136 <para>
137 Fix decompilation of <literal>CASE WHEN</> with an implicit coercion
138 (Tom)
139 </para>
141 <para>
142 This mistake could lead to Assert failures in an Assert-enabled build,
143 or an <quote>unexpected CASE WHEN clause</> error message in other
144 cases, when trying to examine or dump a view.
145 </para>
146 </listitem>
148 <listitem>
149 <para>
150 Fix possible misassignment of the owner of a TOAST table's rowtype (Tom)
151 </para>
153 <para>
154 If <command>CLUSTER</> or a rewriting variant of <command>ALTER TABLE</>
155 were executed by someone other than the table owner, the
156 <structname>pg_type</> entry for the table's TOAST table would end up
157 marked as owned by that someone. This caused no immediate problems,
158 since the permissions on the TOAST rowtype aren't examined by any
159 ordinary database operation. However, it could lead to unexpected
160 failures if one later tried to drop the role that issued the command
161 (in 8.1 or 8.2), or <quote>owner of data type appears to be invalid</>
162 warnings from <application>pg_dump</> after having done so (in 8.3).
163 </para>
164 </listitem>
166 <listitem>
167 <para>
168 Change <command>UNLISTEN</> to exit quickly if the current session has
169 never executed any <command>LISTEN</> command (Tom)
170 </para>
172 <para>
173 Most of the time this is not a particularly useful optimization, but
174 since <command>DISCARD ALL</> invokes <command>UNLISTEN</>, the previous
175 coding caused a substantial performance problem for applications that
176 made heavy use of <command>DISCARD ALL</>.
177 </para>
178 </listitem>
180 <listitem>
181 <para>
182 Fix PL/pgSQL to not treat <literal>INTO</> after <command>INSERT</> as
183 an INTO-variables clause anywhere in the string, not only at the start;
184 in particular, don't fail for <command>INSERT INTO</> within
185 <command>CREATE RULE</> (Tom)
186 </para>
187 </listitem>
189 <listitem>
190 <para>
191 Clean up PL/pgSQL error status variables fully at block exit
192 (Ashesh Vashi and Dave Page)
193 </para>
195 <para>
196 This is not a problem for PL/pgSQL itself, but the omission could cause
197 the PL/pgSQL Debugger to crash while examining the state of a function.
198 </para>
199 </listitem>
201 <listitem>
202 <para>
203 Retry failed calls to <function>CallNamedPipe()</> on Windows
204 (Steve Marshall, Magnus)
205 </para>
207 <para>
208 It appears that this function can sometimes fail transiently;
209 we previously treated any failure as a hard error, which could
210 confuse <command>LISTEN</>/<command>NOTIFY</> as well as other
211 operations.
212 </para>
213 </listitem>
215 <listitem>
216 <para>
217 Add <literal>MUST</> (Mauritius Island Summer Time) to the default list
218 of known timezone abbreviations (Xavier Bugaud)
219 </para>
220 </listitem>
222 </itemizedlist>
224 </sect2>
225 </sect1>
227 <sect1 id="release-8-3-6">
228 <title>Release 8.3.6</title>
230 <note>
231 <title>Release date</title>
232 <simpara>2009-02-02</simpara>
233 </note>
235 <para>
236 This release contains a variety of fixes from 8.3.5.
237 For information about new features in the 8.3 major release, see
238 <xref linkend="release-8-3">.
239 </para>
241 <sect2>
242 <title>Migration to Version 8.3.6</title>
244 <para>
245 A dump/restore is not required for those running 8.3.X.
246 However, if you are upgrading from a version earlier than 8.3.5,
247 see the release notes for 8.3.5.
248 </para>
250 </sect2>
252 <sect2>
253 <title>Changes</title>
255 <itemizedlist>
257 <listitem>
258 <para>
259 Make <command>DISCARD ALL</> release advisory locks, in addition
260 to everything it already did (Tom)
261 </para>
263 <para>
264 This was decided to be the most appropriate behavior. This could
265 affect existing applications, however.
266 </para>
267 </listitem>
269 <listitem>
270 <para>
271 Fix whole-index GiST scans to work correctly (Teodor)
272 </para>
274 <para>
275 This error could cause rows to be lost if a table is clustered
276 on a GiST index.
277 </para>
278 </listitem>
280 <listitem>
281 <para>
282 Fix crash of <literal>xmlconcat(NULL)</> (Peter)
283 </para>
284 </listitem>
286 <listitem>
287 <para>
288 Fix possible crash in <literal>ispell</> dictionary if high-bit-set
289 characters are used as flags (Teodor)
290 </para>
292 <para>
293 This is known to be done by one widely available Norwegian dictionary,
294 and the same condition may exist in others.
295 </para>
296 </listitem>
298 <listitem>
299 <para>
300 Fix misordering of <application>pg_dump</> output for composite types
301 (Tom)
302 </para>
304 <para>
305 The most likely problem was for user-defined operator classes to
306 be dumped after indexes or views that needed them.
307 </para>
308 </listitem>
310 <listitem>
311 <para>
312 Improve handling of URLs in <function>headline()</> function (Teodor)
313 </para>
314 </listitem>
316 <listitem>
317 <para>
318 Improve handling of overlength headlines in <function>headline()</>
319 function (Teodor)
320 </para>
321 </listitem>
323 <listitem>
324 <para>
325 Prevent possible Assert failure or misconversion if an encoding
326 conversion is created with the wrong conversion function for the
327 specified pair of encodings (Tom, Heikki)
328 </para>
329 </listitem>
331 <listitem>
332 <para>
333 Fix possible Assert failure if a statement executed in PL/pgSQL is
334 rewritten into another kind of statement, for example if an
335 <command>INSERT</> is rewritten into an <command>UPDATE</> (Heikki)
336 </para>
337 </listitem>
339 <listitem>
340 <para>
341 Ensure that a snapshot is available to datatype input functions (Tom)
342 </para>
344 <para>
345 This primarily affects domains that are declared with <literal>CHECK</>
346 constraints involving user-defined stable or immutable functions. Such
347 functions typically fail if no snapshot has been set.
348 </para>
349 </listitem>
351 <listitem>
352 <para>
353 Make it safer for SPI-using functions to be used within datatype I/O;
354 in particular, to be used in domain check constraints (Tom)
355 </para>
356 </listitem>
358 <listitem>
359 <para>
360 Avoid unnecessary locking of small tables in <command>VACUUM</>
361 (Heikki)
362 </para>
363 </listitem>
365 <listitem>
366 <para>
367 Fix a problem that sometimes kept <command>ALTER TABLE ENABLE/DISABLE
368 RULE</> from being recognized by active sessions (Tom)
369 </para>
370 </listitem>
372 <listitem>
373 <para>
374 Fix a problem that made <literal>UPDATE RETURNING tableoid</>
375 return zero instead of the correct OID (Tom)
376 </para>
377 </listitem>
379 <listitem>
380 <para>
381 Allow functions declared as taking <type>ANYARRAY</> to work on
382 the <structname>pg_statistic</> columns of that type (Tom)
383 </para>
385 <para>
386 This used to work, but was unintentionally broken in 8.3.
387 </para>
388 </listitem>
390 <listitem>
391 <para>
392 Fix planner misestimation of selectivity when transitive equality
393 is applied to an outer-join clause (Tom)
394 </para>
396 <para>
397 This could result in bad plans for queries like
398 <literal>... from a left join b on a.a1 = b.b1 where a.a1 = 42 ...</>
399 </para>
400 </listitem>
402 <listitem>
403 <para>
404 Improve optimizer's handling of long <literal>IN</> lists (Tom)
405 </para>
407 <para>
408 This change avoids wasting large amounts of time on such lists
409 when constraint exclusion is enabled.
410 </para>
411 </listitem>
413 <listitem>
414 <para>
415 Prevent synchronous scan during GIN index build (Tom)
416 </para>
418 <para>
419 Because GIN is optimized for inserting tuples in increasing TID order,
420 choosing to use a synchronous scan could slow the build by a factor of
421 three or more.
422 </para>
423 </listitem>
425 <listitem>
426 <para>
427 Ensure that the contents of a holdable cursor don't depend on the
428 contents of TOAST tables (Tom)
429 </para>
431 <para>
432 Previously, large field values in a cursor result might be represented
433 as TOAST pointers, which would fail if the referenced table got dropped
434 before the cursor is read, or if the large value is deleted and then
435 vacuumed away. This cannot happen with an ordinary cursor,
436 but it could with a cursor that is held past its creating transaction.
437 </para>
438 </listitem>
440 <listitem>
441 <para>
442 Fix memory leak when a set-returning function is terminated without
443 reading its whole result (Tom)
444 </para>
445 </listitem>
447 <listitem>
448 <para>
449 Fix encoding conversion problems in XML functions when the database
450 encoding isn't UTF-8 (Tom)
451 </para>
452 </listitem>
454 <listitem>
455 <para>
456 Fix <filename>contrib/dblink</>'s
457 <function>dblink_get_result(text,bool)</> function (Joe)
458 </para>
459 </listitem>
461 <listitem>
462 <para>
463 Fix possible garbage output from <filename>contrib/sslinfo</> functions
464 (Tom)
465 </para>
466 </listitem>
468 <listitem>
469 <para>
470 Fix incorrect behavior of <filename>contrib/tsearch2</> compatibility
471 trigger when it's fired more than once in a command (Teodor)
472 </para>
473 </listitem>
475 <listitem>
476 <para>
477 Fix possible mis-signaling in autovacuum (Heikki)
478 </para>
479 </listitem>
481 <listitem>
482 <para>
483 Support running as a service on Windows 7 beta (Dave and Magnus)
484 </para>
485 </listitem>
487 <listitem>
488 <para>
489 Fix <application>ecpg</>'s handling of varchar structs (Michael)
490 </para>
491 </listitem>
493 <listitem>
494 <para>
495 Fix <application>configure</> script to properly report failure when
496 unable to obtain linkage information for PL/Perl (Andrew)
497 </para>
498 </listitem>
500 <listitem>
501 <para>
502 Make all documentation reference <literal>pgsql-bugs</> and/or
503 <literal>pgsql-hackers</> as appropriate, instead of the
504 now-decommissioned <literal>pgsql-ports</> and <literal>pgsql-patches</>
505 mailing lists (Tom)
506 </para>
507 </listitem>
509 <listitem>
510 <para>
511 Update time zone data files to <application>tzdata</> release 2009a (for
512 Kathmandu and historical DST corrections in Switzerland, Cuba)
513 </para>
514 </listitem>
516 </itemizedlist>
518 </sect2>
519 </sect1>
521 <sect1 id="release-8-3-5">
522 <title>Release 8.3.5</title>
524 <note>
525 <title>Release date</title>
526 <simpara>2008-11-03</simpara>
527 </note>
529 <para>
530 This release contains a variety of fixes from 8.3.4.
531 For information about new features in the 8.3 major release, see
532 <xref linkend="release-8-3">.
533 </para>
535 <sect2>
536 <title>Migration to Version 8.3.5</title>
538 <para>
539 A dump/restore is not required for those running 8.3.X.
540 However, if you are upgrading from a version earlier than 8.3.1,
541 see the release notes for 8.3.1. Also, if you were running a previous
542 8.3.X release, it is recommended to <command>REINDEX</> all GiST
543 indexes after the upgrade.
544 </para>
546 </sect2>
548 <sect2>
549 <title>Changes</title>
551 <itemizedlist>
553 <listitem>
554 <para>
555 Fix GiST index corruption due to marking the wrong index entry
556 <quote>dead</> after a deletion (Teodor)
557 </para>
559 <para>
560 This would result in index searches failing to find rows they
561 should have found. Corrupted indexes can be fixed with
562 <command>REINDEX</>.
563 </para>
564 </listitem>
566 <listitem>
567 <para>
568 Fix backend crash when the client encoding cannot represent a localized
569 error message (Tom)
570 </para>
572 <para>
573 We have addressed similar issues before, but it would still fail if
574 the <quote>character has no equivalent</> message itself couldn't
575 be converted. The fix is to disable localization and send the plain
576 ASCII error message when we detect such a situation.
577 </para>
578 </listitem>
580 <listitem>
581 <para>
582 Fix possible crash in <type>bytea</>-to-XML mapping (Michael McMaster)
583 </para>
584 </listitem>
586 <listitem>
587 <para>
588 Fix possible crash when deeply nested functions are invoked from
589 a trigger (Tom)
590 </para>
591 </listitem>
593 <listitem>
594 <para>
595 Improve optimization of <replaceable>expression</> <literal>IN</>
596 (<replaceable>expression-list</>) queries (Tom, per an idea from Robert
597 Haas)
598 </para>
600 <para>
601 Cases in which there are query variables on the right-hand side had been
602 handled less efficiently in 8.2.x and 8.3.x than in prior versions.
603 The fix restores 8.1 behavior for such cases.
604 </para>
605 </listitem>
607 <listitem>
608 <para>
609 Fix mis-expansion of rule queries when a sub-<literal>SELECT</> appears
610 in a function call in <literal>FROM</>, a multi-row <literal>VALUES</>
611 list, or a <literal>RETURNING</> list (Tom)
612 </para>
614 <para>
615 The usual symptom of this problem is an <quote>unrecognized node type</>
616 error.
617 </para>
618 </listitem>
620 <listitem>
621 <para>
622 Fix Assert failure during rescan of an <literal>IS NULL</>
623 search of a GiST index (Teodor)
624 </para>
625 </listitem>
627 <listitem>
628 <para>
629 Fix memory leak during rescan of a hashed aggregation plan (Neil)
630 </para>
631 </listitem>
633 <listitem>
634 <para>
635 Ensure an error is reported when a newly-defined PL/pgSQL trigger
636 function is invoked as a normal function (Tom)
637 </para>
638 </listitem>
640 <listitem>
641 <para>
642 Force a checkpoint before <command>CREATE DATABASE</> starts to copy
643 files (Heikki)
644 </para>
646 <para>
647 This prevents a possible failure if files had recently been deleted
648 in the source database.
649 </para>
650 </listitem>
652 <listitem>
653 <para>
654 Prevent possible collision of <structfield>relfilenode</> numbers
655 when moving a table to another tablespace with <command>ALTER SET
656 TABLESPACE</> (Heikki)
657 </para>
659 <para>
660 The command tried to re-use the existing filename, instead of
661 picking one that is known unused in the destination directory.
662 </para>
663 </listitem>
665 <listitem>
666 <para>
667 Fix incorrect text search headline generation when single query
668 item matches first word of text (Sushant Sinha)
669 </para>
670 </listitem>
672 <listitem>
673 <para>
674 Fix improper display of fractional seconds in interval values when
675 using a non-ISO datestyle in an <option>--enable-integer-datetimes</>
676 build (Ron Mayer)
677 </para>
678 </listitem>
680 <listitem>
681 <para>
682 Make <literal>ILIKE</> compare characters case-insensitively
683 even when they're escaped (Andrew)
684 </para>
685 </listitem>
687 <listitem>
688 <para>
689 Ensure <command>DISCARD</> is handled properly by statement logging (Tom)
690 </para>
691 </listitem>
693 <listitem>
694 <para>
695 Fix incorrect logging of last-completed-transaction time during
696 PITR recovery (Tom)
697 </para>
698 </listitem>
700 <listitem>
701 <para>
702 Ensure <function>SPI_getvalue</> and <function>SPI_getbinval</>
703 behave correctly when the passed tuple and tuple descriptor have
704 different numbers of columns (Tom)
705 </para>
707 <para>
708 This situation is normal when a table has had columns added or removed,
709 but these two functions didn't handle it properly.
710 The only likely consequence is an incorrect error indication.
711 </para>
712 </listitem>
714 <listitem>
715 <para>
716 Mark <varname>SessionReplicationRole</> as <literal>PGDLLIMPORT</>
717 so it can be used by <application>Slony</> on Windows (Magnus)
718 </para>
719 </listitem>
721 <listitem>
722 <para>
723 Fix small memory leak when using <application>libpq</>'s
724 <literal>gsslib</> parameter (Magnus)
725 </para>
727 <para>
728 The space used by the parameter string was not freed at connection
729 close.
730 </para>
731 </listitem>
733 <listitem>
734 <para>
735 Ensure <application>libgssapi</> is linked into <application>libpq</>
736 if needed (Markus Schaaf)
737 </para>
738 </listitem>
740 <listitem>
741 <para>
742 Fix <application>ecpg</>'s parsing of <command>CREATE ROLE</> (Michael)
743 </para>
744 </listitem>
746 <listitem>
747 <para>
748 Fix recent breakage of <literal>pg_ctl restart</> (Tom)
749 </para>
750 </listitem>
752 <listitem>
753 <para>
754 Ensure <filename>pg_control</> is opened in binary mode
755 (Itagaki Takahiro)
756 </para>
758 <para>
759 <application>pg_controldata</> and <application>pg_resetxlog</>
760 did this incorrectly, and so could fail on Windows.
761 </para>
762 </listitem>
764 <listitem>
765 <para>
766 Update time zone data files to <application>tzdata</> release 2008i (for
767 DST law changes in Argentina, Brazil, Mauritius, Syria)
768 </para>
769 </listitem>
771 </itemizedlist>
773 </sect2>
774 </sect1>
776 <sect1 id="release-8-3-4">
777 <title>Release 8.3.4</title>
779 <note>
780 <title>Release date</title>
781 <simpara>2008-09-22</simpara>
782 </note>
784 <para>
785 This release contains a variety of fixes from 8.3.3.
786 For information about new features in the 8.3 major release, see
787 <xref linkend="release-8-3">.
788 </para>
790 <sect2>
791 <title>Migration to Version 8.3.4</title>
793 <para>
794 A dump/restore is not required for those running 8.3.X.
795 However, if you are upgrading from a version earlier than 8.3.1,
796 see the release notes for 8.3.1.
797 </para>
799 </sect2>
801 <sect2>
802 <title>Changes</title>
804 <itemizedlist>
806 <listitem>
807 <para>
808 Fix bug in btree WAL recovery code (Heikki)
809 </para>
811 <para>
812 Recovery failed if the WAL ended partway through a page split operation.
813 </para>
814 </listitem>
816 <listitem>
817 <para>
818 Fix potential use of wrong cutoff XID for HOT page pruning (Alvaro)
819 </para>
821 <para>
822 This error created a risk of corruption in system
823 catalogs that are consulted by <command>VACUUM</>: dead tuple versions
824 might be removed too soon. The impact of this on actual database
825 operations would be minimal, since the system doesn't follow MVCC
826 rules while examining catalogs, but it might result in transiently
827 wrong output from <application>pg_dump</> or other client programs.
828 </para>
829 </listitem>
831 <listitem>
832 <para>
833 Fix potential miscalculation of <structfield>datfrozenxid</> (Alvaro)
834 </para>
836 <para>
837 This error may explain some recent reports of failure to remove old
838 <structname>pg_clog</> data.
839 </para>
840 </listitem>
842 <listitem>
843 <para>
844 Fix incorrect HOT updates after <structname>pg_class</> is reindexed
845 (Tom)
846 </para>
848 <para>
849 Corruption of <structname>pg_class</> could occur if <literal>REINDEX
850 TABLE pg_class</> was followed in the same session by an <literal>ALTER
851 TABLE RENAME</> or <literal>ALTER TABLE SET SCHEMA</> command.
852 </para>
853 </listitem>
855 <listitem>
856 <para>
857 Fix missed <quote>combo cid</> case (Karl Schnaitter)
858 </para>
860 <para>
861 This error made rows incorrectly invisible to a transaction in which they
862 had been deleted by multiple subtransactions that all aborted.
863 </para>
864 </listitem>
866 <listitem>
867 <para>
868 Prevent autovacuum from crashing if the table it's currently
869 checking is deleted at just the wrong time (Alvaro)
870 </para>
871 </listitem>
873 <listitem>
874 <para>
875 Widen local lock counters from 32 to 64 bits (Tom)
876 </para>
878 <para>
879 This responds to reports that the counters could overflow in
880 sufficiently long transactions, leading to unexpected <quote>lock is
881 already held</> errors.
882 </para>
883 </listitem>
885 <listitem>
886 <para>
887 Fix possible duplicate output of tuples during a GiST index scan (Teodor)
888 </para>
889 </listitem>
891 <listitem>
892 <para>
893 Regenerate foreign key checking queries from scratch when either
894 table is modified (Tom)
895 </para>
897 <para>
898 Previously, 8.3 would attempt to replan the query, but would work from
899 previously generated query text. This led to failures if a
900 table or column was renamed.
901 </para>
902 </listitem>
904 <listitem>
905 <para>
906 Fix missed permissions checks when a view contains a simple
907 <literal>UNION ALL</> construct (Heikki)
908 </para>
910 <para>
911 Permissions for the referenced tables were checked properly, but not
912 permissions for the view itself.
913 </para>
914 </listitem>
916 <listitem>
917 <para>
918 Add checks in executor startup to ensure that the tuples produced by an
919 <command>INSERT</> or <command>UPDATE</> will match the target table's
920 current rowtype (Tom)
921 </para>
923 <para>
924 This situation is believed to be impossible in 8.3, but it can happen in
925 prior releases, so a check seems prudent.
926 </para>
927 </listitem>
929 <listitem>
930 <para>
931 Fix possible repeated drops during <command>DROP OWNED</> (Tom)
932 </para>
934 <para>
935 This would typically result in strange errors such as <quote>cache
936 lookup failed for relation NNN</>.
937 </para>
938 </listitem>
940 <listitem>
941 <para>
942 Fix several memory leaks in XML operations (Kris Jurka, Tom)
943 </para>
944 </listitem>
946 <listitem>
947 <para>
948 Fix <function>xmlserialize()</> to raise error properly for
949 unacceptable target data type (Tom)
950 </para>
951 </listitem>
953 <listitem>
954 <para>
955 Fix a couple of places that mis-handled multibyte characters in text
956 search configuration file parsing (Tom)
957 </para>
959 <para>
960 Certain characters occurring in configuration files would always cause
961 <quote>invalid byte sequence for encoding</> failures.
962 </para>
963 </listitem>
965 <listitem>
966 <para>
967 Provide file name and line number location for all errors reported
968 in text search configuration files (Tom)
969 </para>
970 </listitem>
972 <listitem>
973 <para>
974 Fix <literal>AT TIME ZONE</> to first try to interpret its timezone
975 argument as a timezone abbreviation, and only try it as a full timezone
976 name if that fails, rather than the other way around as formerly (Tom)
977 </para>
979 <para>
980 The timestamp input functions have always resolved ambiguous zone names
981 in this order. Making <literal>AT TIME ZONE</> do so as well improves
982 consistency, and fixes a compatibility bug introduced in 8.1:
983 in ambiguous cases we now behave the same as 8.0 and before did,
984 since in the older versions <literal>AT TIME ZONE</> accepted
985 <emphasis>only</> abbreviations.
986 </para>
987 </listitem>
989 <listitem>
990 <para>
991 Fix datetime input functions to correctly detect integer overflow when
992 running on a 64-bit platform (Tom)
993 </para>
994 </listitem>
996 <listitem>
997 <para>
998 Prevent integer overflows during units conversion when displaying a
999 configuration parameter that has units (Tom)
1000 </para>
1001 </listitem>
1003 <listitem>
1004 <para>
1005 Improve performance of writing very long log messages to syslog (Tom)
1006 </para>
1007 </listitem>
1009 <listitem>
1010 <para>
1011 Allow spaces in the suffix part of an LDAP URL in
1012 <filename>pg_hba.conf</> (Tom)
1013 </para>
1014 </listitem>
1016 <listitem>
1017 <para>
1018 Fix bug in backwards scanning of a cursor on a <literal>SELECT DISTINCT
1019 ON</> query (Tom)
1020 </para>
1021 </listitem>
1023 <listitem>
1024 <para>
1025 Fix planner bug that could improperly push down <literal>IS NULL</>
1026 tests below an outer join (Tom)
1027 </para>
1029 <para>
1030 This was triggered by occurrence of <literal>IS NULL</> tests for
1031 the same relation in all arms of an upper <literal>OR</> clause.
1032 </para>
1033 </listitem>
1035 <listitem>
1036 <para>
1037 Fix planner bug with nested sub-select expressions (Tom)
1038 </para>
1040 <para>
1041 If the outer sub-select has no direct dependency on the parent query,
1042 but the inner one does, the outer value might not get recalculated
1043 for new parent query rows.
1044 </para>
1045 </listitem>
1047 <listitem>
1048 <para>
1049 Fix planner to estimate that <literal>GROUP BY</> expressions yielding
1050 boolean results always result in two groups, regardless of the
1051 expressions' contents (Tom)
1052 </para>
1054 <para>
1055 This is very substantially more accurate than the regular <literal>GROUP
1056 BY</> estimate for certain boolean tests like <replaceable>col</>
1057 <literal>IS NULL</>.
1058 </para>
1059 </listitem>
1061 <listitem>
1062 <para>
1063 Fix PL/PgSQL to not fail when a <literal>FOR</> loop's target variable
1064 is a record containing composite-type fields (Tom)
1065 </para>
1066 </listitem>
1068 <listitem>
1069 <para>
1070 Fix PL/Tcl to behave correctly with Tcl 8.5, and to be more careful
1071 about the encoding of data sent to or from Tcl (Tom)
1072 </para>
1073 </listitem>
1075 <listitem>
1076 <para>
1077 Improve performance of <function>PQescapeBytea()</> (Rudolf Leitgeb)
1078 </para>
1079 </listitem>
1081 <listitem>
1082 <para>
1083 On Windows, work around a Microsoft bug by preventing
1084 <application>libpq</> from trying to send more than 64kB per system call
1085 (Magnus)
1086 </para>
1087 </listitem>
1089 <listitem>
1090 <para>
1091 Fix <application>ecpg</> to handle variables properly in <command>SET</>
1092 commands (Michael)
1093 </para>
1094 </listitem>
1096 <listitem>
1097 <para>
1098 Improve <application>pg_dump</> and <application>pg_restore</>'s
1099 error reporting after failure to send a SQL command (Tom)
1100 </para>
1101 </listitem>
1103 <listitem>
1104 <para>
1105 Fix <application>pg_ctl</> to properly preserve postmaster
1106 command-line arguments across a <literal>restart</> (Bruce)
1107 </para>
1108 </listitem>
1110 <listitem>
1111 <para>
1112 Fix erroneous WAL file cutoff point calculation in
1113 <application>pg_standby</> (Simon)
1114 </para>
1115 </listitem>
1117 <listitem>
1118 <para>
1119 Update time zone data files to <application>tzdata</> release 2008f (for
1120 DST law changes in Argentina, Bahamas, Brazil, Mauritius, Morocco,
1121 Pakistan, Palestine, and Paraguay)
1122 </para>
1123 </listitem>
1125 </itemizedlist>
1127 </sect2>
1128 </sect1>
1130 <sect1 id="release-8-3-3">
1131 <title>Release 8.3.3</title>
1133 <note>
1134 <title>Release date</title>
1135 <simpara>2008-06-12</simpara>
1136 </note>
1138 <para>
1139 This release contains one serious and one minor bug fix over 8.3.2.
1140 For information about new features in the 8.3 major release, see
1141 <xref linkend="release-8-3">.
1142 </para>
1144 <sect2>
1145 <title>Migration to Version 8.3.3</title>
1147 <para>
1148 A dump/restore is not required for those running 8.3.X.
1149 However, if you are upgrading from a version earlier than 8.3.1,
1150 see the release notes for 8.3.1.
1151 </para>
1153 </sect2>
1155 <sect2>
1156 <title>Changes</title>
1158 <itemizedlist>
1160 <listitem>
1161 <para>
1162 Make <function>pg_get_ruledef()</> parenthesize negative constants (Tom)
1163 </para>
1165 <para>
1166 Before this fix, a negative constant in a view or rule might be dumped
1167 as, say, <literal>-42::integer</>, which is subtly incorrect: it should
1168 be <literal>(-42)::integer</> due to operator precedence rules.
1169 Usually this would make little difference, but it could interact with
1170 another recent patch to cause
1171 <productname>PostgreSQL</> to reject what had been a valid
1172 <command>SELECT DISTINCT</> view query. Since this could result in
1173 <application>pg_dump</> output failing to reload, it is being treated
1174 as a high-priority fix. The only released versions in which dump
1175 output is actually incorrect are 8.3.1 and 8.2.7.
1176 </para>
1177 </listitem>
1179 <listitem>
1180 <para>
1181 Make <command>ALTER AGGREGATE ... OWNER TO</> update
1182 <structname>pg_shdepend</> (Tom)
1183 </para>
1185 <para>
1186 This oversight could lead to problems if the aggregate was later
1187 involved in a <command>DROP OWNED</> or <command>REASSIGN OWNED</>
1188 operation.
1189 </para>
1190 </listitem>
1192 </itemizedlist>
1194 </sect2>
1195 </sect1>
1197 <sect1 id="release-8-3-2">
1198 <title>Release 8.3.2</title>
1200 <note>
1201 <title>Release date</title>
1202 <simpara>never released</simpara>
1203 </note>
1205 <para>
1206 This release contains a variety of fixes from 8.3.1.
1207 For information about new features in the 8.3 major release, see
1208 <xref linkend="release-8-3">.
1209 </para>
1211 <sect2>
1212 <title>Migration to Version 8.3.2</title>
1214 <para>
1215 A dump/restore is not required for those running 8.3.X.
1216 However, if you are upgrading from a version earlier than 8.3.1,
1217 see the release notes for 8.3.1.
1218 </para>
1220 </sect2>
1222 <sect2>
1223 <title>Changes</title>
1225 <itemizedlist>
1227 <listitem>
1228 <para>
1229 Fix <literal>ERRORDATA_STACK_SIZE exceeded</literal> crash that
1230 occurred on Windows when using UTF-8 database encoding and a different
1231 client encoding (Tom)
1232 </para>
1233 </listitem>
1235 <listitem>
1236 <para>
1237 Fix incorrect archive truncation point calculation for the
1238 <literal>%r</> macro in <varname>recovery_command</> parameters
1239 (Simon)
1240 </para>
1242 <para>
1243 This could lead to data loss if a warm-standby script relied on
1244 <literal>%r</> to decide when to throw away WAL segment files.
1245 </para>
1246 </listitem>
1248 <listitem>
1249 <para>
1250 Fix <command>ALTER TABLE ADD COLUMN ... PRIMARY KEY</> so that the new
1251 column is correctly checked to see if it's been initialized to all
1252 non-nulls (Brendan Jurd)
1253 </para>
1255 <para>
1256 Previous versions neglected to check this requirement at all.
1257 </para>
1258 </listitem>
1260 <listitem>
1261 <para>
1262 Fix <command>REASSIGN OWNED</> so that it works on procedural
1263 languages too (Alvaro)
1264 </para>
1265 </listitem>
1267 <listitem>
1268 <para>
1269 Fix problems with <command>SELECT FOR UPDATE/SHARE</> occurring as a
1270 subquery in a query with a non-<command>SELECT</> top-level operation
1271 (Tom)
1272 </para>
1273 </listitem>
1275 <listitem>
1276 <para>
1277 Fix possible <command>CREATE TABLE</> failure when inheriting the
1278 <quote>same</> constraint from multiple parent relations that
1279 inherited that constraint from a common ancestor (Tom)
1280 </para>
1281 </listitem>
1283 <listitem>
1284 <para>
1285 Fix <function>pg_get_ruledef()</> to show the alias, if any, attached
1286 to the target table of an <command>UPDATE</> or <command>DELETE</>
1287 (Tom)
1288 </para>
1289 </listitem>
1291 <listitem>
1292 <para>
1293 Restore the pre-8.3 behavior that an out-of-range block number in a
1294 TID being used in a TidScan plan results in silently not matching any
1295 rows (Tom)
1296 </para>
1298 <para>
1299 8.3.0 and 8.3.1 threw an error instead.
1300 </para>
1301 </listitem>
1303 <listitem>
1304 <para>
1305 Fix GIN bug that could result in a <literal>too many LWLocks
1306 taken</literal> failure (Teodor)
1307 </para>
1308 </listitem>
1310 <listitem>
1311 <para>
1312 Fix broken GiST comparison function for <type>tsquery</> (Teodor)
1313 </para>
1314 </listitem>
1316 <listitem>
1317 <para>
1318 Fix <function>tsvector_update_trigger()</> and <function>ts_stat()</>
1319 to accept domains over the types they expect to work with (Tom)
1320 </para>
1321 </listitem>
1323 <listitem>
1324 <para>
1325 Fix failure to support enum data types as foreign keys (Tom)
1326 </para>
1327 </listitem>
1329 <listitem>
1330 <para>
1331 Avoid possible crash when decompressing corrupted data
1332 (Zdenek Kotala)
1333 </para>
1334 </listitem>
1336 <listitem>
1337 <para>
1338 Fix race conditions between delayed unlinks and <command>DROP
1339 DATABASE</> (Heikki)
1340 </para>
1342 <para>
1343 In the worst case this could result in deleting a newly created table
1344 in a new database that happened to get the same OID as the
1345 recently-dropped one; but of course that is an extremely
1346 low-probability scenario.
1347 </para>
1348 </listitem>
1350 <listitem>
1351 <para>
1352 Repair two places where SIGTERM exit of a backend could leave corrupted
1353 state in shared memory (Tom)
1354 </para>
1356 <para>
1357 Neither case is very important if SIGTERM is used to shut down the
1358 whole database cluster together, but there was a problem if someone
1359 tried to SIGTERM individual backends.
1360 </para>
1361 </listitem>
1363 <listitem>
1364 <para>
1365 Fix possible crash due to incorrect plan generated for an
1366 <literal><replaceable>x</> IN (SELECT <replaceable>y</>
1367 FROM ...)</literal> clause when <replaceable>x</> and <replaceable>y</>
1368 have different data types; and make sure the behavior is semantically
1369 correct when the conversion from <replaceable>y</>'s type to
1370 <replaceable>x</>'s type is lossy (Tom)
1371 </para>
1372 </listitem>
1374 <listitem>
1375 <para>
1376 Fix oversight that prevented the planner from substituting known Param
1377 values as if they were constants (Tom)
1378 </para>
1380 <para>
1381 This mistake partially disabled optimization of unnamed
1382 extended-Query statements in 8.3.0 and 8.3.1: in particular the
1383 LIKE-to-indexscan optimization would never be applied if the LIKE
1384 pattern was passed as a parameter, and constraint exclusion
1385 depending on a parameter value didn't work either.
1386 </para>
1387 </listitem>
1389 <listitem>
1390 <para>
1391 Fix planner failure when an indexable <function>MIN</> or
1392 <function>MAX</> aggregate is used with <literal>DISTINCT</> or
1393 <literal>ORDER BY</> (Tom)
1394 </para>
1395 </listitem>
1397 <listitem>
1398 <para>
1399 Fix planner to ensure it never uses a <quote>physical tlist</> for a
1400 plan node that is feeding a Sort node (Tom)
1401 </para>
1403 <para>
1404 This led to the sort having to push around more data than it really
1405 needed to, since unused column values were included in the sorted
1406 data.
1407 </para>
1408 </listitem>
1410 <listitem>
1411 <para>
1412 Avoid unnecessary copying of query strings (Tom)
1413 </para>
1415 <para>
1416 This fixes a performance problem introduced in 8.3.0 when a very large
1417 number of commands are submitted as a single query string.
1418 </para>
1419 </listitem>
1421 <listitem>
1422 <para>
1423 Make <function>TransactionIdIsCurrentTransactionId()</> use binary
1424 search instead of linear search when checking child-transaction XIDs
1425 (Heikki)
1426 </para>
1428 <para>
1429 This fixes some cases in which 8.3.0 was significantly
1430 slower than earlier releases.
1431 </para>
1432 </listitem>
1434 <listitem>
1435 <para>
1436 Fix conversions between ISO-8859-5 and other encodings to handle
1437 Cyrillic <quote>Yo</> characters (<literal>e</> and <literal>E</> with
1438 two dots) (Sergey Burladyan)
1439 </para>
1440 </listitem>
1442 <listitem>
1443 <para>
1444 Fix several datatype input functions, notably <function>array_in()</>,
1445 that were allowing unused bytes in their results to contain
1446 uninitialized, unpredictable values (Tom)
1447 </para>
1449 <para>
1450 This could lead to failures in which two apparently identical literal
1451 values were not seen as equal, resulting in the parser complaining
1452 about unmatched <literal>ORDER BY</> and <literal>DISTINCT</>
1453 expressions.
1454 </para>
1455 </listitem>
1457 <listitem>
1458 <para>
1459 Fix a corner case in regular-expression substring matching
1460 (<literal>substring(<replaceable>string</> from
1461 <replaceable>pattern</>)</literal>) (Tom)
1462 </para>
1464 <para>
1465 The problem occurs when there is a match to the pattern overall but
1466 the user has specified a parenthesized subexpression and that
1467 subexpression hasn't got a match. An example is
1468 <literal>substring('foo' from 'foo(bar)?')</>.
1469 This should return NULL, since <literal>(bar)</> isn't matched, but
1470 it was mistakenly returning the whole-pattern match instead (ie,
1471 <literal>foo</>).
1472 </para>
1473 </listitem>
1475 <listitem>
1476 <para>
1477 Prevent cancellation of an auto-vacuum that was launched to prevent
1478 XID wraparound (Alvaro)
1479 </para>
1480 </listitem>
1482 <listitem>
1483 <para>
1484 Improve <command>ANALYZE</>'s handling of in-doubt tuples (those
1485 inserted or deleted by a not-yet-committed transaction) so that the
1486 counts it reports to the stats collector are more likely to be correct
1487 (Pavan Deolasee)
1488 </para>
1489 </listitem>
1491 <listitem>
1492 <para>
1493 Fix <application>initdb</> to reject a relative path for its
1494 <literal>--xlogdir</> (<literal>-X</>) option (Tom)
1495 </para>
1496 </listitem>
1498 <listitem>
1499 <para>
1500 Make <application>psql</> print tab characters as an appropriate
1501 number of spaces, rather than <literal>\x09</literal> as was done in
1502 8.3.0 and 8.3.1 (Bruce)
1503 </para>
1504 </listitem>
1506 <listitem>
1507 <para>
1508 Update time zone data files to <application>tzdata</> release 2008c (for
1509 DST law changes in Morocco, Iraq, Choibalsan, Pakistan, Syria, Cuba, and
1510 Argentina/San_Luis)
1511 </para>
1512 </listitem>
1514 <listitem>
1515 <para>
1516 Add <function>ECPGget_PGconn()</> function to
1517 <application>ecpglib</> (Michael)
1518 </para>
1519 </listitem>
1521 <listitem>
1522 <para>
1523 Fix incorrect result from <application>ecpg</>'s
1524 <function>PGTYPEStimestamp_sub()</> function (Michael)
1525 </para>
1526 </listitem>
1528 <listitem>
1529 <para>
1530 Fix handling of continuation line markers in <application>ecpg</>
1531 (Michael)
1532 </para>
1533 </listitem>
1535 <listitem>
1536 <para>
1537 Fix possible crashes in <filename>contrib/cube</> functions (Tom)
1538 </para>
1539 </listitem>
1541 <listitem>
1542 <para>
1543 Fix core dump in <filename>contrib/xml2</>'s
1544 <function>xpath_table()</> function when the input query returns a
1545 NULL value (Tom)
1546 </para>
1547 </listitem>
1549 <listitem>
1550 <para>
1551 Fix <filename>contrib/xml2</>'s makefile to not override
1552 <literal>CFLAGS</>, and make it auto-configure properly for
1553 <application>libxslt</> present or not (Tom)
1554 </para>
1555 </listitem>
1557 </itemizedlist>
1559 </sect2>
1560 </sect1>
1562 <sect1 id="release-8-3-1">
1563 <title>Release 8.3.1</title>
1565 <note>
1566 <title>Release date</title>
1567 <simpara>2008-03-17</simpara>
1568 </note>
1570 <para>
1571 This release contains a variety of fixes from 8.3.0.
1572 For information about new features in the 8.3 major release, see
1573 <xref linkend="release-8-3">.
1574 </para>
1576 <sect2>
1577 <title>Migration to Version 8.3.1</title>
1579 <para>
1580 A dump/restore is not required for those running 8.3.X.
1581 However, you might need to <command>REINDEX</> indexes on textual
1582 columns after updating, if you are affected by the Windows locale
1583 issue described below.
1584 </para>
1586 </sect2>
1588 <sect2>
1589 <title>Changes</title>
1591 <itemizedlist>
1593 <listitem>
1594 <para>
1595 Fix character string comparison for Windows locales that consider
1596 different character combinations as equal (Tom)
1597 </para>
1599 <para>
1600 This fix applies only on Windows and only when using UTF-8
1601 database encoding. The same fix was made for all other cases
1602 over two years ago, but Windows with UTF-8 uses a separate code
1603 path that was not updated. If you are using a locale that
1604 considers some non-identical strings as equal, you may need to
1605 <command>REINDEX</> to fix existing indexes on textual columns.
1606 </para>
1607 </listitem>
1609 <listitem>
1610 <para>
1611 Repair corner-case bugs in <command>VACUUM FULL</> (Tom)
1612 </para>
1614 <para>
1615 A potential deadlock between concurrent <command>VACUUM FULL</>
1616 operations on different system catalogs was introduced in 8.2.
1617 This has now been corrected. 8.3 made this worse because the
1618 deadlock could occur within a critical code section, making it
1619 a PANIC rather than just ERROR condition.
1620 </para>
1622 <para>
1623 Also, a <command>VACUUM FULL</> that failed partway through
1624 vacuuming a system catalog could result in cache corruption in
1625 concurrent database sessions.
1626 </para>
1628 <para>
1629 Another <command>VACUUM FULL</> bug introduced in 8.3 could
1630 result in a crash or out-of-memory report when dealing with
1631 pages containing no live tuples.
1632 </para>
1633 </listitem>
1635 <listitem>
1636 <para>
1637 Fix misbehavior of foreign key checks involving <type>character</>
1638 or <type>bit</> columns (Tom)
1639 </para>
1641 <para>
1642 If the referencing column were of a different but compatible type
1643 (for instance <type>varchar</>), the constraint was enforced incorrectly.
1644 </para>
1645 </listitem>
1647 <listitem>
1648 <para>
1649 Avoid needless deadlock failures in no-op foreign-key checks (Stephan
1650 Szabo, Tom)
1651 </para>
1652 </listitem>
1654 <listitem>
1655 <para>
1656 Fix possible core dump when re-planning a prepared query (Tom)
1657 </para>
1659 <para>
1660 This bug affected only protocol-level prepare operations, not
1661 SQL <command>PREPARE</>, and so tended to be seen only with
1662 JDBC, DBI, and other client-side drivers that use prepared
1663 statements heavily.
1664 </para>
1665 </listitem>
1667 <listitem>
1668 <para>
1669 Fix possible failure when re-planning a query that calls an SPI-using
1670 function (Tom)
1671 </para>
1672 </listitem>
1674 <listitem>
1675 <para>
1676 Fix failure in row-wise comparisons involving columns of different
1677 datatypes (Tom)
1678 </para>
1679 </listitem>
1681 <listitem>
1682 <para>
1683 Fix longstanding <command>LISTEN</>/<command>NOTIFY</>
1684 race condition (Tom)
1685 </para>
1687 <para>
1688 In rare cases a session that had just executed a
1689 <command>LISTEN</> might not get a notification, even though
1690 one would be expected because the concurrent transaction executing
1691 <command>NOTIFY</> was observed to commit later.
1692 </para>
1694 <para>
1695 A side effect of the fix is that a transaction that has executed
1696 a not-yet-committed <command>LISTEN</> command will not see any
1697 row in <structname>pg_listener</> for the <command>LISTEN</>,
1698 should it choose to look; formerly it would have. This behavior
1699 was never documented one way or the other, but it is possible that
1700 some applications depend on the old behavior.
1701 </para>
1702 </listitem>
1704 <listitem>
1705 <para>
1706 Disallow <command>LISTEN</> and <command>UNLISTEN</> within a
1707 prepared transaction (Tom)
1708 </para>
1710 <para>
1711 This was formerly allowed but trying to do it had various unpleasant
1712 consequences, notably that the originating backend could not exit
1713 as long as an <command>UNLISTEN</> remained uncommitted.
1714 </para>
1715 </listitem>
1717 <listitem>
1718 <para>
1719 Disallow dropping a temporary table within a
1720 prepared transaction (Heikki)
1721 </para>
1723 <para>
1724 This was correctly disallowed by 8.1, but the check was inadvertently
1725 broken in 8.2 and 8.3.
1726 </para>
1727 </listitem>
1729 <listitem>
1730 <para>
1731 Fix rare crash when an error occurs during a query using a hash index
1732 (Heikki)
1733 </para>
1734 </listitem>
1736 <listitem>
1737 <para>
1738 Fix incorrect comparison of <type>tsquery</> values (Teodor)
1739 </para>
1740 </listitem>
1742 <listitem>
1743 <para>
1744 Fix incorrect behavior of <literal>LIKE</> with non-ASCII characters
1745 in single-byte encodings (Rolf Jentsch)
1746 </para>
1747 </listitem>
1749 <listitem>
1750 <para>
1751 Disable <function>xmlvalidate</> (Tom)
1752 </para>
1754 <para>
1755 This function should have been removed before 8.3 release, but
1756 was inadvertently left in the source code. It poses a small
1757 security risk since unprivileged users could use it to read the
1758 first few characters of any file accessible to the server.
1759 </para>
1760 </listitem>
1762 <listitem>
1763 <para>
1764 Fix memory leaks in certain usages of set-returning functions (Neil)
1765 </para>
1766 </listitem>
1768 <listitem>
1769 <para>
1770 Make <function>encode(<replaceable>bytea</>, 'escape')</> convert all
1771 high-bit-set byte values into <literal>\</><replaceable>nnn</> octal
1772 escape sequences (Tom)
1773 </para>
1775 <para>
1776 This is necessary to avoid encoding problems when the database
1777 encoding is multi-byte. This change could pose compatibility issues
1778 for applications that are expecting specific results from
1779 <function>encode</>.
1780 </para>
1781 </listitem>
1783 <listitem>
1784 <para>
1785 Fix input of datetime values for February 29 in years BC (Tom)
1786 </para>
1788 <para>
1789 The former coding was mistaken about which years were leap years.
1790 </para>
1791 </listitem>
1793 <listitem>
1794 <para>
1795 Fix <quote>unrecognized node type</> error in some variants of
1796 <command>ALTER OWNER</> (Tom)
1797 </para>
1798 </listitem>
1800 <listitem>
1801 <para>
1802 Avoid tablespace permissions errors in <command>CREATE TABLE LIKE
1803 INCLUDING INDEXES</> (Tom)
1804 </para>
1805 </listitem>
1807 <listitem>
1808 <para>
1809 Ensure <structname>pg_stat_activity</>.<structfield>waiting</> flag
1810 is cleared when a lock wait is aborted (Tom)
1811 </para>
1812 </listitem>
1814 <listitem>
1815 <para>
1816 Fix handling of process permissions on Windows Vista (Dave, Magnus)
1817 </para>
1819 <para>
1820 In particular, this fix allows starting the server as the Administrator
1821 user.
1822 </para>
1823 </listitem>
1825 <listitem>
1826 <para>
1827 Update time zone data files to <application>tzdata</> release 2008a
1828 (in particular, recent Chile changes); adjust timezone abbreviation
1829 <literal>VET</> (Venezuela) to mean UTC-4:30, not UTC-4:00 (Tom)
1830 </para>
1831 </listitem>
1833 <listitem>
1834 <para>
1835 Fix <application>ecpg</> problems with arrays (Michael)
1836 </para>
1837 </listitem>
1839 <listitem>
1840 <para>
1841 Fix <application>pg_ctl</> to correctly extract the postmaster's port
1842 number from command-line options (Itagaki Takahiro, Tom)
1843 </para>
1845 <para>
1846 Previously, <literal>pg_ctl start -w</> could try to contact the
1847 postmaster on the wrong port, leading to bogus reports of startup
1848 failure.
1849 </para>
1850 </listitem>
1852 <listitem>
1853 <para>
1854 Use <option>-fwrapv</> to defend against possible misoptimization
1855 in recent <application>gcc</> versions (Tom)
1856 </para>
1858 <para>
1859 This is known to be necessary when building <productname>PostgreSQL</>
1860 with <application>gcc</> 4.3 or later.
1861 </para>
1862 </listitem>
1864 <listitem>
1865 <para>
1866 Enable building <filename>contrib/uuid-ossp</> with MSVC (Hiroshi Saito)
1867 </para>
1868 </listitem>
1870 </itemizedlist>
1872 </sect2>
1873 </sect1>
1875 <sect1 id="release-8-3">
1876 <title>Release 8.3</title>
1878 <note>
1879 <title>Release date</title>
1880 <simpara>2008-02-04</simpara>
1881 </note>
1883 <sect2>
1884 <title>Overview</title>
1886 <para>
1887 With significant new functionality and performance enhancements,
1888 this release represents a major leap forward for
1889 <productname>PostgreSQL</>. This was made possible by a growing
1890 community that has dramatically accelerated the pace of
1891 development. This release adds the following major features:
1892 </para>
1894 <itemizedlist>
1896 <listitem>
1897 <para>
1898 Full text search is integrated into the core database system
1899 </para>
1900 </listitem>
1902 <listitem>
1903 <para>
1904 Support for the SQL/XML standard, including new operators and an
1905 <type>XML</type> data type
1906 </para>
1907 </listitem>
1909 <listitem>
1910 <para>
1911 Enumerated data types (<type>ENUM</type>)
1912 </para>
1913 </listitem>
1915 <listitem>
1916 <para>
1917 Arrays of composite types
1918 </para>
1919 </listitem>
1921 <listitem>
1922 <para>
1923 Universally Unique Identifier (<type>UUID</>) data type
1924 </para>
1925 </listitem>
1927 <listitem>
1928 <para>
1929 Add control over whether <literal>NULL</>s sort first or last
1930 </para>
1931 </listitem>
1933 <listitem>
1934 <para>
1935 Updatable cursors
1936 </para>
1937 </listitem>
1939 <listitem>
1940 <para>
1941 Server configuration parameters can now be set on a per-function
1942 basis
1943 </para>
1944 </listitem>
1946 <listitem>
1947 <para>
1948 User-defined types can now have type modifiers
1949 </para>
1950 </listitem>
1952 <listitem>
1953 <para>
1954 Automatically re-plan cached queries when table
1955 definitions change or statistics are updated
1956 </para>
1957 </listitem>
1959 <listitem>
1960 <para>
1961 Numerous improvements in logging and statistics collection
1962 </para>
1963 </listitem>
1965 <listitem>
1966 <para>
1967 Support Security Service Provider Interface (<acronym>SSPI</>) for
1968 authentication on Windows
1969 </para>
1970 </listitem>
1972 <listitem>
1973 <para>
1974 Support multiple concurrent autovacuum processes, and other
1975 autovacuum improvements
1976 </para>
1977 </listitem>
1979 <listitem>
1980 <para>
1981 Allow the whole <productname>PostgreSQL</> distribution to be compiled
1982 with <productname>Microsoft Visual C++</>
1983 </para>
1984 </listitem>
1986 </itemizedlist>
1988 <para>
1989 Major performance improvements are listed below. Most of
1990 these enhancements are automatic and do not require user changes or
1991 tuning:
1992 </para>
1994 <itemizedlist>
1996 <listitem>
1997 <para>
1998 Asynchronous commit delays writes to WAL during transaction commit
1999 </para>
2000 </listitem>
2002 <listitem>
2003 <para>
2004 Checkpoint writes can be spread over a longer time period to smooth
2005 the I/O spike during each checkpoint
2006 </para>
2007 </listitem>
2009 <listitem>
2010 <para>
2011 Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for
2012 most <command>UPDATE</>s and <command>DELETE</>s
2013 </para>
2014 </listitem>
2016 <listitem>
2017 <para>
2018 Just-in-time background writer strategy improves disk write
2019 efficiency
2020 </para>
2021 </listitem>
2023 <listitem>
2024 <para>
2025 Using non-persistent transaction IDs for read-only transactions
2026 reduces overhead and <command>VACUUM</> requirements
2027 </para>
2028 </listitem>
2030 <listitem>
2031 <para>
2032 Per-field and per-row storage overhead has been reduced
2033 </para>
2034 </listitem>
2036 <listitem>
2037 <para>
2038 Large sequential scans no longer force out frequently used
2039 cached pages
2040 </para>
2041 </listitem>
2043 <listitem>
2044 <para>
2045 Concurrent large sequential scans can now share disk reads
2046 </para>
2047 </listitem>
2049 <listitem>
2050 <para>
2051 <literal>ORDER BY ... LIMIT</> can be done without sorting
2052 </para>
2053 </listitem>
2055 </itemizedlist>
2057 <para>
2058 The above items are explained in more detail in the sections below.
2059 </para>
2061 </sect2>
2063 <sect2>
2064 <title>Migration to Version 8.3</title>
2066 <para>
2067 A dump/restore using <application>pg_dump</application> is
2068 required for those wishing to migrate data from any previous
2069 release.
2070 </para>
2072 <para>
2073 Observe the following incompatibilities:
2074 </para>
2076 <sect3>
2077 <title>General</title>
2078 <itemizedlist>
2080 <listitem>
2081 <para>
2082 Non-character data types are no longer automatically cast to
2083 <type>TEXT</> (Peter, Tom)
2084 </para>
2086 <para>
2087 Previously, if a non-character value was supplied to an operator or
2088 function that requires <type>text</> input, it was automatically
2089 cast to <type>text</>, for most (though not all) built-in data types.
2090 This no longer happens: an explicit cast to <type>text</> is now
2091 required for all non-character-string types. For example, these
2092 expressions formerly worked:
2094 <programlisting>
2095 substr(current_date, 1, 4)
2096 23 LIKE '2%'
2097 </programlisting>
2099 but will now draw <quote>function does not exist</> and <quote>operator
2100 does not exist</> errors respectively. Use an explicit cast instead:
2102 <programlisting>
2103 substr(current_date::text, 1, 4)
2104 23::text LIKE '2%'
2105 </programlisting>
2107 (Of course, you can use the more verbose <literal>CAST()</> syntax too.)
2108 The reason for the change is that these automatic casts too often caused
2109 surprising behavior. An example is that in previous releases, this
2110 expression was accepted but did not do what was expected:
2112 <programlisting>
2113 current_date &lt; 2017-11-17
2114 </programlisting>
2116 This is actually comparing a date to an integer, which should be
2117 (and now is) rejected &mdash; but in the presence of automatic
2118 casts both sides were cast to <type>text</> and a textual comparison
2119 was done, because the <literal>text &lt; text</> operator was able
2120 to match the expression when no other <literal>&lt;</> operator could.
2121 </para>
2123 <para>
2124 Types <type>char(<replaceable>n</>)</type> and
2125 <type>varchar(<replaceable>n</>)</type> still cast to <type>text</>
2126 automatically. Also, automatic casting to <type>text</> still works for
2127 inputs to the concatenation (<literal>||</>) operator, so long as least
2128 one input is a character-string type.
2129 </para>
2130 </listitem>
2132 <listitem>
2133 <para>
2134 Full text search features from <filename>contrib/tsearch2</> have
2135 been moved into the core server, with some minor syntax changes
2136 </para>
2138 <para>
2139 <filename>contrib/tsearch2</> now contains a compatibility
2140 interface.
2141 </para>
2142 </listitem>
2144 <listitem>
2145 <para>
2146 <literal>ARRAY(SELECT ...)</literal>, where the <command>SELECT</>
2147 returns no rows, now returns an empty array, rather than NULL
2148 (Tom)
2149 </para>
2150 </listitem>
2152 <listitem>
2153 <para>
2154 The array type name for a base data type is no longer always the base
2155 type's name with an underscore prefix
2156 </para>
2158 <para>
2159 The old naming convention is still honored when possible, but
2160 application code should no longer depend on it. Instead
2161 use the new <literal>pg_type.typarray</literal> column to
2162 identify the array data type associated with a given type.
2163 </para>
2164 </listitem>
2166 <listitem>
2167 <para>
2168 <literal>ORDER BY ... USING</> <replaceable>operator</> must now
2169 use a less-than or greater-than <replaceable>operator</> that is
2170 defined in a btree operator class
2171 </para>
2173 <para>
2174 This restriction was added to prevent inconsistent results.
2175 </para>
2176 </listitem>
2178 <listitem>
2179 <para>
2180 <command>SET LOCAL</command> changes now persist until
2181 the end of the outermost transaction, unless rolled back (Tom)
2182 </para>
2184 <para>
2185 Previously <command>SET LOCAL</command>'s effects were lost
2186 after subtransaction commit (<command>RELEASE SAVEPOINT</>
2187 or exit from a PL/pgSQL exception block).
2188 </para>
2189 </listitem>
2191 <listitem>
2192 <para>
2193 Commands rejected in transaction blocks are now also rejected in
2194 multiple-statement query strings (Tom)
2195 </para>
2197 <para>
2198 For example, <literal>"BEGIN; DROP DATABASE; COMMIT"</> will now be
2199 rejected even if submitted as a single query message.
2200 </para>
2201 </listitem>
2203 <listitem>
2204 <para>
2205 <command>ROLLBACK</> outside a transaction block now
2206 issues <literal>NOTICE</> instead of <literal>WARNING</> (Bruce)
2207 </para>
2208 </listitem>
2210 <listitem>
2211 <para>
2212 Prevent <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command>
2213 from accepting schema-qualified names (Bruce)
2214 </para>
2216 <para>
2217 Formerly, these commands accepted <literal>schema.relation</> but
2218 ignored the schema part, which was confusing.
2219 </para>
2220 </listitem>
2222 <listitem>
2223 <para>
2224 <command>ALTER SEQUENCE</> no longer affects the sequence's
2225 <function>currval()</> state (Tom)
2226 </para>
2227 </listitem>
2229 <listitem>
2230 <para>
2231 Foreign keys now must match indexable conditions for
2232 cross-data-type references (Tom)
2233 </para>
2235 <para>
2236 This improves semantic consistency and helps avoid
2237 performance problems.
2238 </para>
2239 </listitem>
2241 <listitem>
2242 <para>
2243 Restrict object size functions to users who have reasonable
2244 permissions to view such information (Tom)
2245 </para>
2247 <para>
2248 For example, <function>pg_database_size()</function> now requires
2249 <literal>CONNECT</> permission, which is granted to everyone by
2250 default. <function>pg_tablespace_size()</function> requires
2251 <literal>CREATE</> permission in the tablespace, or is allowed if
2252 the tablespace is the default tablespace for the database.
2253 </para>
2254 </listitem>
2256 <listitem>
2257 <para>
2258 Remove the undocumented <literal>!!=</> (not in) operator (Tom)
2259 </para>
2261 <para>
2262 <literal>NOT IN (SELECT ...)</literal> is the proper way to
2263 perform this operation.
2264 </para>
2265 </listitem>
2267 <listitem>
2268 <para>
2269 Internal hashing functions are now more uniformly-distributed (Tom)
2270 </para>
2272 <para>
2273 If application code was computing and storing hash values using
2274 internal <productname>PostgreSQL</> hashing functions, the hash
2275 values must be regenerated.
2276 </para>
2277 </listitem>
2279 <listitem>
2280 <para>
2281 C-code conventions for handling variable-length data values
2282 have changed (Greg Stark, Tom)
2283 </para>
2285 <para>
2286 The new <function>SET_VARSIZE()</> macro <emphasis>must</> be used
2287 to set the length of generated <type>varlena</> values. Also, it
2288 might be necessary to expand (<quote>de-TOAST</quote>) input values
2289 in more cases.
2290 </para>
2291 </listitem>
2293 <listitem>
2294 <para>
2295 Continuous archiving no longer reports each successful archive
2296 operation to the server logs unless <literal>DEBUG</> level is used
2297 (Simon)
2298 </para>
2299 </listitem>
2301 </itemizedlist>
2303 </sect3>
2305 <sect3>
2306 <title>Configuration Parameters</title>
2308 <itemizedlist>
2310 <listitem>
2311 <para>
2312 Numerous changes in administrative server parameters
2313 </para>
2315 <para>
2316 <varname>bgwriter_lru_percent</>,
2317 <varname>bgwriter_all_percent</>,
2318 <varname>bgwriter_all_maxpages</>,
2319 <varname>stats_start_collector</>, and
2320 <varname>stats_reset_on_server_start</> are removed.
2321 <varname>redirect_stderr</> is renamed to
2322 <varname>logging_collector</>.
2323 <varname>stats_command_string</> is renamed to
2324 <varname>track_activities</>.
2325 <varname>stats_block_level</> and <varname>stats_row_level</>
2326 are merged into <varname>track_counts</>.
2327 A new boolean configuration parameter, <varname>archive_mode</>,
2328 controls archiving. Autovacuum's default settings have changed.
2329 </para>
2330 </listitem>
2332 <listitem>
2333 <para>
2334 Remove <varname>stats_start_collector</varname> parameter (Tom)
2335 </para>
2337 <para>
2338 We now always start the collector process, unless <acronym>UDP</>
2339 socket creation fails.
2340 </para>
2341 </listitem>
2343 <listitem>
2344 <para>
2345 Remove <varname>stats_reset_on_server_start</varname> parameter (Tom)
2346 </para>
2348 <para>
2349 This was removed because <function>pg_stat_reset()</function>
2350 can be used for this purpose.
2351 </para>
2352 </listitem>
2354 <listitem>
2355 <para>
2356 Commenting out a parameter in <filename>postgresql.conf</> now
2357 causes it to revert to its default value (Joachim Wieland)
2358 </para>
2360 <para>
2361 Previously, commenting out an entry left the parameter's value unchanged
2362 until the next server restart.
2363 </para>
2364 </listitem>
2366 </itemizedlist>
2368 </sect3>
2371 <sect3>
2372 <title>Character Encodings</title>
2374 <itemizedlist>
2376 <listitem>
2377 <para>
2378 Add more checks for invalidly-encoded data (Andrew)
2379 </para>
2381 <para>
2382 This change plugs some holes that existed in literal backslash
2383 escape string processing and <command>COPY</command> escape
2384 processing. Now the de-escaped string is rechecked to see if the
2385 result created an invalid multi-byte character.
2386 </para>
2387 </listitem>
2389 <listitem>
2390 <para>
2391 Disallow database encodings that are inconsistent with the server's
2392 locale setting (Tom)
2393 </para>
2395 <para>
2396 On most platforms, <literal>C</> locale is the only locale that
2397 will work with any database encoding. Other locale settings imply
2398 a specific encoding and will misbehave if the database encoding
2399 is something different. (Typical symptoms include bogus textual
2400 sort order and wrong results from <function>upper()</> or
2401 <function>lower()</>.) The server now rejects attempts to create
2402 databases that have an incompatible encoding.
2403 </para>
2404 </listitem>
2406 <listitem>
2407 <para>
2408 Ensure that <function>chr()</function> cannot create
2409 invalidly-encoded values (Andrew)
2410 </para>
2412 <para>
2413 In UTF8-encoded databases the argument of <function>chr()</function> is
2414 now treated as a Unicode code point. In other multi-byte encodings
2415 <function>chr()</function>'s argument must designate a 7-bit ASCII
2416 character. Zero is no longer accepted.
2417 <function>ascii()</function> has been adjusted to match.
2418 </para>
2419 </listitem>
2421 <listitem>
2422 <para>
2423 Adjust <function>convert()</function> behavior to ensure encoding
2424 validity (Andrew)
2425 </para>
2427 <para>
2428 The two argument form of <function>convert()</function> has been
2429 removed. The three argument form now takes a <type>bytea</type>
2430 first argument and returns a <type>bytea</type>. To cover the
2431 loss of functionality, three new functions have been added:
2432 </para>
2434 <itemizedlist>
2435 <listitem>
2436 <para>
2437 <function>convert_from(bytea, name)</function> returns
2438 <type>text</> &mdash; converts the first argument from the named
2439 encoding to the database encoding
2440 </para>
2441 </listitem>
2443 <listitem>
2444 <para>
2445 <function>convert_to(text, name)</function> returns
2446 <type>bytea</> &mdash; converts the first argument from the
2447 database encoding to the named encoding
2448 </para>
2449 </listitem>
2451 <listitem>
2452 <para>
2453 <function>length(bytea, name)</function> returns
2454 <type>integer</> &mdash; gives the length of the first
2455 argument in characters in the named encoding
2456 </para>
2457 </listitem>
2458 </itemizedlist>
2459 </listitem>
2461 <listitem>
2462 <para>
2463 Remove <literal>convert(argument USING conversion_name)</literal>
2464 (Andrew)
2465 </para>
2467 <para>
2468 Its behavior did not match the SQL standard.
2469 </para>
2470 </listitem>
2472 <listitem>
2473 <para>
2474 Make JOHAB encoding client-only (Tatsuo)
2475 </para>
2477 <para>
2478 JOHAB is not safe as a server-side encoding.
2479 </para>
2480 </listitem>
2482 </itemizedlist>
2484 </sect3>
2486 </sect2>
2488 <sect2>
2489 <title>Changes</title>
2491 <para>
2492 Below you will find a detailed account of the
2493 changes between <productname>PostgreSQL</productname> 8.3 and
2494 the previous major release.
2495 </para>
2497 <sect3>
2498 <title>Performance</title>
2499 <itemizedlist>
2501 <listitem>
2502 <para>
2503 Asynchronous commit delays writes to WAL during transaction commit
2504 (Simon)
2505 </para>
2507 <para>
2508 This feature dramatically increases performance for short data-modifying
2509 transactions. The disadvantage is that because disk writes are delayed,
2510 if the database or operating system crashes before data is written to
2511 the disk, committed data will be lost. This feature is useful for
2512 applications that can accept some data loss. Unlike turning off
2513 <varname>fsync</varname>, using asynchronous commit does not put
2514 database consistency at risk; the worst case is that after a crash the
2515 last few reportedly-committed transactions might not be committed after
2516 all.
2517 This feature is enabled by turning off <varname>synchronous_commit</>
2518 (which can be done per-session or per-transaction, if some transactions
2519 are critical and others are not).
2520 <varname>wal_writer_delay</> can be adjusted to control the maximum
2521 delay before transactions actually reach disk.
2522 </para>
2523 </listitem>
2525 <listitem>
2526 <para>
2527 Checkpoint writes can be spread over a longer time period to smooth
2528 the I/O spike during each checkpoint (Itagaki Takahiro and Heikki
2529 Linnakangas)
2530 </para>
2532 <para>
2533 Previously all modified buffers were forced to disk as quickly as
2534 possible during a
2535 checkpoint, causing an I/O spike that decreased server performance.
2536 This new approach spreads out disk writes during checkpoints,
2537 reducing peak I/O usage. (User-requested and shutdown checkpoints
2538 are still written as quickly as possible.)
2539 </para>
2540 </listitem>
2542 <listitem>
2543 <para>
2544 Heap-Only Tuples (<acronym>HOT</>) accelerate space reuse for most
2545 <command>UPDATE</>s and <command>DELETE</>s (Pavan Deolasee, with
2546 ideas from many others)
2547 </para>
2549 <para>
2550 <command>UPDATE</>s and <command>DELETE</>s leave dead tuples
2551 behind, as do failed <command>INSERT</>s. Previously only
2552 <command>VACUUM</> could reclaim space taken by dead tuples. With
2553 <acronym>HOT</> dead tuple space can be automatically reclaimed at
2554 the time of <command>INSERT</> or <command>UPDATE</> if no changes
2555 are made to indexed columns. This allows for more consistent
2556 performance. Also, <acronym>HOT</> avoids adding duplicate index
2557 entries.
2558 </para>
2559 </listitem>
2561 <listitem>
2562 <para>
2563 Just-in-time background writer strategy improves disk write
2564 efficiency (Greg Smith, Itagaki Takahiro)
2565 </para>
2567 <para>
2568 This greatly reduces the need for manual tuning of the background
2569 writer.
2570 </para>
2571 </listitem>
2573 <listitem>
2574 <para>
2575 Per-field and per-row storage overhead have been reduced
2576 (Greg Stark, Heikki Linnakangas)
2577 </para>
2579 <para>
2580 Variable-length data types with data values less than 128 bytes long
2581 will see a storage decrease of 3 to 6 bytes. For example, two adjacent
2582 <type>char(1)</type> fields now use 4 bytes instead of 16. Row headers
2583 are also 4 bytes shorter than before.
2584 </para>
2585 </listitem>
2587 <listitem>
2588 <para>
2589 Using non-persistent transaction IDs for read-only transactions
2590 reduces overhead and <command>VACUUM</> requirements (Florian Pflug)
2591 </para>
2593 <para>
2594 Non-persistent transaction IDs do not increment the global
2595 transaction counter. Therefore, they reduce the load on
2596 <structname>pg_clog</> and increase the time between forced
2597 vacuums to prevent transaction ID wraparound.
2598 Other performance
2599 improvements were also made that should improve concurrency.
2600 </para>
2601 </listitem>
2603 <listitem>
2604 <para>
2605 Avoid incrementing the command counter after a read-only command (Tom)
2606 </para>
2608 <para>
2609 There was formerly a hard limit of 2<superscript>32</>
2610 (4 billion) commands per transaction. Now only commands that
2611 actually changed the database count, so while this limit still
2612 exists, it should be significantly less annoying.
2613 </para>
2614 </listitem>
2616 <listitem>
2617 <para>
2618 Create a dedicated <acronym>WAL</> writer process to off-load
2619 work from backends (Simon)
2620 </para>
2621 </listitem>
2623 <listitem>
2624 <para>
2625 Skip unnecessary WAL writes for <command>CLUSTER</command> and
2626 <command>COPY</command> (Simon)
2627 </para>
2629 <para>
2630 Unless WAL archiving is enabled, the system now avoids WAL writes
2631 for <command>CLUSTER</command> and just <function>fsync()</>s the
2632 table at the end of the command. It also does the same for
2633 <command>COPY</command> if the table was created in the same
2634 transaction.
2635 </para>
2636 </listitem>
2638 <listitem>
2639 <para>
2640 Large sequential scans no longer force out frequently used
2641 cached pages (Simon, Heikki, Tom)
2642 </para>
2643 </listitem>
2645 <listitem>
2646 <para>
2647 Concurrent large sequential scans can now share disk reads (Jeff Davis)
2648 </para>
2650 <para>
2651 This is accomplished by starting the new sequential scan in the
2652 middle of the table (where another sequential scan is already
2653 in-progress) and wrapping around to the beginning to finish. This
2654 can affect the order of returned rows in a query that does not
2655 specify <literal>ORDER BY</>. The <varname>synchronize_seqscans</>
2656 configuration parameter can be used to disable this if necessary.
2657 </para>
2658 </listitem>
2660 <listitem>
2661 <para>
2662 <literal>ORDER BY ... LIMIT</> can be done without sorting
2663 (Greg Stark)
2664 </para>
2666 <para>
2667 This is done by sequentially scanning the table and tracking just
2668 the <quote>top N</> candidate rows, rather than performing a
2669 full sort of the entire table. This is useful when there is no
2670 matching index and the <literal>LIMIT</> is not large.
2671 </para>
2672 </listitem>
2674 <listitem>
2675 <para>
2676 Put a rate limit on messages sent to the statistics
2677 collector by backends
2678 (Tom)
2679 </para>
2681 <para>
2682 This reduces overhead for short transactions, but might sometimes
2683 increase the delay before statistics are tallied.
2684 </para>
2685 </listitem>
2687 <listitem>
2688 <para>
2689 Improve hash join performance for cases with many NULLs (Tom)
2690 </para>
2691 </listitem>
2693 <listitem>
2694 <para>
2695 Speed up operator lookup for cases with non-exact datatype matches (Tom)
2696 </para>
2697 </listitem>
2699 </itemizedlist>
2701 </sect3>
2703 <sect3>
2704 <title>Server</title>
2705 <itemizedlist>
2707 <listitem>
2708 <para>
2709 Autovacuum is now enabled by default (Alvaro)
2710 </para>
2712 <para>
2713 Several changes were made to eliminate disadvantages of having
2714 autovacuum enabled, thereby justifying the change in default.
2715 Several other autovacuum parameter defaults were also modified.
2716 </para>
2717 </listitem>
2719 <listitem>
2720 <para>
2721 Support multiple concurrent autovacuum processes (Alvaro, Itagaki
2722 Takahiro)
2723 </para>
2725 <para>
2726 This allows multiple vacuums to run concurrently. This prevents
2727 vacuuming of a large table from delaying vacuuming of smaller tables.
2728 </para>
2729 </listitem>
2731 <listitem>
2732 <para>
2733 Automatically re-plan cached queries when table
2734 definitions change or statistics are updated (Tom)
2735 </para>
2737 <para>
2738 Previously PL/PgSQL functions that referenced temporary tables
2739 would fail if the temporary table was dropped and recreated
2740 between function invocations, unless <literal>EXECUTE</> was
2741 used. This improvement fixes that problem and many related issues.
2742 </para>
2743 </listitem>
2745 <listitem>
2746 <para>
2747 Add a <varname>temp_tablespaces</varname> parameter to control
2748 the tablespaces for temporary tables and files (Jaime Casanova,
2749 Albert Cervera, Bernd Helmle)
2750 </para>
2752 <para>
2753 This parameter defines a list of tablespaces to be used. This
2754 enables spreading the I/O load across multiple tablespaces. A random
2755 tablespace is chosen each time a temporary object is created.
2756 Temporary files are no longer stored in per-database
2757 <filename>pgsql_tmp/</filename> directories but in per-tablespace
2758 directories.
2759 </para>
2760 </listitem>
2762 <listitem>
2763 <para>
2764 Place temporary tables' TOAST tables in special schemas named
2765 <literal>pg_toast_temp_<replaceable>nnn</></literal> (Tom)
2766 </para>
2768 <para>
2769 This allows low-level code to recognize these tables as temporary,
2770 which enables various optimizations such as not WAL-logging changes
2771 and using local rather than shared buffers for access. This also
2772 fixes a bug wherein backends unexpectedly held open file references
2773 to temporary TOAST tables.
2774 </para>
2775 </listitem>
2777 <listitem>
2778 <para>
2779 Fix problem that a constant flow of new connection requests could
2780 indefinitely delay the postmaster from completing a shutdown or
2781 a crash restart (Tom)
2782 </para>
2783 </listitem>
2785 <listitem>
2786 <para>
2787 Guard against a very-low-probability data loss scenario by preventing
2788 re-use of a deleted table's relfilenode until after the next
2789 checkpoint (Heikki)
2790 </para>
2791 </listitem>
2793 <listitem>
2794 <para>
2795 Fix <command>CREATE CONSTRAINT TRIGGER</>
2796 to convert old-style foreign key trigger definitions into regular
2797 foreign key constraints (Tom)
2798 </para>
2800 <para>
2801 This will ease porting of foreign key constraints carried forward from
2802 pre-7.3 databases, if they were never converted using
2803 <filename>contrib/adddepend</>.
2804 </para>
2805 </listitem>
2807 <listitem>
2808 <para>
2809 Fix <literal>DEFAULT NULL</> to override inherited defaults (Tom)
2810 </para>
2812 <para>
2813 <literal>DEFAULT NULL</> was formerly considered a noise phrase, but it
2814 should (and now does) override non-null defaults that would otherwise
2815 be inherited from a parent table or domain.
2816 </para>
2817 </listitem>
2819 <listitem>
2820 <para>
2821 Add new encodings EUC_JIS_2004 and SHIFT_JIS_2004 (Tatsuo)
2822 </para>
2824 <para>
2825 These new encodings can be converted to and from UTF-8.
2826 </para>
2827 </listitem>
2829 <listitem>
2830 <para>
2831 Change server startup log message from <quote>database system is
2832 ready</quote> to <quote>database system is ready to accept
2833 connections</quote>, and adjust its timing
2834 </para>
2836 <para>
2837 The message now appears only when the postmaster is really ready
2838 to accept connections.
2839 </para>
2840 </listitem>
2842 </itemizedlist>
2844 </sect3>
2846 <sect3>
2847 <title>Monitoring</title>
2848 <itemizedlist>
2850 <listitem>
2851 <para>
2852 Add <varname>log_autovacuum_min_duration</varname> parameter to
2853 support configurable logging of autovacuum activity (Simon, Alvaro)
2854 </para>
2855 </listitem>
2857 <listitem>
2858 <para>
2859 Add <varname>log_lock_waits</varname> parameter to log lock waiting
2860 (Simon)
2861 </para>
2862 </listitem>
2864 <listitem>
2865 <para>
2866 Add <varname>log_temp_files</varname> parameter to log temporary
2867 file usage (Bill Moran)
2868 </para>
2869 </listitem>
2871 <listitem>
2872 <para>
2873 Add <varname>log_checkpoints</varname> parameter to improve logging
2874 of checkpoints (Greg Smith, Heikki)
2875 </para>
2876 </listitem>
2878 <listitem>
2879 <para>
2880 <varname>log_line_prefix</varname> now supports
2881 <literal>%s</literal> and <literal>%c</literal> escapes in all
2882 processes (Andrew)
2883 </para>
2885 <para>
2886 Previously these escapes worked only for user sessions, not for
2887 background database processes.
2888 </para>
2889 </listitem>
2891 <listitem>
2892 <para>
2893 Add <varname>log_restartpoints</varname> to control logging of
2894 point-in-time recovery restart points (Simon)
2895 </para>
2896 </listitem>
2898 <listitem>
2899 <para>
2900 Last transaction end time is now logged at end of recovery and at
2901 each logged restart point (Simon)
2902 </para>
2903 </listitem>
2905 <listitem>
2906 <para>
2907 Autovacuum now reports its activity start time in
2908 <literal>pg_stat_activity</literal> (Tom)
2909 </para>
2910 </listitem>
2912 <listitem>
2913 <para>
2914 Allow server log output in comma-separated value (CSV) format (Arul
2915 Shaji, Greg Smith, Andrew Dunstan)
2916 </para>
2918 <para>
2919 CSV-format log files can easily be loaded into a database table for
2920 subsequent analysis.
2921 </para>
2922 </listitem>
2924 <listitem>
2925 <para>
2926 Use PostgreSQL-supplied timezone support for formatting timestamps
2927 displayed in the server log (Tom)
2928 </para>
2930 <para>
2931 This avoids Windows-specific problems with localized time zone
2932 names that are in the wrong encoding. There is a new
2933 <varname>log_timezone</> parameter that controls the timezone
2934 used in log messages, independently of the client-visible
2935 <varname>timezone</> parameter.
2936 </para>
2937 </listitem>
2939 <listitem>
2940 <para>
2941 New system view <literal>pg_stat_bgwriter</literal> displays
2942 statistics about background writer activity (Magnus)
2943 </para>
2944 </listitem>
2946 <listitem>
2947 <para>
2948 Add new columns for database-wide tuple statistics to
2949 <literal>pg_stat_database</literal> (Magnus)
2950 </para>
2951 </listitem>
2953 <listitem>
2954 <para>
2955 Add an <literal>xact_start</literal> (transaction start time) column to
2956 <literal>pg_stat_activity</literal> (Neil)
2957 </para>
2959 <para>
2960 This makes it easier to identify long-running transactions.
2961 </para>
2962 </listitem>
2964 <listitem>
2965 <para>
2966 Add <literal>n_live_tuples</> and <literal>n_dead_tuples</> columns
2967 to <literal>pg_stat_all_tables</literal> and related views (Glen
2968 Parker)
2969 </para>
2970 </listitem>
2972 <listitem>
2973 <para>
2974 Merge <varname>stats_block_level</> and <varname>stats_row_level</>
2975 parameters into a single parameter <varname>track_counts</>, which
2976 controls all messages sent to the statistics collector process
2977 (Tom)
2978 </para>
2979 </listitem>
2981 <listitem>
2982 <para>
2983 Rename <varname>stats_command_string</varname> parameter to
2984 <varname>track_activities</varname> (Tom)
2985 </para>
2986 </listitem>
2988 <listitem>
2989 <para>
2990 Fix statistical counting of live and dead tuples to recognize that
2991 committed and aborted transactions have different effects (Tom)
2992 </para>
2993 </listitem>
2995 </itemizedlist>
2997 </sect3>
2999 <sect3>
3000 <title>Authentication</title>
3001 <itemizedlist>
3003 <listitem>
3004 <para>
3005 Support Security Service Provider Interface (<acronym>SSPI</>) for
3006 authentication on Windows (Magnus)
3007 </para>
3008 </listitem>
3010 <listitem>
3011 <para>
3012 Support GSSAPI authentication (Henry Hotz, Magnus)
3013 </para>
3015 <para>
3016 This should be preferred to native Kerberos authentication because
3017 GSSAPI is an industry standard.
3018 </para>
3019 </listitem>
3021 <listitem>
3022 <para>
3023 Support a global SSL configuration file (Victor Wagner)
3024 </para>
3025 </listitem>
3027 <listitem>
3028 <para>
3029 Add <varname>ssl_ciphers</> parameter to control accepted SSL ciphers
3030 (Victor Wagner)
3031 </para>
3032 </listitem>
3034 <listitem>
3035 <para>
3036 Add a Kerberos realm parameter, <varname>krb_realm</> (Magnus)
3037 </para>
3038 </listitem>
3040 </itemizedlist>
3042 </sect3>
3044 <sect3>
3045 <title>Write-Ahead Log (<acronym>WAL</>) and Continuous Archiving</title>
3046 <itemizedlist>
3048 <listitem>
3049 <para>
3050 Change the timestamps recorded in transaction WAL records from
3051 time_t to TimestampTz representation (Tom)
3052 </para>
3054 <para>
3055 This provides sub-second resolution in WAL, which can be useful for
3056 point-in-time recovery.
3057 </para>
3058 </listitem>
3060 <listitem>
3061 <para>
3062 Reduce WAL disk space needed by warm standby servers (Simon)
3063 </para>
3065 <para>
3066 This change allows a warm standby server to pass the name of the earliest
3067 still-needed WAL file to the recovery script, allowing automatic removal
3068 of no-longer-needed WAL files. This is done using <literal>%r</> in
3069 the <varname>restore_command</varname> parameter of
3070 <filename>recovery.conf</filename>.
3071 </para>
3072 </listitem>
3074 <listitem>
3075 <para>
3076 New boolean configuration parameter, <varname>archive_mode</>,
3077 controls archiving (Simon)
3078 </para>
3080 <para>
3081 Previously setting <varname>archive_command</> to an empty string
3082 turned off archiving. Now <varname>archive_mode</> turns archiving
3083 on and off, independently of <varname>archive_command</>. This is
3084 useful for stopping archiving temporarily.
3085 </para>
3086 </listitem>
3088 </itemizedlist>
3090 </sect3>
3092 <sect3>
3093 <title>Queries</title>
3094 <itemizedlist>
3096 <listitem>
3097 <para>
3098 Full text search is integrated into the core database
3099 system (Teodor, Oleg)
3100 </para>
3102 <para>
3103 Text search has been improved, moved into the core code, and is now
3104 installed by default. <filename>contrib/tsearch2</> now contains
3105 a compatibility interface.
3106 </para>
3107 </listitem>
3109 <listitem>
3110 <para>
3111 Add control over whether <literal>NULL</>s sort first or last (Teodor, Tom)
3112 </para>
3114 <para>
3115 The syntax is <literal>ORDER BY ... NULLS FIRST/LAST</>.
3116 </para>
3117 </listitem>
3119 <listitem>
3120 <para>
3121 Allow per-column ascending/descending (<literal>ASC</>/<literal>DESC</>)
3122 ordering options for indexes (Teodor, Tom)
3123 </para>
3125 <para>
3126 Previously a query using <literal>ORDER BY</> with mixed
3127 <literal>ASC</>/<literal>DESC</> specifiers could not fully use
3128 an index. Now an index can be fully used in such cases if the
3129 index was created with matching
3130 <literal>ASC</>/<literal>DESC</> specifications.
3131 <literal>NULL</> sort order within an index can be controlled, too.
3132 </para>
3133 </listitem>
3135 <listitem>
3136 <para>
3137 Allow <literal>col IS NULL</> to use an index (Teodor)
3138 </para>
3139 </listitem>
3141 <listitem>
3142 <para>
3143 Updatable cursors (Arul Shaji, Tom)
3144 </para>
3146 <para>
3147 This eliminates the need to reference a primary key to
3148 <command>UPDATE</> or <command>DELETE</> rows returned by a cursor.
3149 The syntax is <literal>UPDATE/DELETE WHERE CURRENT OF</>.
3150 </para>
3151 </listitem>
3153 <listitem>
3154 <para>
3155 Allow <literal>FOR UPDATE</literal> in cursors (Arul Shaji, Tom)
3156 </para>
3157 </listitem>
3159 <listitem>
3160 <para>
3161 Create a general mechanism that supports casts to and from the
3162 standard string types (<type>TEXT</type>, <type>VARCHAR</type>,
3163 <type>CHAR</type>) for <emphasis>every</emphasis> datatype, by
3164 invoking the datatype's I/O functions (Tom)
3165 </para>
3167 <para>
3168 Previously, such casts were available only for types that had
3169 specialized function(s) for the purpose.
3170 These new casts are assignment-only in the to-string direction,
3171 explicit-only in the other direction, and therefore should create no
3172 surprising behavior.
3173 </para>
3174 </listitem>
3176 <listitem>
3177 <para>
3178 Allow <literal>UNION</> and related constructs to return a domain
3179 type, when all inputs are of that domain type (Tom)
3180 </para>
3182 <para>
3183 Formerly, the output would be considered to be of the domain's base
3184 type.
3185 </para>
3186 </listitem>
3188 <listitem>
3189 <para>
3190 Allow limited hashing when using two different data types (Tom)
3191 </para>
3193 <para>
3194 This allows hash joins, hash indexes, hashed subplans, and hash
3195 aggregation to be used in situations involving cross-data-type
3196 comparisons, if the data types have compatible hash functions.
3197 Currently, cross-data-type hashing support exists for
3198 <type>smallint</type>/<type>integer</type>/<type>bigint</type>,
3199 and for <type>float4</type>/<type>float8</type>.
3200 </para>
3201 </listitem>
3203 <listitem>
3204 <para>
3205 Improve optimizer logic for detecting when variables are equal
3206 in a <literal>WHERE</> clause (Tom)
3207 </para>
3209 <para>
3210 This allows mergejoins to work with descending sort orders, and
3211 improves recognition of redundant sort columns.
3212 </para>
3213 </listitem>
3215 <listitem>
3216 <para>
3217 Improve performance when planning large inheritance trees in
3218 cases where most tables are excluded by constraints (Tom)
3219 </para>
3220 </listitem>
3222 </itemizedlist>
3224 </sect3>
3226 <sect3>
3227 <title>Object Manipulation</title>
3228 <itemizedlist>
3230 <listitem>
3232 <para>
3233 Arrays of composite types (David Fetter, Andrew, Tom)
3234 </para>
3236 <para>
3237 In addition to arrays of explicitly-declared composite types,
3238 arrays of the rowtypes of regular tables and views are now
3239 supported, except for rowtypes of system catalogs, sequences, and TOAST
3240 tables.
3241 </para>
3243 </listitem>
3245 <listitem>
3246 <para>
3247 Server configuration parameters can now be set on a per-function
3248 basis (Tom)
3249 </para>
3251 <para>
3252 For example, functions can now set their own
3253 <varname>search_path</> to prevent unexpected behavior if a
3254 different <varname>search_path</> exists at run-time. Security
3255 definer functions should set <varname>search_path</varname> to
3256 avoid security loopholes.
3257 </para>
3258 </listitem>
3260 <listitem>
3261 <para>
3262 <command>CREATE/ALTER FUNCTION</command> now supports
3263 <literal>COST</literal> and <literal>ROWS</literal> options (Tom)
3264 </para>
3266 <para>
3267 <literal>COST</literal> allows specification of the cost of a
3268 function call. <literal>ROWS</literal> allows specification of
3269 the average number or rows returned by a set-returning function.
3270 These values are used by the optimizer in choosing the best plan.
3271 </para>
3272 </listitem>
3274 <listitem>
3275 <para>
3276 Implement <command>CREATE TABLE LIKE ... INCLUDING
3277 INDEXES</command> (Trevor Hardcastle, Nikhil Sontakke, Neil)
3278 </para>
3279 </listitem>
3281 <listitem>
3282 <para>
3283 Allow <command>CREATE INDEX CONCURRENTLY</command> to ignore
3284 transactions in other databases (Simon)
3285 </para>
3286 </listitem>
3288 <listitem>
3289 <para>
3290 Add <command>ALTER VIEW ... RENAME TO</command> and <command>ALTER
3291 SEQUENCE ... RENAME TO</command> (David Fetter, Neil)
3292 </para>
3294 <para>
3295 Previously this could only be done via <command>ALTER TABLE ...
3296 RENAME TO</command>.
3297 </para>
3298 </listitem>
3300 <listitem>
3301 <para>
3302 Make <command>CREATE/DROP/RENAME DATABASE</> wait briefly for
3303 conflicting backends to exit before failing (Tom)
3304 </para>
3306 <para>
3307 This increases the likelihood that these commands will succeed.
3308 </para>
3309 </listitem>
3311 <listitem>
3312 <para>
3313 Allow triggers and rules to be deactivated in groups using a
3314 configuration parameter, for replication purposes (Jan)
3315 </para>
3317 <para>
3318 This allows replication systems to disable triggers and rewrite
3319 rules as a group without modifying the system catalogs directly.
3320 The behavior is controlled by <command>ALTER TABLE</> and a new
3321 parameter <varname>session_replication_role</varname>.
3322 </para>
3323 </listitem>
3325 <listitem>
3326 <para>
3327 User-defined types can now have type modifiers (Teodor, Tom)
3328 </para>
3330 <para>
3331 This allows a user-defined type to take a modifier, like
3332 <type>ssnum(7)</>. Previously only built-in
3333 data types could have modifiers.
3334 </para>
3335 </listitem>
3337 </itemizedlist>
3339 </sect3>
3341 <sect3>
3342 <title>Utility Commands</title>
3343 <itemizedlist>
3345 <listitem>
3346 <para>
3347 Non-superuser database owners now are able to add trusted procedural
3348 languages to their databases by default (Jeremy Drake)
3349 </para>
3351 <para>
3352 While this is reasonably safe, some administrators might wish to
3353 revoke the privilege. It is controlled by
3354 <structname>pg_pltemplate</>.<structfield>tmpldbacreate</>.
3355 </para>
3356 </listitem>
3358 <listitem>
3359 <para>
3360 Allow a session's current parameter setting to be used as the
3361 default for future sessions (Tom)
3362 </para>
3364 <para>
3365 This is done with <literal>SET ... FROM CURRENT</literal> in
3366 <command>CREATE/ALTER FUNCTION</command>, <command>ALTER
3367 DATABASE</command>, or <command>ALTER ROLE</command>.
3368 </para>
3369 </listitem>
3371 <listitem>
3372 <para>
3373 Implement new commands <command>DISCARD ALL</command>,
3374 <command>DISCARD PLANS</command>, <command>DISCARD
3375 TEMPORARY</command>, <command>CLOSE ALL</command>, and
3376 <command>DEALLOCATE ALL</command> (Marko Kreen, Neil)
3377 </para>
3379 <para>
3380 These commands simplify resetting a database session to its initial
3381 state, and are particularly useful for connection-pooling software.
3382 </para>
3383 </listitem>
3385 <listitem>
3386 <para>
3387 Make <command>CLUSTER</command> MVCC-safe (Heikki Linnakangas)
3388 </para>
3390 <para>
3391 Formerly, <command>CLUSTER</command> would discard all tuples
3392 that were committed dead, even if there were still transactions
3393 that should be able to see them under MVCC visibility rules.
3394 </para>
3395 </listitem>
3397 <listitem>
3398 <para>
3399 Add new <command>CLUSTER</command> syntax: <literal>CLUSTER
3400 <replaceable>table</> USING <replaceable>index</></literal>
3401 (Holger Schurig)
3402 </para>
3404 <para>
3405 The old <command>CLUSTER</command> syntax is still supported, but
3406 the new form is considered more logical.
3407 </para>
3408 </listitem>
3410 <listitem>
3411 <para>
3412 Fix <command>EXPLAIN</command> so it can show complex plans
3413 more accurately (Tom)
3414 </para>
3416 <para>
3417 References to subplan outputs are now always shown correctly,
3418 instead of using <literal>?column<replaceable>N</>?</literal>
3419 for complicated cases.
3420 </para>
3421 </listitem>
3423 <listitem>
3424 <para>
3425 Limit the amount of information reported when a user is dropped
3426 (Alvaro)
3427 </para>
3429 <para>
3430 Previously, dropping (or attempting to drop) a user who owned many
3431 objects could result in large <literal>NOTICE</literal> or
3432 <literal>ERROR</literal> messages listing all these objects; this
3433 caused problems for some client applications. The length of the
3434 message is now limited, although a full list is still sent to the
3435 server log.
3436 </para>
3437 </listitem>
3439 </itemizedlist>
3441 </sect3>
3443 <sect3>
3444 <title>Data Types</title>
3445 <itemizedlist>
3447 <listitem>
3448 <para>
3449 Support for the SQL/XML standard, including new operators and an
3450 <type>XML</type> data type (Nikolay Samokhvalov, Pavel Stehule, Peter)
3451 </para>
3452 </listitem>
3454 <listitem>
3455 <para>
3456 Enumerated data types (<type>ENUM</type>) (Tom Dunstan)
3457 </para>
3459 <para>
3460 This feature provides convenient support for fields that have a
3461 small, fixed set of allowed values. An example of creating an
3462 <literal>ENUM</> type is
3463 <literal>CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy')</>.
3464 </para>
3465 </listitem>
3467 <listitem>
3468 <para>
3469 Universally Unique Identifier (<type>UUID</>) data type (Gevik
3470 Babakhani, Neil)
3471 </para>
3473 <para>
3474 This closely matches <acronym>RFC</> 4122.
3475 </para>
3476 </listitem>
3478 <listitem>
3479 <para>
3480 Widen the <type>MONEY</type> data type to 64 bits (D'Arcy Cain)
3481 </para>
3483 <para>
3484 This greatly increases the range of supported <type>MONEY</>
3485 values.
3486 </para>
3487 </listitem>
3489 <listitem>
3490 <para>
3491 Fix <type>float4</type>/<type>float8</type> to handle
3492 <literal>Infinity</> and <literal>NAN</> (Not A Number)
3493 consistently (Bruce)
3494 </para>
3496 <para>
3497 The code formerly was not consistent about distinguishing
3498 <literal>Infinity</> from overflow conditions.
3499 </para>
3500 </listitem>
3502 <listitem>
3503 <para>
3504 Allow leading and trailing whitespace during input of
3505 <type>boolean</type> values (Neil)
3506 </para>
3507 </listitem>
3509 <listitem>
3510 <para>
3511 Prevent <command>COPY</> from using digits and lowercase letters as
3512 delimiters (Tom)
3513 </para>
3514 </listitem>
3516 </itemizedlist>
3518 </sect3>
3520 <sect3>
3521 <title>Functions</title>
3522 <itemizedlist>
3524 <listitem>
3525 <para>
3526 Add new regular expression functions
3527 <function>regexp_matches()</function>,
3528 <function>regexp_split_to_array()</function>, and
3529 <function>regexp_split_to_table()</function> (Jeremy Drake, Neil)
3530 </para>
3532 <para>
3533 These functions provide extraction of regular expression
3534 subexpressions and allow splitting a string using a POSIX regular
3535 expression.
3536 </para>
3537 </listitem>
3539 <listitem>
3540 <para>
3541 Add <function>lo_truncate()</function> for large object truncation
3542 (Kris Jurka)
3543 </para>
3544 </listitem>
3546 <listitem>
3547 <para>
3548 Implement <function>width_bucket()</function> for the <type>float8</>
3549 data type (Neil)
3550 </para>
3551 </listitem>
3553 <listitem>
3554 <para>
3555 Add <function>pg_stat_clear_snapshot()</function> to discard
3556 statistics snapshots collected during the current transaction
3557 (Tom)
3558 </para>
3560 <para>
3561 The first request for statistics in a transaction takes a statistics
3562 snapshot that does not change during the transaction. This function
3563 allows the snapshot to be discarded and a new snapshot loaded during
3564 the next statistics query. This is particularly useful for PL/PgSQL
3565 functions, which are confined to a single transaction.
3566 </para>
3567 </listitem>
3569 <listitem>
3570 <para>
3571 Add <literal>isodow</> option to <function>EXTRACT()</> and
3572 <function>date_part()</> (Bruce)
3573 </para>
3575 <para>
3576 This returns the day of the week, with Sunday as seven.
3577 (<literal>dow</> returns Sunday as zero.)
3578 </para>
3579 </listitem>
3581 <listitem>
3582 <para>
3583 Add <literal>ID</> (ISO day of week) and <literal>IDDD</> (ISO
3584 day of year) format codes for <function>to_char()</>,
3585 <function>to_date()</>, and <function>to_timestamp()</> (Brendan
3586 Jurd)
3587 </para>
3588 </listitem>
3590 <listitem>
3591 <para>
3592 Make <function>to_timestamp()</> and <function>to_date()</>
3593 assume <literal>TM</literal> (trim) option for potentially
3594 variable-width fields (Bruce)
3595 </para>
3597 <para>
3598 This matches <productname>Oracle</>'s behavior.
3599 </para>
3600 </listitem>
3602 <listitem>
3603 <para>
3604 Fix off-by-one conversion error in
3605 <function>to_date()</function>/<function>to_timestamp()</function>
3606 <literal>D</> (non-ISO day of week) fields (Bruce)
3607 </para>
3608 </listitem>
3610 <listitem>
3611 <para>
3612 Make <function>setseed()</function> return void, rather than a
3613 useless integer value (Neil)
3614 </para>
3615 </listitem>
3617 <listitem>
3618 <para>
3619 Add a hash function for <type>NUMERIC</type> (Neil)
3620 </para>
3622 <para>
3623 This allows hash indexes and hash-based plans to be used with
3624 <type>NUMERIC</type> columns.
3625 </para>
3626 </listitem>
3628 <listitem>
3629 <para>
3630 Improve efficiency of
3631 <literal>LIKE</literal>/<literal>ILIKE</literal>, especially for
3632 multi-byte character sets like UTF-8 (Andrew, Itagaki Takahiro)
3633 </para>
3634 </listitem>
3636 <listitem>
3637 <para>
3638 Make <function>currtid()</function> functions require
3639 <literal>SELECT</literal> privileges on the target table (Tom)
3640 </para>
3641 </listitem>
3643 <listitem>
3644 <para>
3645 Add several <function>txid_*()</function> functions to query
3646 active transaction IDs (Jan)
3647 </para>
3649 <para>
3650 This is useful for various replication solutions.
3651 </para>
3652 </listitem>
3654 </itemizedlist>
3656 </sect3>
3658 <sect3>
3659 <title>PL/PgSQL Server-Side Language</title>
3660 <itemizedlist>
3662 <listitem>
3663 <para>
3664 Add scrollable cursor support, including directional control in
3665 <command>FETCH</command> (Pavel Stehule)
3666 </para>
3667 </listitem>
3669 <listitem>
3670 <para>
3671 Allow <literal>IN</literal> as an alternative to
3672 <literal>FROM</literal> in PL/PgSQL's <command>FETCH</command>
3673 statement, for consistency with the backend's
3674 <command>FETCH</command> command (Pavel Stehule)
3675 </para>
3676 </listitem>
3678 <listitem>
3679 <para>
3680 Add <command>MOVE</command> to PL/PgSQL (Magnus, Pavel Stehule,
3681 Neil)
3682 </para>
3683 </listitem>
3685 <listitem>
3686 <para>
3687 Implement <command>RETURN QUERY</command> (Pavel Stehule, Neil)
3688 </para>
3690 <para>
3691 This adds convenient syntax for PL/PgSQL set-returning functions
3692 that want to return the result of a query. <command>RETURN QUERY</>
3693 is easier and more efficient than a loop
3694 around <command>RETURN NEXT</command>.
3695 </para>
3696 </listitem>
3698 <listitem>
3699 <para>
3700 Allow function parameter names to be qualified with the
3701 function's name (Tom)
3702 </para>
3704 <para>
3705 For example, <literal>myfunc.myvar</>. This is particularly
3706 useful for specifying variables in a query where the variable
3707 name might match a column name.
3708 </para>
3709 </listitem>
3711 <listitem>
3712 <para>
3713 Make qualification of variables with block labels work properly (Tom)
3714 </para>
3716 <para>
3717 Formerly, outer-level block labels could unexpectedly interfere with
3718 recognition of inner-level record or row references.
3719 </para>
3720 </listitem>
3722 <listitem>
3723 <para>
3724 Tighten requirements for <literal>FOR</literal> loop
3725 <literal>STEP</> values (Tom)
3726 </para>
3728 <para>
3729 Prevent non-positive <literal>STEP</> values, and handle
3730 loop overflows.
3731 </para>
3732 </listitem>
3734 <listitem>
3735 <para>
3736 Improve accuracy when reporting syntax error locations (Tom)
3737 </para>
3738 </listitem>
3740 </itemizedlist>
3742 </sect3>
3744 <sect3>
3745 <title>Other Server-Side Languages</title>
3746 <itemizedlist>
3748 <listitem>
3749 <para>
3750 Allow type-name arguments to PL/Perl
3751 <function>spi_prepare()</function> to be data type aliases in
3752 addition to names found in <literal>pg_type</literal> (Andrew)
3753 </para>
3754 </listitem>
3756 <listitem>
3757 <para>
3758 Allow type-name arguments to PL/Python
3759 <function>plpy.prepare()</function> to be data type aliases in
3760 addition to names found in <literal>pg_type</literal> (Andrew)
3761 </para>
3762 </listitem>
3764 <listitem>
3765 <para>
3766 Allow type-name arguments to PL/Tcl <function>spi_prepare</> to
3767 be data type aliases in addition to names found in
3768 <literal>pg_type</literal> (Andrew)
3769 </para>
3770 </listitem>
3772 <listitem>
3773 <para>
3774 Enable PL/PythonU to compile on Python 2.5 (Marko Kreen)
3775 </para>
3776 </listitem>
3778 <listitem>
3779 <para>
3780 Support a true PL/Python boolean type in compatible Python versions
3781 (Python 2.3 and later) (Marko Kreen)
3782 </para>
3783 </listitem>
3785 <listitem>
3786 <para>
3787 Fix PL/Tcl problems with thread-enabled <filename>libtcl</> spawning
3788 multiple threads within the backend (Steve Marshall, Paul Bayer,
3789 Doug Knight)
3790 </para>
3792 <para>
3793 This caused all sorts of unpleasantness.
3794 </para>
3795 </listitem>
3797 </itemizedlist>
3799 </sect3>
3801 <sect3>
3802 <title><link linkend="APP-PSQL"><application>psql</></link></title>
3803 <itemizedlist>
3805 <listitem>
3806 <para>
3807 List disabled triggers separately in <literal>\d</literal> output
3808 (Brendan Jurd)
3809 </para>
3810 </listitem>
3812 <listitem>
3813 <para>
3814 In <literal>\d</literal> patterns, always match <literal>$</literal>
3815 literally (Tom)
3816 </para>
3817 </listitem>
3819 <listitem>
3820 <para>
3821 Show aggregate return types in <literal>\da</literal> output
3822 (Greg Sabino Mullane)
3823 </para>
3824 </listitem>
3826 <listitem>
3827 <para>
3828 Add the function's volatility status to the output of
3829 <literal>\df+</literal> (Neil)
3830 </para>
3831 </listitem>
3833 <listitem>
3834 <para>
3835 Add <literal>\prompt</literal> capability (Chad Wagner)
3836 </para>
3837 </listitem>
3839 <listitem>
3840 <para>
3841 Allow <literal>\pset</literal>, <literal>\t</literal>, and
3842 <literal>\x</literal> to specify <literal>on</> or <literal>off</>,
3843 rather than just toggling (Chad Wagner)
3844 </para>
3845 </listitem>
3847 <listitem>
3848 <para>
3849 Add <literal>\sleep</> capability (Jan)
3850 </para>
3851 </listitem>
3853 <listitem>
3854 <para>
3855 Enable <literal>\timing</> output for <literal>\copy</> (Andrew)
3856 </para>
3857 </listitem>
3859 <listitem>
3860 <para>
3861 Improve <literal>\timing</literal> resolution on Windows
3862 (Itagaki Takahiro)
3863 </para>
3864 </listitem>
3866 <listitem>
3867 <para>
3868 Flush <literal>\o</> output after each backslash command (Tom)
3869 </para>
3870 </listitem>
3872 <listitem>
3873 <para>
3874 Correctly detect and report errors while reading a <literal>-f</>
3875 input file (Peter)
3876 </para>
3877 </listitem>
3879 <listitem>
3880 <para>
3881 Remove <literal>-u</> option (this option has long been deprecated)
3882 (Tom)
3883 </para>
3884 </listitem>
3886 </itemizedlist>
3888 </sect3>
3890 <sect3>
3891 <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
3892 <itemizedlist>
3894 <listitem>
3895 <para>
3896 Add <literal>--tablespaces-only</> and <literal>--roles-only</>
3897 options to <application>pg_dumpall</application> (Dave Page)
3898 </para>
3899 </listitem>
3901 <listitem>
3902 <para>
3903 Add an output file option to
3904 <application>pg_dumpall</application> (Dave Page)
3905 </para>
3907 <para>
3908 This is primarily useful on Windows, where output redirection of
3909 child <application>pg_dump</application> processes does not work.
3910 </para>
3911 </listitem>
3913 <listitem>
3914 <para>
3915 Allow <application>pg_dumpall</> to accept an initial-connection
3916 database name rather than the default
3917 <literal>template1</literal> (Dave Page)
3918 </para>
3919 </listitem>
3921 <listitem>
3922 <para>
3923 In <literal>-n</> and <literal>-t</> switches, always match
3924 <literal>$</literal> literally (Tom)
3925 </para>
3926 </listitem>
3928 <listitem>
3929 <para>
3930 Improve performance when a database has thousands of objects (Tom)
3931 </para>
3932 </listitem>
3934 <listitem>
3935 <para>
3936 Remove <literal>-u</> option (this option has long been deprecated)
3937 (Tom)
3938 </para>
3939 </listitem>
3941 </itemizedlist>
3943 </sect3>
3945 <sect3>
3946 <title>Other Client Applications</title>
3947 <itemizedlist>
3949 <listitem>
3950 <para>
3951 In <application>initdb</>, allow the location of the
3952 <filename>pg_xlog</filename> directory to be specified
3953 (Euler Taveira de Oliveira)
3954 </para>
3955 </listitem>
3957 <listitem>
3958 <para>
3959 Enable server core dump generation in <application>pg_regress</>
3960 on supported operating systems (Andrew)
3961 </para>
3962 </listitem>
3964 <listitem>
3965 <para>
3966 Add a <literal>-t</> (timeout) parameter to <application>pg_ctl</>
3967 (Bruce)
3968 </para>
3970 <para>
3971 This controls how long <application>pg_ctl</> will wait when waiting
3972 for server startup or shutdown. Formerly the timeout was hard-wired
3973 as 60 seconds.
3974 </para>
3975 </listitem>
3977 <listitem>
3978 <para>
3979 Add a <application>pg_ctl</> option to control generation
3980 of server core dumps (Andrew)
3981 </para>
3982 </listitem>
3984 <listitem>
3985 <para>
3986 Allow Control-C to cancel <application>clusterdb</>,
3987 <application>reindexdb</>, and <application>vacuumdb</> (Itagaki
3988 Takahiro, Magnus)
3989 </para>
3990 </listitem>
3992 <listitem>
3993 <para>
3994 Suppress command tag output for <application>createdb</>,
3995 <application>createuser</>, <application>dropdb</>, and
3996 <application>dropuser</> (Peter)
3997 </para>
3999 <para>
4000 The <literal>--quiet</> option is ignored and will be removed in 8.4.
4001 Progress messages when acting on all databases now go to stdout
4002 instead of stderr because they are not actually errors.
4003 </para>
4004 </listitem>
4006 </itemizedlist>
4008 </sect3>
4010 <sect3>
4011 <title><link linkend="libpq"><application>libpq</></link></title>
4012 <itemizedlist>
4014 <listitem>
4015 <para>
4016 Interpret the <literal>dbName</> parameter of
4017 <function>PQsetdbLogin()</> as a <literal>conninfo</> string if
4018 it contains an equals sign (Andrew)
4019 </para>
4021 <para>
4022 This allows use of <literal>conninfo</> strings in client
4023 programs that still use <literal>PQsetdbLogin()</>.
4024 </para>
4025 </listitem>
4027 <listitem>
4028 <para>
4029 Support a global <acronym>SSL</> configuration file (Victor
4030 Wagner)
4031 </para>
4032 </listitem>
4034 <listitem>
4035 <para>
4036 Add environment variable <varname>PGSSLKEY</> to control
4037 <acronym>SSL</> hardware keys (Victor Wagner)
4038 </para>
4039 </listitem>
4041 <listitem>
4042 <para>
4043 Add <function>lo_truncate()</function> for large object
4044 truncation (Kris Jurka)
4045 </para>
4046 </listitem>
4048 <listitem>
4049 <para>
4050 Add <function>PQconnectionNeedsPassword()</function> that returns
4051 true if the server required a password but none was supplied
4052 (Joe Conway, Tom)
4053 </para>
4055 <para>
4056 If this returns true after a failed connection attempt, a client
4057 application should prompt the user for a password. In the past
4058 applications have had to check for a specific error message string to
4059 decide whether a password is needed; that approach is now
4060 deprecated.
4061 </para>
4062 </listitem>
4064 <listitem>
4065 <para>
4066 Add <function>PQconnectionUsedPassword()</function> that returns
4067 true if the supplied password was actually used
4068 (Joe Conway, Tom)
4069 </para>
4071 <para>
4072 This is useful in some security contexts where it is important
4073 to know whether a user-supplied password is actually valid.
4074 </para>
4075 </listitem>
4077 </itemizedlist>
4079 </sect3>
4081 <sect3>
4082 <title><link linkend="ecpg"><application>ecpg</></link></title>
4083 <itemizedlist>
4085 <listitem>
4086 <para>
4087 Use V3 frontend/backend protocol (Michael)
4088 </para>
4090 <para>
4091 This adds support for server-side prepared statements.
4092 </para>
4093 </listitem>
4095 <listitem>
4096 <para>
4097 Use native threads, instead of pthreads, on Windows (Magnus)
4098 </para>
4099 </listitem>
4101 <listitem>
4102 <para>
4103 Improve thread-safety of ecpglib (Itagaki Takahiro)
4104 </para>
4105 </listitem>
4107 <listitem>
4108 <para>
4109 Make the ecpg libraries export only necessary API symbols (Michael)
4110 </para>
4111 </listitem>
4113 </itemizedlist>
4115 </sect3>
4117 <sect3>
4118 <title><application>Windows</> Port</title>
4119 <itemizedlist>
4121 <listitem>
4122 <para>
4123 Allow the whole <productname>PostgreSQL</> distribution to be compiled
4124 with <productname>Microsoft Visual C++</> (Magnus and others)
4125 </para>
4127 <para>
4128 This allows Windows-based developers to use familiar development
4129 and debugging tools.
4130 Windows executables made with Visual C++ might also have better
4131 stability and performance than those made with other tool sets.
4132 The client-only Visual C++ build scripts have been removed.
4133 </para>
4134 </listitem>
4136 <listitem>
4137 <para>
4138 Drastically reduce postmaster's memory usage when it has many child
4139 processes (Magnus)
4140 </para>
4141 </listitem>
4143 <listitem>
4144 <para>
4145 Allow regression tests to be started by an administrative
4146 user (Magnus)
4147 </para>
4148 </listitem>
4150 <listitem>
4151 <para>
4152 Add native shared memory implementation (Magnus)
4153 </para>
4154 </listitem>
4156 </itemizedlist>
4158 </sect3>
4160 <sect3>
4161 <title>Server Programming Interface (<acronym>SPI</>)</title>
4162 <itemizedlist>
4164 <listitem>
4165 <para>
4166 Add cursor-related functionality in SPI (Pavel Stehule)
4167 </para>
4169 <para>
4170 Allow access to the cursor-related planning options, and add
4171 <command>FETCH</>/<command>MOVE</> routines.
4172 </para>
4173 </listitem>
4175 <listitem>
4176 <para>
4177 Allow execution of cursor commands through
4178 <function>SPI_execute</function> (Tom)
4179 </para>
4181 <para>
4182 The macro <literal>SPI_ERROR_CURSOR</> still exists but will
4183 never be returned.
4184 </para>
4185 </listitem>
4187 <listitem>
4188 <para>
4189 SPI plan pointers are now declared as <literal>SPIPlanPtr</> instead of
4190 <literal>void *</> (Tom)
4191 </para>
4193 <para>
4194 This does not break application code, but switching is
4195 recommended to help catch simple programming mistakes.
4196 </para>
4197 </listitem>
4199 </itemizedlist>
4201 </sect3>
4203 <sect3>
4204 <title>Build Options</title>
4205 <itemizedlist>
4207 <listitem>
4208 <para>
4209 Add <application>configure</> option <literal>--enable-profiling</>
4210 to enable code profiling (works only with <application>gcc</>)
4211 (Korry Douglas and Nikhil Sontakke)
4212 </para>
4213 </listitem>
4215 <listitem>
4216 <para>
4217 Add <application>configure</> option <literal>--with-system-tzdata</>
4218 to use the operating system's time zone database (Peter)
4219 </para>
4220 </listitem>
4222 <listitem>
4223 <para>
4224 Fix <acronym>PGXS</> so extensions can be built against PostgreSQL
4225 installations whose <application>pg_config</> program does not
4226 appear first in the <varname>PATH</> (Tom)
4227 </para>
4228 </listitem>
4230 <listitem>
4231 <para>
4232 Support <command>gmake draft</command> when building the
4233 <acronym>SGML</> documentation (Bruce)
4234 </para>
4236 <para>
4237 Unless <literal>draft</> is used, the documentation build will
4238 now be repeated if necessary to ensure the index is up-to-date.
4239 </para>
4240 </listitem>
4242 </itemizedlist>
4244 </sect3>
4246 <sect3>
4247 <title>Source Code</title>
4248 <itemizedlist>
4250 <listitem>
4251 <para>
4252 Rename macro <literal>DLLIMPORT</> to <literal>PGDLLIMPORT</> to
4253 avoid conflicting with third party includes (like Tcl) that
4254 define <literal>DLLIMPORT</> (Magnus)
4255 </para>
4256 </listitem>
4258 <listitem>
4259 <para>
4260 Create <quote>operator families</quote> to improve planning of
4261 queries involving cross-data-type comparisons (Tom)
4262 </para>
4263 </listitem>
4265 <listitem>
4266 <para>
4267 Update GIN <function>extractQuery()</> API to allow signalling
4268 that nothing can satisfy the query (Teodor)
4269 </para>
4270 </listitem>
4272 <listitem>
4273 <para>
4274 Move <literal>NAMEDATALEN</> definition from
4275 <filename>postgres_ext.h</> to <filename>pg_config_manual.h</>
4276 (Peter)
4277 </para>
4278 </listitem>
4280 <listitem>
4281 <para>
4282 Provide <function>strlcpy()</function> and
4283 <function>strlcat()</function> on all platforms, and replace
4284 error-prone uses of <function>strncpy()</function>,
4285 <function>strncat()</function>, etc (Peter)
4286 </para>
4287 </listitem>
4289 <listitem>
4290 <para>
4291 Create hooks to let an external plugin monitor (or even replace) the
4292 planner and create plans for hypothetical situations (Gurjeet
4293 Singh, Tom)
4294 </para>
4295 </listitem>
4297 <listitem>
4298 <para>
4299 Create a function variable <literal>join_search_hook</> to let plugins
4300 override the join search order portion of the planner (Julius
4301 Stroffek)
4302 </para>
4303 </listitem>
4305 <listitem>
4306 <para>
4307 Add <function>tas()</> support for Renesas' M32R processor
4308 (Kazuhiro Inaoka)
4309 </para>
4310 </listitem>
4312 <listitem>
4313 <para>
4314 <function>quote_identifier()</function> and
4315 <application>pg_dump</application> no longer quote keywords that are
4316 unreserved according to the grammar (Tom)
4317 </para>
4318 </listitem>
4320 <listitem>
4321 <para>
4322 Change the on-disk representation of the <type>NUMERIC</type>
4323 data type so that the <structfield>sign_dscale</> word comes
4324 before the weight (Tom)
4325 </para>
4326 </listitem>
4328 <listitem>
4329 <para>
4330 Use <acronym>SYSV</> semaphores rather than POSIX on Darwin
4331 &gt;= 6.0, i.e., OS X 10.2 and up (Chris Marcellino)
4332 </para>
4333 </listitem>
4335 <listitem>
4336 <para>
4337 Add <link linkend="acronyms">acronym</link> and <link
4338 linkend="creating-cluster-nfs">NFS</link> documentation
4339 sections (Bruce)
4340 </para>
4341 </listitem>
4343 <listitem>
4344 <para>
4345 "Postgres" is now documented as an accepted alias for
4346 "PostgreSQL" (Peter)
4347 </para>
4348 </listitem>
4350 <listitem>
4351 <para>
4352 Add documentation about preventing database server spoofing when
4353 the server is down (Bruce)
4354 </para>
4355 </listitem>
4357 </itemizedlist>
4359 </sect3>
4361 <sect3>
4362 <title>Contrib</title>
4363 <itemizedlist>
4365 <listitem>
4366 <para>
4367 Move <filename>contrib</> <filename>README</> content into the
4368 main <productname>PostgreSQL</> documentation (Albert Cervera i
4369 Areny)
4370 </para>
4371 </listitem>
4373 <listitem>
4374 <para>
4375 Add <filename>contrib/pageinspect</filename> module for low-level
4376 page inspection (Simon, Heikki)
4377 </para>
4378 </listitem>
4380 <listitem>
4381 <para>
4382 Add <filename>contrib/pg_standby</filename> module for controlling
4383 warm standby operation (Simon)
4384 </para>
4385 </listitem>
4387 <listitem>
4388 <para>
4389 Add <filename>contrib/uuid-ossp</filename> module for generating
4390 <type>UUID</> values using the OSSP UUID library (Peter)
4391 </para>
4393 <para>
4394 Use <application>configure</>
4395 <literal>--with-ossp-uuid</literal> to activate. This takes
4396 advantage of the new <type>UUID</type> builtin type.
4397 </para>
4398 </listitem>
4400 <listitem>
4401 <para>
4402 Add <filename>contrib/dict_int</filename>,
4403 <filename>contrib/dict_xsyn</filename>, and
4404 <filename>contrib/test_parser</filename> modules to provide
4405 sample add-on text search dictionary templates and parsers
4406 (Sergey Karpov)
4407 </para>
4408 </listitem>
4410 <listitem>
4411 <para>
4412 Allow <application>contrib/pgbench</> to set the fillfactor (Pavan
4413 Deolasee)
4414 </para>
4415 </listitem>
4417 <listitem>
4418 <para>
4419 Add timestamps to <application>contrib/pgbench</> <literal>-l</>
4420 (Greg Smith)
4421 </para>
4422 </listitem>
4424 <listitem>
4425 <para>
4426 Add usage count statistics to
4427 <filename>contrib/pgbuffercache</filename> (Greg Smith)
4428 </para>
4429 </listitem>
4431 <listitem>
4432 <para>
4433 Add GIN support for <filename>contrib/hstore</> (Teodor)
4434 </para>
4435 </listitem>
4437 <listitem>
4438 <para>
4439 Add GIN support for <filename>contrib/pg_trgm</> (Guillaume Smet, Teodor)
4440 </para>
4441 </listitem>
4443 <listitem>
4444 <para>
4445 Update OS/X startup scripts in
4446 <filename>contrib/start-scripts</filename> (Mark Cotner, David
4447 Fetter)
4448 </para>
4449 </listitem>
4451 <listitem>
4452 <para>
4453 Restrict <function>pgrowlocks()</function> and
4454 <function>dblink_get_pkey()</function> to users who have
4455 <literal>SELECT</literal> privilege on the target table (Tom)
4456 </para>
4457 </listitem>
4459 <listitem>
4460 <para>
4461 Restrict <filename>contrib/pgstattuple</filename> functions to
4462 superusers (Tom)
4463 </para>
4464 </listitem>
4466 <listitem>
4467 <para>
4468 <filename>contrib/xml2</filename> is deprecated and planned for
4469 removal in 8.4 (Peter)
4470 </para>
4472 <para>
4473 The new XML support in core PostgreSQL supersedes this module.
4474 </para>
4475 </listitem>
4477 </itemizedlist>
4479 </sect3>
4480 </sect2>
4481 </sect1>