OSDN Git Service

Update release notes in final preparation for 8.4.0.
[pg-rex/syncrep.git] / doc / src / sgml / release-8.4.sgml
1 <!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.4.sgml,v 1.12 2009/06/26 22:23:17 tgl Exp $ -->
2 <!-- See header comment in release.sgml about typical markup -->
3
4  <sect1 id="release-8-4">
5   <title>Release 8.4</title>
6
7   <note>
8    <title>Release date</title>
9    <simpara>2009-07-01</simpara>
10   </note>
11
12   <sect2>
13    <title>Overview</title>
14
15    <para>
16     After many years of development, <productname>PostgreSQL</> has
17     become feature-complete in many areas.   This release shows a
18     targeted approach to adding features (e.g., authentication,
19     monitoring, space reuse), and adds capabilities defined in the
20     later SQL standards.  The major areas of enhancement are:
21    </para>
22
23    <itemizedlist>
24
25     <!-- This list duplicates items below, but without authors or details-->
26
27     <listitem>
28      <para>
29       Windowing Functions
30      </para>
31     </listitem>
32
33     <listitem>
34      <para>
35       Common Table Expressions and Recursive Queries
36      </para>
37     </listitem>
38
39     <listitem>
40      <para>
41       Default and variadic parameters for functions
42      </para>
43     </listitem>
44
45     <listitem>
46      <para>
47       Parallel Restore
48      </para>
49     </listitem>
50
51     <listitem>
52      <para>
53       Column Permissions
54      </para>
55     </listitem>
56
57     <listitem>
58      <para>
59       Per-database locale settings
60      </para>
61     </listitem>
62
63     <listitem>
64      <para>
65       Improved hash indexes
66      </para>
67     </listitem>
68
69     <listitem>
70      <para>
71       Improved join performance for <literal>EXISTS</> and <literal>NOT EXISTS</> queries
72      </para>
73     </listitem>
74
75     <listitem>
76      <para>
77       Easier-to-use Warm Standby
78      </para>
79     </listitem>
80
81     <listitem>
82      <para>
83       Automatic sizing of the Free Space Map
84      </para>
85     </listitem>
86
87     <listitem>
88      <para>
89       Visibility Map (greatly reduces vacuum overhead for slowly-changing tables)
90      </para>
91     </listitem>
92
93     <listitem>
94      <para>
95       Version-aware psql (backslash commands work against older servers)
96      </para>
97     </listitem>
98
99     <listitem>
100      <para>
101       Support SSL certificates for user authentication
102      </para>
103     </listitem>
104
105     <listitem>
106      <para>
107       Per-function runtime statistics
108      </para>
109     </listitem>
110
111     <listitem>
112      <para>
113       Easy editing of functions in psql
114      </para>
115     </listitem>
116
117     <listitem>
118      <para>
119       New contrib modules: pg_stat_statements, auto_explain, citext, btree_gin
120      </para>
121     </listitem>
122
123    </itemizedlist>
124
125    <para>
126     The above items are explained in more detail in the sections below.
127    </para>
128
129   </sect2>
130
131   <sect2>
132    <title>Migration to Version 8.4</title>
133
134    <para>
135     A dump/restore using <application>pg_dump</application> is
136     required for those wishing to migrate data from any previous
137     release.
138    </para>
139
140    <para>
141     Observe the following incompatibilities:
142    </para>
143
144    <sect3>
145     <title>General</title>
146     <itemizedlist>
147
148      <listitem>
149       <para>
150        Use 64-bit integer datetimes by default (Neil Conway)
151       </para>
152
153       <para>
154        Previously this was selected by <application>configure</>'s
155        <option>--enable-integer-datetimes</> option.  To retain
156        the old behavior, build with <option>--disable-integer-datetimes</>.
157       </para>
158      </listitem>
159
160      <listitem>
161       <para>
162        Remove <application>ipcclean</> utility command (Bruce)
163       </para>
164
165       <para>
166        The utility only worked on a few platforms.  Users should use
167        their operating system tools instead.
168       </para>
169      </listitem>
170
171     </itemizedlist>
172
173    </sect3>
174
175    <sect3>
176     <title>Server Settings</title>
177     <itemizedlist>
178
179      <listitem>
180       <para>
181        Change default setting for
182        <literal>log_min_messages</> to <literal>warning</> (previously
183        it was <literal>notice</>) to reduce log file volume (Tom)
184       </para>
185      </listitem>
186
187      <listitem>
188       <para>
189        Change default setting for <literal>max_prepared_transactions</> to
190        zero (previously it was 5) (Tom)
191       </para>
192      </listitem>
193
194      <listitem>
195       <para>
196        Make <literal>debug_print_parse</>, <literal>debug_print_rewritten</>,
197        and <literal>debug_print_plan</>
198        output appear at <literal>LOG</> message level, not
199        <literal>DEBUG1</> as formerly (Tom)
200       </para>
201      </listitem>
202
203      <listitem>
204       <para>
205        Make <literal>debug_pretty_print</> default to <literal>on</> (Tom)
206       </para>
207      </listitem>
208
209      <listitem>
210       <para>
211        Remove <varname>explain_pretty_print</> parameter (no longer needed) (Tom)
212       </para>
213      </listitem>
214
215      <listitem>
216       <para>
217        Make <varname>log_temp_files</> settable by superusers only, like other
218        logging options (Simon Riggs)
219       </para>
220      </listitem>
221
222      <listitem>
223       <para>
224        Remove automatic appending of the epoch timestamp when no <literal>%</>
225        escapes are present in <literal>log_filename</> (Robert Haas)
226       </para>
227
228       <para>
229        This change was made because some users wanted a fixed log filename,
230        for use with an external log rotation tool.
231       </para>
232      </listitem>
233
234      <listitem>
235       <para>
236        Remove <varname>log_restartpoints</> from <filename>recovery.conf</>;
237        instead use <varname>log_checkpoints</> (Simon)
238       </para>
239      </listitem>
240
241      <listitem>
242       <para>
243        Remove <varname>krb_realm</> and <varname>krb_server_hostname</>;
244        these are now set in <filename>pg_hba.conf</> instead (Magnus)
245       </para>
246      </listitem>
247
248      <listitem>
249       <para>
250        There are also significant changes in <link
251        linkend="release-8-4-pg-hba-conf"><filename>pg_hba.conf</></link>,
252        as described below.
253       </para>
254      </listitem>
255
256     </itemizedlist>
257
258    </sect3>
259
260    <sect3>
261     <title>Queries</title>
262
263     <itemizedlist>
264
265      <listitem>
266       <para>
267        Change <command>TRUNCATE</> and <command>LOCK</> to
268        apply to child tables of the specified table(s) (Peter)
269       </para>
270
271       <para>
272        These commands now accept an <literal>ONLY</> option that prevents
273        processing child tables; this option must be used if the old
274        behavior is needed.
275       </para>
276      </listitem>
277
278      <listitem>
279       <para>
280        <command>SELECT DISTINCT</> and
281        <literal>UNION</>/<literal>INTERSECT</>/<literal>EXCEPT</>
282        no longer always produce sorted output (Tom)
283       </para>
284
285       <para>
286        Previously, these types of queries always removed duplicate rows
287        by means of Sort/Unique processing (i.e., sort then remove adjacent
288        duplicates).  Now they can be implemented by hashing, which will not
289        produce sorted output.  If an application relied on the output being
290        in sorted order, the recommended fix is to add an <literal>ORDER BY</>
291        clause.  As a short-term workaround, the previous behavior can be
292        restored by disabling <literal>enable_hashagg</>, but that is a very
293        performance-expensive fix.  <literal>SELECT DISTINCT ON</> never uses
294        hashing, however, so its behavior is unchanged.
295       </para>
296      </listitem>
297
298      <listitem>
299       <para>
300        Force child tables to inherit <literal>CHECK</> constraints from parents
301        (Alex Hunsaker, Nikhil Sontakke, Tom)
302       </para>
303
304       <para>
305        Formerly it was possible to drop such a constraint from a child
306        table, allowing rows that violate the constraint to be visible
307        when scanning the parent table.  This was deemed inconsistent,
308        as well as contrary to SQL standard.
309       </para>
310      </listitem>
311
312      <listitem>
313       <para>
314        Disallow negative <literal>LIMIT</> or <literal>OFFSET</>
315        values, rather than treating them as zero (Simon)
316       </para>
317      </listitem>
318
319      <listitem>
320       <para>
321        Disallow <command>LOCK TABLE</> outside a transaction block
322        (Tom)
323       </para>
324
325       <para>
326        Such an operation is useless because the lock would be released
327        immediately.
328       </para>
329      </listitem>
330
331      <listitem>
332       <para>
333        Sequences now contain an additional <structfield>start_value</> column
334        (Zoltan Boszormenyi)
335       </para>
336
337       <para>
338        This supports <command>ALTER SEQUENCE ... RESTART</>.
339       </para>
340      </listitem>
341
342     </itemizedlist>
343
344    </sect3>
345
346
347    <sect3>
348     <title>Functions and Operators</title>
349
350     <itemizedlist>
351
352      <listitem>
353       <para>
354        Make <type>numeric</> zero raised to a fractional power return
355        <literal>0</>, rather than throwing an error, and make
356        <type>numeric</> zero raised to the zero power return <literal>1</>,
357        rather than error (Bruce)
358       </para>
359
360       <para>
361        This matches the longstanding <type>float8</> behavior.
362       </para>
363      </listitem>
364
365      <listitem>
366       <para>
367        Allow unary minus of floating-point values to produce minus zero (Tom)
368       </para>
369
370       <para>
371        The changed behavior is more <acronym>IEEE</>-standard
372        compliant.
373       </para>
374      </listitem>
375
376      <listitem>
377       <para>
378        Throw an error if an escape character is the last character in
379        a <literal>LIKE</> pattern (i.e., it has nothing to escape) (Tom)
380       </para>
381
382       <para>
383        Previously, such an escape character was silently ignored,
384        thus possibly masking application logic errors.
385       </para>
386      </listitem>
387
388      <listitem>
389       <para>
390        Remove <literal>~=~</> and <literal>~&lt;&gt;~</> operators
391        formerly used for <literal>LIKE</> index comparisons (Tom)
392       </para>
393
394       <para>
395        Pattern indexes now use the regular equality operator.
396       </para>
397      </listitem>
398
399      <listitem>
400       <para>
401        <function>xpath()</> now passes its arguments to <application>libxml</>
402        without any changes (Andrew)
403       </para>
404
405       <para>
406        This means that the XML argument must be a well-formed XML document.
407        The previous coding attempted to allow XML fragments, but it did not
408        work well.
409       </para>
410      </listitem>
411
412      <listitem>
413       <para>
414        Make <function>xmlelement()</> format attribute values just like
415        content values (Peter)
416       </para>
417
418       <para>
419        Previously, attribute values were formatted according to the
420        normal SQL output behavior, which is sometimes at odds with
421        XML rules.
422       </para>
423      </listitem>
424
425      <listitem>
426       <para>
427        Rewrite memory management for <application>libxml</>-using functions
428        (Tom)
429       </para>
430
431       <para>
432        This change should avoid some compatibility problems with use of
433        <application>libxml</> in PL/Perl and other add-on code.
434       </para>
435      </listitem>
436
437      <listitem>
438       <para>
439        Adopt a faster algorithm for hash functions (Kenneth Marshall,
440        based on work of Bob Jenkins)
441       </para>
442
443       <para>
444        Many of the built-in hash functions now deliver different results on
445        little-endian and big-endian platforms.
446       </para>
447      </listitem>
448
449     </itemizedlist>
450
451     <sect4>
452      <title>Temporal Functions and Operators</title>
453
454      <itemizedlist>
455
456       <listitem>
457        <para>
458         <varname>DateStyle</> no longer controls <type>interval</> output
459         formatting; instead there is a new variable <varname>IntervalStyle</>
460         (Ron Mayer)
461        </para>
462       </listitem>
463
464       <listitem>
465        <para>
466         Improve consistency of handling of fractional seconds in
467         <type>timestamp</> and <type>interval</> output (Ron Mayer)
468        </para>
469
470        <para>
471         This may result in displaying a different number of fractional
472         digits than before, or rounding instead of truncating.
473        </para>
474       </listitem>
475
476       <listitem>
477        <para>
478         Make <function>to_char()</>'s localized month/day names depend
479         on <varname>LC_TIME</>, not <varname>LC_MESSAGES</> (Euler
480         Taveira de Oliveira)
481        </para>
482       </listitem>
483
484       <listitem>
485        <para>
486         Cause <function>to_date()</> and <function>to_timestamp()</>
487         to more consistently report errors for invalid input (Brendan
488         Jurd)
489        </para>
490
491        <para>
492         Previous versions would often ignore or silently misread input
493         that did not match the format string.  Such cases will now
494         result in an error.
495        </para>
496       </listitem>
497
498       <listitem>
499        <para>
500         Fix <function>to_timestamp()</> to not require upper/lower case
501         matching for meridian (<literal>AM</>/<literal>PM</>) and era
502         (<literal>BC</>/<literal>AD</>) format designations  (Brendan
503         Jurd)
504        </para>
505
506        <para>
507         For example, input value <literal>ad</> now matches the format
508         string <literal>AD</>.
509        </para>
510       </listitem>
511
512      </itemizedlist>
513
514     </sect4>
515
516    </sect3>
517
518   </sect2>
519
520   <sect2>
521    <title>Changes</title>
522
523    <para>
524     Below you will find a detailed account of the changes between
525     <productname>PostgreSQL</productname> 8.4 and the previous major
526     release.
527    </para>
528
529    <sect3>
530     <title>Performance</title>
531     <itemizedlist>
532
533      <listitem>
534       <para>
535        Improve optimizer statistics calculations (Jan Urbanski, Tom)
536       </para>
537
538       <para>
539        In particular, estimates for full-text-search operators are
540        greatly improved.
541       </para>
542      </listitem>
543
544      <listitem>
545       <para>
546        Allow <command>SELECT DISTINCT</> and
547        <literal>UNION</>/<literal>INTERSECT</>/<literal>EXCEPT</> to
548        use hashing (Tom)
549       </para>
550
551       <para>
552        This means that these types of queries no longer automatically
553        produce sorted output.
554       </para>
555      </listitem>
556
557      <listitem>
558       <para>
559        Create explicit concepts of semi-joins and anti-joins (Tom)
560       </para>
561
562       <para>
563        This work formalizes our previous ad-hoc treatment of <literal>IN
564        (SELECT ...)</> clauses, and extends it to <literal>EXISTS</> and
565        <literal>NOT EXISTS</> clauses.  It should result in significantly
566        better planning of <literal>EXISTS</> and <literal>NOT EXISTS</>
567        queries.  In general, logically equivalent <literal>IN</> and
568        <literal>EXISTS</> clauses should now have similar performance,
569        whereas previously <literal>IN</> often won.
570       </para>
571      </listitem>
572
573      <listitem>
574       <para>
575        Improve optimization of sub-selects beneath outer joins (Tom)
576       </para>
577
578       <para>
579        Formerly, a sub-select or view could not be optimized very well if it
580        appeared within the nullable side of an outer join and contained
581        non-strict expressions (for instance, constants) in its result list.
582       </para>
583      </listitem>
584
585      <listitem>
586       <para>
587        Improve the performance of <function>text_position()</> and
588        related functions by using Boyer-Moore-Horspool searching (David
589        Rowley)
590       </para>
591
592       <para>
593        This is particularly helpful for long search patterns.
594       </para>
595      </listitem>
596
597      <listitem>
598       <para>
599        Reduce I/O load of writing the statistics collection file
600        by writing the file only when requested (Martin Pihlak)
601       </para>
602      </listitem>
603
604      <listitem>
605       <para>
606        Improve performance for bulk inserts (Robert Haas, Simon)
607       </para>
608      </listitem>
609
610      <listitem>
611       <para>
612        Increase the default value of <varname>default_statistics_target</>
613        from <literal>10</> to <literal>100</> (Greg Sabino Mullane,
614        Tom)
615       </para>
616
617       <para>
618        The maximum value was also increased from <literal>1000</> to
619        <literal>10000</>.
620       </para>
621      </listitem>
622
623      <listitem>
624       <para>
625        Perform <varname>constraint_exclusion</> checking by default
626        in queries involving inheritance or <literal>UNION ALL</> (Tom)
627       </para>
628
629       <para>
630        A new <varname>constraint_exclusion</> setting,
631        <literal>partition</>, was added to specify this behavior.
632       </para>
633      </listitem>
634
635      <listitem>
636       <para>
637        Allow I/O read-ahead for bitmap index scans (Greg Stark)
638       </para>
639
640       <para>
641        The amount of read-ahead is controlled by
642        <varname>effective_io_concurrency</>.  This feature is available only
643        if the kernel has <function>posix_fadvise()</> support.
644       </para>
645      </listitem>
646
647      <listitem>
648       <para>
649        Inline simple set-returning <acronym>SQL</> functions in
650        <literal>FROM</> clauses (Richard Rowell)
651       </para>
652      </listitem>
653
654      <listitem>
655       <para>
656        Improve performance of multi-batch hash joins by providing a special
657        case for join key values that are especially common in the outer
658        relation (Bryce Cutt, Ramon Lawrence)
659       </para>
660      </listitem>
661
662      <listitem>
663       <para>
664        Reduce volume of temporary data in multi-batch hash joins
665        by suppressing <quote>physical tlist</> optimization (Michael
666        Henderson, Ramon Lawrence)
667       </para>
668      </listitem>
669
670      <listitem>
671       <para>
672        Avoid waiting for idle-in-transaction sessions during
673        <command>CREATE INDEX CONCURRENTLY</> (Simon)
674       </para>
675      </listitem>
676
677      <listitem>
678       <para>
679        Improve performance of shared cache invalidation (Tom)
680       </para>
681      </listitem>
682
683     </itemizedlist>
684
685    </sect3>
686
687    <sect3>
688     <title>Server</title>
689
690     <sect4>
691      <title>Settings</title>
692
693      <itemizedlist>
694
695       <listitem>
696        <para>
697         Convert many <filename>postgresql.conf</> settings to enumerated
698         values so that <literal>pg_settings</> can display the valid
699         values (Magnus)
700        </para>
701       </listitem>
702
703       <listitem>
704        <para>
705         Add <varname>cursor_tuple_fraction</> parameter to control the
706         fraction of a cursor's rows that the planner assumes will be
707         fetched (Robert Hell)
708        </para>
709       </listitem>
710
711       <listitem>
712        <para>
713         Allow underscores in the names of custom variable
714         classes in <filename>postgresql.conf</> (Tom)
715        </para>
716       </listitem>
717
718      </itemizedlist>
719
720     </sect4>
721
722     <sect4>
723      <title>Authentication and security</title>
724      <itemizedlist>
725
726       <listitem>
727        <para>
728         Remove support for the (insecure) <literal>crypt</> authentication method
729         (Magnus)
730        </para>
731
732        <para>
733         This effectively obsoletes pre-<productname>PostgreSQL</> 7.2 client
734         libraries, as there is no longer any non-plaintext password method that
735         they can use.
736        </para>
737       </listitem>
738
739       <listitem>
740        <para>
741         Support regular expressions in <filename>pg_ident.conf</>
742         (Magnus)
743        </para>
744       </listitem>
745
746       <listitem>
747        <para>
748         Allow <productname>Kerberos</>/<acronym>GSSAPI</> parameters
749         to be changed without restarting the postmaster (Magnus)
750        </para>
751       </listitem>
752
753       <listitem>
754        <para>
755         Support <acronym>SSL</> certificate chains in server certificate
756         file (Andrew Gierth)
757        </para>
758
759        <para>
760         Including the full certificate chain makes the client able
761         to verify the certificate without having all intermediate CA
762         certificates present in the local store, which is often the case for
763         commercial CAs.
764        </para>
765       </listitem>
766
767       <listitem>
768        <para>
769         Report appropriate error message for combination of <literal>MD5</>
770         authentication and <varname>db_user_namespace</> enabled (Bruce)
771        </para>
772       </listitem>
773      </itemizedlist>
774
775     </sect4>
776
777     <sect4 id="release-8-4-pg-hba-conf">
778      <title><filename>pg_hba.conf</></title>
779      <itemizedlist>
780
781       <listitem>
782        <para>
783         Change all authentication options to use <literal>name=value</>
784         syntax (Magnus)
785        </para>
786
787        <para>
788         This makes incompatible changes to the <literal>ldap</>,
789         <literal>pam</> and <literal>ident</> authentication methods. All
790         <filename>pg_hba.conf</> entries with these methods need to be
791         rewritten using the new format.
792        </para>
793       </listitem>
794
795       <listitem>
796        <para>
797         Remove the <literal>ident sameuser</> option, instead making that
798         behavior the default if no usermap is specified (Magnus)
799        </para>
800       </listitem>
801
802       <listitem>
803        <para>
804         Allow a usermap parameter for all external authentication methods
805         (Magnus)
806        </para>
807
808        <para>
809         Previously a usermap was only supported for <literal>ident</>
810         authentication.
811        </para>
812       </listitem>
813
814       <listitem>
815        <para>
816         Add <literal>clientcert</> option to control requesting of a
817         client certificate (Magnus)
818        </para>
819
820        <para>
821         Previously this was controlled by the presence of a root
822         certificate file in the server's data directory.
823        </para>
824       </listitem>
825
826       <listitem>
827        <para>
828         Add <literal>cert</> authentication method to allow
829         <emphasis>user</> authentication via <acronym>SSL</> certificates
830         (Magnus)
831        </para>
832
833        <para>
834         Previously <acronym>SSL</> certificates could only verify that
835         the client had access to a certificate, not authenticate a
836         user.
837        </para>
838       </listitem>
839
840       <listitem>
841        <para>
842         Allow <literal>krb5</>, <literal>gssapi</> and <literal>sspi</>
843         realm and <literal>krb5</> host settings to be specified in
844         <filename>pg_hba.conf</> (Magnus)
845        </para>
846
847        <para>
848         These override the settings in <filename>postgresql.conf</>.
849        </para>
850       </listitem>
851
852       <listitem>
853        <para>
854         Add <varname>include_realm</> parameter for <literal>krb5</>,
855         <literal>gssapi</>, and <literal>sspi</> methods (Magnus)
856        </para>
857
858        <para>
859         This allows identical usernames from different realms to be
860         authenticated as different database users using usermaps.
861        </para>
862       </listitem>
863
864       <listitem>
865        <para>
866         Parse <filename>pg_hba.conf</> fully when it is loaded,
867         so that errors are reported immediately (Magnus)
868        </para>
869
870        <para>
871         Previously, most errors in the file wouldn't be detected until clients
872         tried to connect, so an erroneous file could render the system
873         unusable.  With the new behavior, if an error is detected during
874         reload then the bad file is rejected and the postmaster continues
875         to use its old copy.
876        </para>
877       </listitem>
878
879       <listitem>
880        <para>
881         Show all parsing errors in <filename>pg_hba.conf</> instead of
882         aborting after the first one (Selena Deckelmann)
883        </para>
884       </listitem>
885
886       <listitem>
887        <para>
888         Support <literal>ident</> authentication over Unix-domain sockets
889         on <productname>Solaris</> (Garick Hamlin)
890        </para>
891       </listitem>
892
893      </itemizedlist>
894
895     </sect4>
896
897     <sect4>
898      <title>Continuous Archiving</title>
899      <itemizedlist>
900
901       <listitem>
902        <para>
903         Provide an option to <function>pg_start_backup()</> to force its
904         implied checkpoint to finish as quickly as possible (Tom)
905        </para>
906
907        <para>
908         The default behavior avoids excess I/O consumption, but that is
909         pointless if no concurrent query activity is going on.
910        </para>
911       </listitem>
912
913       <listitem>
914        <para>
915         Make <function>pg_stop_backup()</> wait for modified <acronym>WAL</>
916         files to be archived (Simon)
917        </para>
918
919        <para>
920         This guarantees that the backup is valid at the time
921         <function>pg_stop_backup()</> completes.
922        </para>
923       </listitem>
924
925       <listitem>
926        <para>
927         When archiving is enabled, rotate the last WAL segment at shutdown
928         so that all transactions can be archived immediately
929         (Guillaume Smet, Heikki)
930        </para>
931       </listitem>
932
933       <listitem>
934        <para>
935         Delay <quote>smart</> shutdown while a continuous archiving base backup
936         is in progress (Laurenz Albe)
937        </para>
938       </listitem>
939
940       <listitem>
941        <para>
942         Cancel a continuous archiving base backup if <quote>fast</> shutdown
943         is requested (Laurenz Albe)
944        </para>
945       </listitem>
946
947       <listitem>
948        <para>
949         Allow <filename>recovery.conf</> boolean variables to take the
950         same range of string values as <filename>postgresql.conf</>
951         boolean variables
952         (Bruce)
953        </para>
954       </listitem>
955
956      </itemizedlist>
957
958     </sect4>
959
960     <sect4>
961      <title>Monitoring</title>
962      <itemizedlist>
963
964       <listitem>
965        <para>
966         Add <function>pg_conf_load_time()</> to report when
967         the <productname>PostgreSQL</> configuration files were last loaded
968         (George Gensure)
969        </para>
970       </listitem>
971
972       <listitem>
973        <para>
974         Add <function>pg_terminate_backend()</> to safely terminate a
975         backend (the <literal>SIGTERM</> signal works also) (Tom, Bruce)
976        </para>
977
978        <para>
979         While it's always been possible to <literal>SIGTERM</> a single
980         backend, this was previously considered unsupported; and testing
981         of the case found some bugs that are now fixed.
982        </para>
983       </listitem>
984
985       <listitem>
986        <para>
987         Add ability to track user-defined functions' call counts and
988         runtimes (Martin Pihlak)
989        </para>
990
991        <para>
992         Function statistics appear in a new system view,
993         <literal>pg_stat_user_functions</>.  Tracking is controlled
994         by the new parameter <varname>track_functions</>.
995        </para>
996       </listitem>
997
998       <listitem>
999        <para>
1000         Allow specification of the maximum query string size in
1001         <literal>pg_stat_activity</> via new
1002         <varname>track_activity_query_size</> parameter (Thomas Lee)
1003        </para>
1004       </listitem>
1005
1006       <listitem>
1007        <para>
1008         Increase the maximum line length sent to <application>syslog</>, in
1009         hopes of improving performance (Tom)
1010        </para>
1011       </listitem>
1012
1013       <listitem>
1014        <para>
1015         Add read-only configuration variables <varname>segment_size</>,
1016         <varname>wal_block_size</>, and <varname>wal_segment_size</>
1017         (Bernd Helmle)
1018        </para>
1019       </listitem>
1020
1021       <listitem>
1022        <para>
1023         When reporting a deadlock, report the text of all queries involved
1024         in the deadlock to the server log  (Itagaki Takahiro)
1025        </para>
1026       </listitem>
1027
1028       <listitem>
1029        <para>
1030         Add <function>pg_stat_get_activity(pid)</> function to return
1031         information about a specific process id (Magnus)
1032        </para>
1033       </listitem>
1034
1035       <listitem>
1036        <para>
1037         Allow the location of the server's statistics file to be specified
1038         via <varname>stats_temp_directory</> (Magnus)
1039        </para>
1040
1041        <para>
1042         This allows the statistics file to be placed in a
1043         <acronym>RAM</>-resident directory to reduce I/O requirements.
1044         On startup/shutdown, the file is copied to its traditional location
1045         (<literal>$PGDATA/global/</>) so it is preserved across restarts.
1046        </para>
1047       </listitem>
1048
1049      </itemizedlist>
1050
1051     </sect4>
1052
1053    </sect3>
1054
1055    <sect3>
1056     <title>Queries</title>
1057     <itemizedlist>
1058
1059      <listitem>
1060       <para>
1061        Add support for <literal>WINDOW</> functions (Hitoshi Harada)
1062       </para>
1063      </listitem>
1064
1065      <listitem>
1066       <para>
1067        Add support for <literal>WITH</> clauses (CTEs), including <literal>WITH
1068        RECURSIVE</> (Yoshiyuki Asaba, Tatsuo Ishii, Tom)
1069       </para>
1070      </listitem>
1071
1072      <listitem>
1073       <para>
1074        Add <command>TABLE</> command (Peter)
1075       </para>
1076
1077       <para>
1078        <literal>TABLE tablename</> is a SQL standard short-hand for
1079        <literal>SELECT * FROM tablename</>.
1080       </para>
1081      </listitem>
1082
1083      <listitem>
1084       <para>
1085        Allow <literal>AS</> to be optional when specifying a
1086        <command>SELECT</> (or <literal>RETURNING</>) column output
1087        label (Hiroshi Saito)
1088       </para>
1089
1090       <para>
1091        This works so long as the column label is not any
1092        <productname>PostgreSQL</> keyword; otherwise <literal>AS</> is still
1093        needed.
1094       </para>
1095      </listitem>
1096
1097      <listitem>
1098       <para>
1099        Support set-returning functions in <command>SELECT</> result lists
1100        even for functions that return their result via a tuplestore (Tom)
1101       </para>
1102
1103       <para>
1104        In particular, this means that functions written in PL/PgSQL
1105        and other PL languages can now be called this way.
1106       </para>
1107      </listitem>
1108
1109      <listitem>
1110       <para>
1111        Support set-returning functions in the output of aggregation
1112        and grouping queries (Tom)
1113       </para>
1114      </listitem>
1115
1116      <listitem>
1117       <para>
1118        Allow <command>SELECT FOR UPDATE</>/<literal>SHARE</> to work
1119        on inheritance trees (Tom)
1120       </para>
1121      </listitem>
1122
1123      <listitem>
1124       <para>
1125        Add infrastructure for <acronym>SQL/MED</> (Martin Pihlak,
1126        Peter)
1127       </para>
1128
1129       <para>
1130        There are no remote or external <acronym>SQL/MED</> capabilities
1131        yet, but this change provides a standardized and future-proof
1132        system for managing connection information for modules like
1133        <filename>dblink</> and <filename>plproxy</>.
1134       </para>
1135      </listitem>
1136
1137      <listitem>
1138       <para>
1139        Invalidate cached plans when referenced schemas, functions, operators,
1140        or operator classes are modified (Martin Pihlak, Tom)
1141       </para>
1142
1143       <para>
1144        This improves the system's ability to respond to on-the-fly
1145        DDL changes.
1146       </para>
1147      </listitem>
1148      <listitem>
1149       <para>
1150        Allow comparison of composite types and allow arrays of
1151        anonymous composite types (Tom)
1152       </para>
1153
1154       <para>
1155        This allows constructs such as
1156        <literal>row(1, 1.1) = any (array[row(7, 7.7), row(1, 1.0)])</>.
1157        This is particularly useful in recursive queries.
1158       </para>
1159      </listitem>
1160
1161      <listitem>
1162       <para>
1163        Add support for Unicode string literal and identifier specifications
1164        using code points, e.g. <literal>U&amp;'d\0061t\+000061'</>
1165        (Peter)
1166       </para>
1167      </listitem>
1168
1169      <listitem>
1170       <para>
1171        Reject <literal>\000</> in string literals and <command>COPY</> data
1172        (Tom)
1173       </para>
1174
1175       <para>
1176        Previously, this was accepted but had the effect of terminating
1177        the string contents.
1178       </para>
1179      </listitem>
1180
1181      <listitem>
1182       <para>
1183        Improve the parser's ability to report error locations (Tom)
1184       </para>
1185
1186       <para>
1187        An error location is now reported for many semantic errors,
1188        such as mismatched datatypes, that previously could not be localized.
1189       </para>
1190      </listitem>
1191
1192     </itemizedlist>
1193
1194     <sect4>
1195      <title><command>TRUNCATE</></title>
1196      <itemizedlist>
1197
1198       <listitem>
1199        <para>
1200         Support statement-level <literal>ON TRUNCATE</> triggers (Simon)
1201        </para>
1202       </listitem>
1203
1204       <listitem>
1205        <para>
1206         Add <literal>RESTART</>/<literal>CONTINUE IDENTITY</> options
1207         for <command>TRUNCATE TABLE</>
1208         (Zoltan Boszormenyi)
1209        </para>
1210
1211        <para>
1212         The start value of a sequence can be changed by <command>ALTER
1213         SEQUENCE START WITH</>.
1214        </para>
1215       </listitem>
1216
1217       <listitem>
1218        <para>
1219         Allow <command>TRUNCATE tab1, tab1</> to succeed (Bruce)
1220        </para>
1221       </listitem>
1222
1223       <listitem>
1224        <para>
1225         Add a separate <command>TRUNCATE</> permission (Robert Haas)
1226        </para>
1227       </listitem>
1228
1229      </itemizedlist>
1230
1231     </sect4>
1232
1233     <sect4>
1234      <title><command>EXPLAIN</></title>
1235      <itemizedlist>
1236
1237       <listitem>
1238        <para>
1239         Make <command>EXPLAIN VERBOSE</> show the output columns of each
1240         plan node (Tom)
1241        </para>
1242
1243        <para>
1244         Previously <command>EXPLAIN VERBOSE</> output an internal
1245         representation of the query plan.  (That behavior is now
1246         available via <varname>debug_print_plan</>.)
1247        </para>
1248       </listitem>
1249
1250       <listitem>
1251        <para>
1252         Make <command>EXPLAIN</> identify subplans and initplans with
1253         individual labels (Tom)
1254        </para>
1255       </listitem>
1256
1257       <listitem>
1258        <para>
1259         Make <command>EXPLAIN</> honor <varname>debug_print_plan</> (Tom)
1260        </para>
1261       </listitem>
1262
1263       <listitem>
1264        <para>
1265         Allow <command>EXPLAIN</> on <command>CREATE TABLE AS</> (Peter)
1266        </para>
1267       </listitem>
1268
1269      </itemizedlist>
1270
1271     </sect4>
1272
1273     <sect4>
1274      <title><literal>LIMIT</>/<literal>OFFSET</></title>
1275      <itemizedlist>
1276
1277       <listitem>
1278        <para>
1279         Allow sub-selects in <literal>LIMIT</> and <literal>OFFSET</> (Tom)
1280        </para>
1281       </listitem>
1282
1283       <listitem>
1284        <para>
1285         Add <acronym>SQL</>-standard syntax for
1286         <literal>LIMIT</>/<literal>OFFSET</> capabilities (Peter)
1287        </para>
1288
1289        <para>
1290         To wit,
1291         <literal>OFFSET num {ROW|ROWS} FETCH {FIRST|NEXT} [num] {ROW|ROWS}
1292         ONLY</>.
1293        </para>
1294       </listitem>
1295
1296      </itemizedlist>
1297
1298     </sect4>
1299
1300    </sect3>
1301
1302    <sect3>
1303     <title>Object Manipulation</title>
1304     <itemizedlist>
1305
1306      <listitem>
1307       <para>
1308        Add support for column-level privileges (Stephen Frost, KaiGai
1309        Kohei)
1310       </para>
1311      </listitem>
1312
1313      <listitem>
1314       <para>
1315        Refactor multi-object <command>DROP</> operations to reduce the
1316        need for <literal>CASCADE</> (Alex Hunsaker)
1317       </para>
1318
1319       <para>
1320        For example, if table <literal>B</> has a dependency on table
1321        <literal>A</>, the command <literal>DROP TABLE A, B</> no longer
1322        requires the <literal>CASCADE</> option.
1323       </para>
1324      </listitem>
1325
1326      <listitem>
1327       <para>
1328        Fix various problems with concurrent <command>DROP</> commands
1329        by ensuring that locks are taken before we begin to drop dependencies
1330        of an object (Tom)
1331       </para>
1332      </listitem>
1333
1334      <listitem>
1335       <para>
1336        Improve reporting of dependencies during <command>DROP</>
1337        commands (Tom)
1338       </para>
1339      </listitem>
1340
1341      <listitem>
1342       <para>
1343        Add <literal>WITH [NO] DATA</> clause to <command>CREATE TABLE
1344        AS</>, per the <acronym>SQL</> standard (Peter, Tom)
1345       </para>
1346      </listitem>
1347
1348      <listitem>
1349       <para>
1350        Add support for user-defined I/O conversion casts (Heikki)
1351       </para>
1352      </listitem>
1353
1354      <listitem>
1355       <para>
1356        Allow <command>CREATE AGGREGATE</> to use an <type>internal</>
1357        transition datatype (Tom)
1358       </para>
1359      </listitem>
1360
1361      <listitem>
1362       <para>
1363        Add <literal>LIKE</> clause to <command>CREATE TYPE</> (Tom)
1364       </para>
1365
1366       <para>
1367        This simplifies creation of data types that use the same internal
1368        representation as an existing type.
1369       </para>
1370      </listitem>
1371
1372      <listitem>
1373       <para>
1374        Allow specification of the type category and <quote>preferred</>
1375        status for user-defined base types (Tom)
1376       </para>
1377
1378       <para>
1379        This allows more control over the coercion behavior of user-defined
1380        types.
1381       </para>
1382      </listitem>
1383
1384      <listitem>
1385       <para>
1386        Allow <command>CREATE OR REPLACE VIEW</> to add columns to the
1387        end of a view (Robert Haas)
1388       </para>
1389      </listitem>
1390
1391     </itemizedlist>
1392
1393     <sect4>
1394      <title><command>ALTER</></title>
1395      <itemizedlist>
1396
1397       <listitem>
1398        <para>
1399         Add <command>ALTER TYPE RENAME</> (Petr Jelinek)
1400        </para>
1401       </listitem>
1402
1403       <listitem>
1404        <para>
1405         Add <command>ALTER SEQUENCE ... RESTART</> (with no parameter) to
1406         reset a sequence to its initial value (Zoltan Boszormenyi)
1407        </para>
1408       </listitem>
1409
1410       <listitem>
1411        <para>
1412         Modify the <command>ALTER TABLE</> syntax to allow all reasonable
1413         combinations for tables, indexes, sequences, and views (Tom)
1414        </para>
1415
1416        <para>
1417         This change allows the following new syntaxes:
1418
1419         <itemizedlist>
1420          <listitem>
1421           <para>
1422            <command>ALTER SEQUENCE OWNER TO</>
1423           </para>
1424          </listitem>
1425          <listitem>
1426           <para>
1427            <command>ALTER VIEW ALTER COLUMN SET/DROP DEFAULT</>
1428           </para>
1429          </listitem>
1430          <listitem>
1431           <para>
1432            <command>ALTER VIEW OWNER TO</>
1433           </para>
1434          </listitem>
1435          <listitem>
1436           <para>
1437            <command>ALTER VIEW SET SCHEMA</>
1438           </para>
1439          </listitem>
1440         </itemizedlist>
1441
1442         There is no actual new functionality here, but formerly
1443         you had to say <command>ALTER TABLE</> to do these things,
1444         which was confusing.
1445        </para>
1446       </listitem>
1447
1448       <listitem>
1449        <para>
1450         Add support for the syntax <command>ALTER TABLE ... ALTER COLUMN
1451         ... SET DATA TYPE</> (Peter)
1452        </para>
1453
1454        <para>
1455         This is <acronym>SQL</>-standard syntax for functionality that
1456         was already supported.
1457        </para>
1458       </listitem>
1459
1460       <listitem>
1461        <para>
1462         Make <command>ALTER TABLE SET WITHOUT OIDS</> rewrite the table
1463         to physically remove <type>OID</> values (Tom)
1464        </para>
1465
1466        <para>
1467         Also, add <command>ALTER TABLE SET WITH OIDS</> to rewrite the
1468         table to add <type>OID</>s.
1469        </para>
1470       </listitem>
1471
1472      </itemizedlist>
1473
1474     </sect4>
1475
1476     <sect4>
1477      <title>Database Manipulation</title>
1478      <itemizedlist>
1479
1480       <listitem>
1481        <para>
1482         Improve reporting of
1483         <command>CREATE</>/<command>DROP</>/<command>RENAME DATABASE</>
1484         failure when uncommitted prepared transactions are the cause
1485         (Tom)
1486        </para>
1487       </listitem>
1488
1489       <listitem>
1490        <para>
1491         Make <varname>LC_COLLATE</> and <varname>LC_CTYPE</> into
1492         per-database settings (Radek Strnad, Heikki)
1493        </para>
1494
1495        <para>
1496         This makes collation similar to encoding, which was always
1497         configurable per database.
1498        </para>
1499       </listitem>
1500
1501       <listitem>
1502        <para>
1503         Improve checks that the database encoding, collation
1504         (<varname>LC_COLLATE</>), and character classes
1505         (<varname>LC_CTYPE</>) match (Heikki, Tom)
1506        </para>
1507
1508        <para>
1509         Note in particular that a new database's encoding and locale
1510         settings can be changed only when copying from <literal>template0</>.
1511         This prevents possibly copying data that doesn't match the settings.
1512        </para>
1513       </listitem>
1514
1515       <listitem>
1516        <para>
1517         Add <command>ALTER DATABASE SET TABLESPACE</> to move a database
1518         to a new tablespace (Guillaume Lelarge, Bernd Helmle)
1519        </para>
1520       </listitem>
1521
1522      </itemizedlist>
1523
1524     </sect4>
1525
1526    </sect3>
1527
1528    <sect3>
1529     <title>Utility Operations</title>
1530
1531     <itemizedlist>
1532
1533      <listitem>
1534       <para>
1535        Add a <literal>VERBOSE</> option to the <command>CLUSTER</> command and
1536        <application>clusterdb</> (Jim Cox)
1537       </para>
1538      </listitem>
1539
1540      <listitem>
1541       <para>
1542        Decrease memory requirements for recording pending trigger
1543        events (Tom)
1544       </para>
1545      </listitem>
1546
1547     </itemizedlist>
1548
1549     <sect4>
1550      <title>Indexes</title>
1551      <itemizedlist>
1552
1553       <listitem>
1554        <para>
1555         Dramatically improve the speed of building and accessing hash
1556         indexes (Tom Raney, Shreya Bhargava)
1557        </para>
1558
1559        <para>
1560         This allows hash indexes to be sometimes faster than btree
1561         indexes.  However, hash indexes are still not crash-safe.
1562        </para>
1563       </listitem>
1564
1565       <listitem>
1566        <para>
1567         Make hash indexes store only the hash code, not the full value of
1568         the indexed column (Xiao Meng)
1569        </para>
1570
1571        <para>
1572         This greatly reduces the size of hash indexes for long indexed
1573         values, improving performance.
1574        </para>
1575       </listitem>
1576
1577       <listitem>
1578        <para>
1579         Implement fast update option for GIN indexes (Teodor, Oleg)
1580        </para>
1581
1582        <para>
1583         This option greatly improves update speed at a small penalty in search
1584         speed.
1585        </para>
1586       </listitem>
1587
1588       <listitem>
1589        <para>
1590         <literal>xxx_pattern_ops</> indexes can now be used for simple
1591         equality comparisons, not only for <literal>LIKE</> (Tom)
1592        </para>
1593       </listitem>
1594
1595      </itemizedlist>
1596
1597     </sect4>
1598
1599     <sect4>
1600      <title>Full Text Indexes</title>
1601      <itemizedlist>
1602
1603       <listitem>
1604        <para>
1605         Remove the requirement to use <literal>@@@</> when doing
1606         <acronym>GIN</> weighted lookups on full text indexes (Tom, Teodor)
1607        </para>
1608
1609        <para>
1610         The normal <literal>@@</> text search operator can be used
1611         instead.
1612        </para>
1613       </listitem>
1614
1615       <listitem>
1616        <para>
1617         Add an optimizer selectivity function for <literal>@@</> text
1618         search operations (Jan Urbanski)
1619        </para>
1620       </listitem>
1621
1622       <listitem>
1623        <para>
1624         Allow prefix matching in full text searches (Teodor Sigaev,
1625         Oleg Bartunov)
1626        </para>
1627       </listitem>
1628
1629       <listitem>
1630        <para>
1631         Support multi-column <acronym>GIN</> indexes (Teodor Sigaev)
1632        </para>
1633       </listitem>
1634
1635       <listitem>
1636        <para>
1637         Improve support for Nepali language and Devanagari alphabet (Teodor)
1638        </para>
1639       </listitem>
1640
1641      </itemizedlist>
1642
1643     </sect4>
1644
1645     <sect4>
1646      <title><command>VACUUM</></title>
1647      <itemizedlist>
1648
1649       <listitem>
1650        <para>
1651         Track free space in separate per-relation <quote>fork</> files (Heikki)
1652        </para>
1653
1654        <para>
1655         Free space discovered by <command>VACUUM</> is now recorded in
1656         <filename>*_fsm</> files, rather than in a fixed-sized shared memory
1657         area.  The <varname>max_fsm_pages</> and <varname>max_fsm_relations</>
1658         settings have been removed, greatly simplifying administration of
1659         free space management.
1660        </para>
1661       </listitem>
1662
1663       <listitem>
1664        <para>
1665         Add a visibility map to track pages that do not require
1666         vacuuming (Heikki)
1667        </para>
1668
1669        <para>
1670         This allows <command>VACUUM</> to avoid scanning all of
1671         a table when only a portion of the table needs vacuuming.
1672         The visibility map is stored in per-relation <quote>fork</> files.
1673        </para>
1674       </listitem>
1675
1676       <listitem>
1677        <para>
1678         Add <varname>vacuum_freeze_table_age</> parameter to control
1679         when <command>VACUUM</> should ignore the visibility map and
1680         do a full table scan to freeze tuples (Heikki)
1681        </para>
1682       </listitem>
1683
1684       <listitem>
1685        <para>
1686         Track transaction snapshots more carefully (Alvaro)
1687        </para>
1688
1689        <para>
1690         This improves <command>VACUUM</>'s ability to reclaim space
1691         in the presence of long-running transactions.
1692        </para>
1693       </listitem>
1694
1695       <listitem>
1696        <para>
1697         Add ability to specify per-relation autovacuum and <acronym>TOAST</>
1698         parameters in <command>CREATE TABLE</> (Alvaro, Euler Taveira de
1699         Oliveira)
1700        </para>
1701
1702        <para>
1703         Autovacuum options used to be stored in a system table.
1704        </para>
1705       </listitem>
1706
1707       <listitem>
1708        <para>
1709         Add <literal>--freeze</> option to <application>vacuumdb</>
1710         (Bruce)
1711        </para>
1712       </listitem>
1713
1714      </itemizedlist>
1715
1716     </sect4>
1717
1718    </sect3>
1719
1720    <sect3>
1721     <title>Data Types</title>
1722     <itemizedlist>
1723
1724      <listitem>
1725       <para>
1726        Add a <literal>CaseSensitive</> option for text search synonym
1727        dictionaries (Simon)
1728       </para>
1729      </listitem>
1730
1731      <listitem>
1732       <para>
1733        Improve the precision of <type>NUMERIC</> division (Tom)
1734       </para>
1735      </listitem>
1736
1737      <listitem>
1738       <para>
1739        Add basic arithmetic operators for <type>int2</> with <type>int8</>
1740        (Tom)
1741       </para>
1742
1743       <para>
1744        This eliminates the need for explicit casting in some situations.
1745       </para>
1746      </listitem>
1747
1748      <listitem>
1749       <para>
1750        Allow <type>UUID</> input to accept an optional hyphen after
1751        every fourth digit (Robert Haas)
1752       </para>
1753      </listitem>
1754
1755      <listitem>
1756       <para>
1757        Allow <literal>on</>/<literal>off</> as input for the boolean data type
1758        (Itagaki Takahiro)
1759       </para>
1760      </listitem>
1761
1762      <listitem>
1763       <para>
1764        Allow spaces around <literal>NaN</> in the input string for
1765        type <type>numeric</> (Sam Mason)
1766       </para>
1767      </listitem>
1768
1769     </itemizedlist>
1770
1771     <sect4>
1772      <title>Temporal Data Types</title>
1773      <itemizedlist>
1774
1775       <listitem>
1776        <para>
1777         Reject year <literal>0 BC</> and years <literal>000</> and
1778         <literal>0000</> (Tom)
1779        </para>
1780
1781        <para>
1782         Previously these were interpreted as <literal>1 BC</>.
1783         (Note: years <literal>0</> and <literal>00</> are still assumed to be
1784         the year 2000.)
1785        </para>
1786       </listitem>
1787
1788       <listitem>
1789        <para>
1790         Include <literal>SGT</> (Singapore time) in the default list of
1791         known time zone abbreviations (Tom)
1792        </para>
1793       </listitem>
1794
1795       <listitem>
1796        <para>
1797         Support <literal>infinity</> and <literal>-infinity</> as
1798         values of type <type>date</> (Tom)
1799        </para>
1800       </listitem>
1801
1802       <listitem>
1803        <para>
1804         Make parsing of <type>interval</> literals more standard-compliant
1805         (Tom, Ron Mayer)
1806        </para>
1807
1808        <para>
1809         For example, <literal>INTERVAL '1' YEAR</> now does what it's
1810         supposed to.
1811        </para>
1812       </listitem>
1813
1814       <listitem>
1815        <para>
1816         Allow <type>interval</> fractional-seconds precision to be specified
1817         after the <literal>second</> keyword, for <acronym>SQL</> standard
1818         compliance (Tom)
1819        </para>
1820
1821        <para>
1822         Formerly the precision had to be specified after the keyword
1823         <type>interval</>.  (For backwards compatibility, this syntax is still
1824         supported, though deprecated.)  Data type definitions will now be
1825         output using the standard format.
1826        </para>
1827       </listitem>
1828
1829       <listitem>
1830        <para>
1831         Support the <acronym>IS0 8601</> <type>interval</> syntax (Ron
1832         Mayer, Kevin Grittner)
1833        </para>
1834
1835        <para>
1836         For example, <literal>INTERVAL 'P1Y2M3DT4H5M6.7S'</> is now
1837         supported.
1838        </para>
1839       </listitem>
1840
1841       <listitem>
1842        <para>
1843         Add <varname>IntervalStyle</> parameter
1844         which controls how <type>interval</> values are output (Ron Mayer)
1845        </para>
1846
1847        <para>
1848         Valid values are:  <literal>postgres</>, <literal>postgres_verbose</>,
1849         <literal>sql_standard</>, <literal>iso_8601</>.  This setting also
1850         controls the handling of negative <type>interval</> input when only
1851         some fields have positive/negative designations.
1852        </para>
1853       </listitem>
1854
1855       <listitem>
1856        <para>
1857         Improve consistency of handling of fractional seconds in
1858         <type>timestamp</> and <type>interval</> output (Ron Mayer)
1859        </para>
1860       </listitem>
1861
1862      </itemizedlist>
1863
1864     </sect4>
1865
1866     <sect4>
1867      <title>Arrays</title>
1868      <itemizedlist>
1869
1870       <listitem>
1871        <para>
1872         Improve the handling of casts applied to <literal>ARRAY[]</>
1873         constructs, such as <literal>ARRAY[...]::integer[]</>
1874         (Brendan Jurd)
1875        </para>
1876
1877        <para>
1878         Formerly <productname>PostgreSQL</> attempted to determine a data type
1879         for the <literal>ARRAY[]</> construct without reference to the ensuing
1880         cast.  This could fail unnecessarily in many cases, in particular when
1881         the <literal>ARRAY[]</> construct was empty or contained only
1882         ambiguous entries such as <literal>NULL</>.  Now the cast is consulted
1883         to determine the type that the array elements must be.
1884        </para>
1885       </listitem>
1886
1887       <listitem>
1888        <para>
1889         Make <acronym>SQL</>-syntax <type>ARRAY</> dimensions optional
1890         to match the <acronym>SQL</> standard (Peter)
1891        </para>
1892       </listitem>
1893
1894       <listitem>
1895        <para>
1896         Add <function>array_ndims()</> to return the number
1897         of dimensions of an array (Robert Haas)
1898        </para>
1899       </listitem>
1900
1901       <listitem>
1902        <para>
1903         Add <function>array_length()</> to return the length
1904         of an array for a specified dimension (Jim Nasby, Robert
1905         Haas, Peter Eisentraut)
1906        </para>
1907       </listitem>
1908
1909       <listitem>
1910        <para>
1911         Add aggregate function <function>array_agg()</>, which
1912         returns all aggregated values as a single array (Robert Haas,
1913         Jeff Davis, Peter)
1914        </para>
1915       </listitem>
1916
1917       <listitem>
1918        <para>
1919         Add <function>unnest()</>, which converts an array to
1920         individual row values (Tom)
1921        </para>
1922
1923        <para>
1924         This is the opposite of <function>array_agg()</>.
1925        </para>
1926       </listitem>
1927
1928       <listitem>
1929        <para>
1930         Add <function>array_fill()</> to create arrays initialized with
1931         a value (Pavel Stehule)
1932        </para>
1933       </listitem>
1934
1935       <listitem>
1936        <para>
1937         Add <function>generate_subscripts()</> to simplify generating
1938         the range of an array's subscripts (Pavel Stehule)
1939        </para>
1940       </listitem>
1941
1942      </itemizedlist>
1943
1944     </sect4>
1945
1946     <sect4>
1947      <title>Wide-Value Storage (<acronym>TOAST</>)</title>
1948      <itemizedlist>
1949
1950       <listitem>
1951        <para>
1952         Consider <acronym>TOAST</> compression on values as short as
1953         32 bytes (previously 256 bytes) (Greg Stark)
1954        </para>
1955       </listitem>
1956
1957       <listitem>
1958        <para>
1959         Require 25% minimum space savings before using <acronym>TOAST</>
1960         compression (previously 20% for small values and any-savings-at-all
1961         for large values) (Greg)
1962        </para>
1963       </listitem>
1964
1965       <listitem>
1966        <para>
1967         Improve <acronym>TOAST</> heuristics for rows that have a mix of large
1968         and small toastable fields, so that we prefer to push large values out
1969         of line and don't compress small values unnecessarily (Greg, Tom)
1970        </para>
1971       </listitem>
1972
1973      </itemizedlist>
1974
1975     </sect4>
1976
1977    </sect3>
1978
1979    <sect3>
1980     <title>Functions</title>
1981     <itemizedlist>
1982
1983      <listitem>
1984       <para>
1985        Document that <function>setseed()</> allows values from
1986        <literal>-1</> to <literal>1</> (not just <literal>0</> to
1987        <literal>1</>), and enforce the valid range (Kris Jurka)
1988       </para>
1989      </listitem>
1990
1991      <listitem>
1992       <para>
1993        Add server-side function <function>lo_import(filename, oid)</>
1994        (Tatsuo)
1995       </para>
1996      </listitem>
1997
1998      <listitem>
1999       <para>
2000        Add <function>quote_nullable()</>, which behaves like
2001        <function>quote_literal()</> but returns the string <literal>NULL</> for
2002        a null argument (Brendan Jurd)
2003       </para>
2004      </listitem>
2005
2006      <listitem>
2007       <para>
2008        Improve full text search <function>headline()</> function to
2009        allow extracting several fragments of text (Sushant Sinha)
2010       </para>
2011      </listitem>
2012
2013      <listitem>
2014       <para>
2015        Add <function>suppress_redundant_updates_trigger()</> trigger
2016        function to avoid overhead for non-data-changing updates (Andrew)
2017       </para>
2018      </listitem>
2019
2020      <listitem>
2021       <para>
2022        Add <function>div(numeric, numeric)</> to perform <type>numeric</>
2023        division without rounding (Tom)
2024       </para>
2025      </listitem>
2026
2027      <listitem>
2028       <para>
2029        Add <type>timestamp</> and <type>timestamptz</> versions of
2030        <function>generate_series()</> (Hitoshi Harada)
2031       </para>
2032      </listitem>
2033
2034     </itemizedlist>
2035
2036     <sect4>
2037      <title>Object Information Functions</title>
2038      <itemizedlist>
2039
2040       <listitem>
2041        <para>
2042         Implement <function>current_query()</> for use by functions
2043         that need to know the currently running query (Tomas Doran)
2044        </para>
2045       </listitem>
2046
2047       <listitem>
2048        <para>
2049         Add <function>pg_get_keywords()</> to return a list of the
2050         parser keywords (Dave Page)
2051        </para>
2052       </listitem>
2053
2054       <listitem>
2055        <para>
2056         Add <function>pg_get_functiondef()</> to see a function's
2057         definition (Abhijit Menon-Sen)
2058        </para>
2059       </listitem>
2060
2061       <listitem>
2062        <para>
2063         Allow the second argument of <function>pg_get_expr()</> to be zero
2064         when deparsing an expression that does not contain variables (Tom)
2065        </para>
2066       </listitem>
2067
2068       <listitem>
2069        <para>
2070         Modify <function>pg_relation_size()</> to use <literal>regclass</>
2071         (Heikki)
2072        </para>
2073
2074        <para>
2075         <function>pg_relation_size(data_type_name)</> no longer works.
2076        </para>
2077       </listitem>
2078
2079       <listitem>
2080        <para>
2081         Add <literal>boot_val</> and <literal>reset_val</> columns to
2082         <literal>pg_settings</> output (Greg Smith)
2083        </para>
2084       </listitem>
2085
2086       <listitem>
2087        <para>
2088         Add source file name and line number columns to
2089         <literal>pg_settings</> output for variables set in a configuration
2090         file (Magnus, Alvaro)
2091        </para>
2092
2093        <para>
2094         For security reasons, these columns are only visible to superusers.
2095        </para>
2096       </listitem>
2097
2098       <listitem>
2099        <para>
2100         Add support for <varname>CURRENT_CATALOG</>,
2101         <varname>CURRENT_SCHEMA</>, <varname>SET CATALOG</>, <varname>SET
2102         SCHEMA</> (Peter)
2103        </para>
2104
2105        <para>
2106         These provide <acronym>SQL</>-standard syntax for existing features.
2107        </para>
2108       </listitem>
2109
2110       <listitem>
2111        <para>
2112         Add <function>pg_typeof()</> which returns the data type
2113         of any value (Brendan Jurd)
2114        </para>
2115       </listitem>
2116
2117       <listitem>
2118        <para>
2119         Make <function>version()</> return information about whether
2120         the server is a 32- or 64-bit binary (Bruce)
2121        </para>
2122       </listitem>
2123
2124       <listitem>
2125        <para>
2126         Fix the behavior of information schema columns
2127         <structfield>is_insertable_into</> and <structfield>is_updatable</> to
2128         be consistent (Peter)
2129        </para>
2130       </listitem>
2131
2132       <listitem>
2133        <para>
2134         Improve the behavior of information schema
2135         <structfield>datetime_precision</> columns (Peter)
2136        </para>
2137
2138        <para>
2139         These columns now show zero for <type>date</> columns, and 6
2140         (the default precision) for <type>time</>, <type>timestamp</>, and
2141         <type>interval</> without a declared precision, rather than showing
2142         null as formerly.
2143        </para>
2144       </listitem>
2145
2146       <listitem>
2147        <para>
2148         Convert remaining builtin set-returning functions to use
2149         <literal>OUT</> parameters (Jaime Casanova)
2150        </para>
2151
2152        <para>
2153         This makes it possible to call these functions without specifying
2154         a column list:  <function>pg_show_all_settings()</>,
2155         <function>pg_lock_status()</>, <function>pg_prepared_xact()</>,
2156         <function>pg_prepared_statement()</>, <function>pg_cursor()</>
2157        </para>
2158       </listitem>
2159
2160       <listitem>
2161        <para>
2162         Make <function>pg_*_is_visible()</> and
2163         <function>has_*_privilege()</> functions return <literal>NULL</>
2164         for invalid OIDs, rather than reporting an error (Tom)
2165        </para>
2166       </listitem>
2167
2168       <listitem>
2169        <para>
2170         Extend <function>has_*_privilege()</> functions to allow inquiring
2171         about the OR of multiple privileges in one call (Stephen
2172         Frost, Tom)
2173        </para>
2174       </listitem>
2175
2176       <listitem>
2177        <para>
2178         Add <function>has_column_privilege()</> and
2179         <function>has_any_column_privilege()</> functions (Stephen
2180         Frost, Tom)
2181        </para>
2182       </listitem>
2183
2184      </itemizedlist>
2185
2186     </sect4>
2187
2188     <sect4>
2189      <title>Function Creation</title>
2190      <itemizedlist>
2191
2192       <listitem>
2193        <para>
2194         Support variadic functions (functions with a variable number
2195         of arguments) (Pavel Stehule)
2196        </para>
2197
2198        <para>
2199         Only trailing arguments can be optional, and they all must be
2200         of the same data type.
2201        </para>
2202       </listitem>
2203
2204       <listitem>
2205        <para>
2206         Support default values for function arguments (Pavel Stehule)
2207        </para>
2208       </listitem>
2209
2210       <listitem>
2211        <para>
2212         Add <command>CREATE FUNCTION ... RETURNS TABLE</> clause (Pavel
2213         Stehule)
2214        </para>
2215       </listitem>
2216
2217       <listitem>
2218        <para>
2219         Allow <acronym>SQL</>-language functions to return the output
2220         of an <command>INSERT</>/<command>UPDATE</>/<command>DELETE</>
2221         <literal>RETURNING</> clause (Tom)
2222        </para>
2223       </listitem>
2224
2225      </itemizedlist>
2226
2227     </sect4>
2228
2229     <sect4>
2230      <title>PL/PgSQL Server-Side Language</title>
2231      <itemizedlist>
2232
2233       <listitem>
2234        <para>
2235         Support <literal>EXECUTE USING</> for easier insertion of data
2236         values into a dynamic query string (Pavel Stehule)
2237        </para>
2238       </listitem>
2239
2240       <listitem>
2241        <para>
2242         Allow looping over the results of a cursor using a <literal>FOR</>
2243         loop (Pavel Stehule)
2244        </para>
2245       </listitem>
2246
2247       <listitem>
2248        <para>
2249         Support <literal>RETURN QUERY EXECUTE</> (Pavel
2250         Stehule)
2251        </para>
2252       </listitem>
2253
2254       <listitem>
2255        <para>
2256         Improve the <literal>RAISE</> command (Pavel Stehule)
2257
2258         <itemizedlist>
2259          <listitem>
2260           <para>
2261            Support <literal>DETAIL</> and <literal>HINT</> fields
2262           </para>
2263          </listitem>
2264          <listitem>
2265           <para>
2266            Support specification of the <literal>SQLSTATE</> error code
2267           </para>
2268          </listitem>
2269          <listitem>
2270           <para>
2271            Support an exception name parameter
2272           </para>
2273          </listitem>
2274          <listitem>
2275           <para>
2276            Allow <literal>RAISE</> without parameters in an exception
2277            block to re-throw the current error
2278           </para>
2279          </listitem>
2280         </itemizedlist>
2281        </para>
2282       </listitem>
2283
2284       <listitem>
2285        <para>
2286         Allow specification of <varname>SQLSTATE</> codes
2287         in <literal>EXCEPTION</> lists (Pavel Stehule)
2288        </para>
2289
2290        <para>
2291         This is useful for handling custom <varname>SQLSTATE</> codes.
2292        </para>
2293       </listitem>
2294
2295       <listitem>
2296        <para>
2297         Support the <literal>CASE</> statement (Pavel Stehule)
2298        </para>
2299       </listitem>
2300
2301       <listitem>
2302        <para>
2303         Make <command>RETURN QUERY</> set the special <literal>FOUND</> and
2304         <command>GET DIAGNOSTICS</> <literal>ROW_COUNT</> variables
2305         (Pavel Stehule)
2306        </para>
2307       </listitem>
2308
2309       <listitem>
2310        <para>
2311         Make <command>FETCH</> and <command>MOVE</> set the
2312         <command>GET DIAGNOSTICS</> <literal>ROW_COUNT</> variable
2313         (Andrew Gierth)
2314        </para>
2315       </listitem>
2316
2317       <listitem>
2318        <para>
2319         Make <command>EXIT</> without a label always exit the innermost
2320         loop (Tom)
2321        </para>
2322
2323        <para>
2324         Formerly, if there were a <literal>BEGIN</> block more closely nested
2325         than any loop, it would exit that block instead.  The new behavior
2326         matches Oracle(TM) and is also what was previously stated by our own
2327         documentation.
2328        </para>
2329       </listitem>
2330
2331       <listitem>
2332        <para>
2333         Make processing of string literals and nested block comments
2334         match the main SQL parser's processing (Tom)
2335        </para>
2336
2337        <para>
2338         In particular, the format string in <command>RAISE</> now works
2339         the same as any other string literal, including being subject
2340         to <varname>standard_conforming_strings</>.  This change also
2341         fixes other cases in which valid commands would fail when
2342         <varname>standard_conforming_strings</> is on.
2343        </para>
2344       </listitem>
2345
2346       <listitem>
2347        <para>
2348         Avoid memory leakage when the same function is called at varying
2349         exception-block nesting depths (Tom)
2350        </para>
2351       </listitem>
2352
2353      </itemizedlist>
2354
2355     </sect4>
2356
2357    </sect3>
2358
2359    <sect3>
2360     <title>Client Applications</title>
2361
2362     <itemizedlist>
2363
2364      <listitem>
2365       <para>
2366        Fix <literal>pg_ctl restart</> to preserve command-line arguments
2367        (Bruce)
2368       </para>
2369      </listitem>
2370
2371      <listitem>
2372       <para>
2373        Add <literal>-w</>/<literal>--no-password</> option that
2374        prevents password prompting in all utilities that have a
2375        <literal>-W</>/<literal>--password</> option (Peter)
2376       </para>
2377      </listitem>
2378
2379      <listitem>
2380       <para>
2381        Remove <option>-q</> (quiet) option of <application>createdb</>,
2382        <application>createuser</>, <application>dropdb</>,
2383        <application>dropuser</> (Peter)
2384       </para>
2385
2386       <para>
2387        These options have had no effect since <productname>PostgreSQL</>
2388        8.3.
2389       </para>
2390      </listitem>
2391
2392     </itemizedlist>
2393
2394     <sect4>
2395      <title><application>psql</></title>
2396      <itemizedlist>
2397
2398       <listitem>
2399        <para>
2400         Remove verbose startup banner; now just suggest <literal>help</>
2401         (Joshua Drake)
2402        </para>
2403       </listitem>
2404
2405       <listitem>
2406        <para>
2407         Make <literal>help</> show common backslash commands (Greg
2408         Sabino Mullane)
2409        </para>
2410       </listitem>
2411
2412       <listitem>
2413        <para>
2414         Add <literal>\pset format wrapped</> mode to wrap output to the
2415         screen width, or file/pipe output too if <literal>\pset columns</>
2416         is set (Bryce Nesbitt)
2417        </para>
2418       </listitem>
2419
2420       <listitem>
2421        <para>
2422         Allow all supported spellings of boolean values in <command>\pset</>,
2423         rather than just <literal>on</> and <literal>off</> (Bruce)
2424        </para>
2425
2426        <para>
2427         Formerly, any string other than <quote>off</> was silently taken
2428         to mean <literal>true</>.  <application>psql</> will now complain
2429         about unrecognized spellings (but still take them as <literal>true</>).
2430        </para>
2431       </listitem>
2432
2433       <listitem>
2434        <para>
2435         Use the pager for wide output (Bruce)
2436        </para>
2437       </listitem>
2438
2439       <listitem>
2440        <para>
2441         Require a space between a one-letter backslash command and its first
2442         argument (Bernd Helmle)
2443        </para>
2444
2445        <para>
2446         This removes a historical source of ambiguity.
2447        </para>
2448       </listitem>
2449
2450       <listitem>
2451        <para>
2452         Improve tab completion support for schema-qualified and
2453         quoted identifiers (Greg Sabino Mullane)
2454        </para>
2455       </listitem>
2456
2457       <listitem>
2458        <para>
2459         Add optional <literal>on</>/<literal>off</> argument for
2460         <command>\timing</> (David Fetter)
2461        </para>
2462       </listitem>
2463
2464       <listitem>
2465        <para>
2466         Display access control rights on multiple lines (Brendan
2467         Jurd, Andreas Scherbaum)
2468        </para>
2469       </listitem>
2470
2471       <listitem>
2472        <para>
2473         Make <command>\l</> show database access privileges (Andrew Gilligan)
2474        </para>
2475       </listitem>
2476
2477       <listitem>
2478        <para>
2479         Make <command>\l+</> show database sizes, if permissions
2480         allow (Andrew Gilligan)
2481        </para>
2482       </listitem>
2483
2484       <listitem>
2485        <para>
2486         Add the <command>\ef</> command to edit function definitions
2487         (Abhijit Menon-Sen)
2488        </para>
2489       </listitem>
2490
2491      </itemizedlist>
2492
2493     </sect4>
2494
2495     <sect4>
2496      <title><application>psql</> \d* commands</title>
2497
2498      <itemizedlist>
2499
2500       <listitem>
2501        <para>
2502         Make <command>\d*</> commands that do not have a pattern argument
2503         show system objects only if the <literal>S</> modifier is specified
2504         (Greg Sabino Mullane, Bruce)
2505        </para>
2506
2507        <para>
2508         The former behavior was inconsistent across different variants
2509         of <command>\d</>, and in most cases it provided no easy way to see
2510         just user objects.
2511        </para>
2512       </listitem>
2513
2514       <listitem>
2515        <para>
2516         Improve <command>\d*</> commands to work with older
2517         <productname>PostgreSQL</> server versions (back to 7.4),
2518         not only the current server version
2519         (Guillaume Lelarge)
2520        </para>
2521       </listitem>
2522
2523       <listitem>
2524        <para>
2525         Make <command>\d</> show foreign-key constraints that reference
2526         the selected table (Kenneth D'Souza)
2527        </para>
2528       </listitem>
2529
2530       <listitem>
2531        <para>
2532         Make <command>\d</> on a sequence show its column values
2533         (Euler Taveira de Oliveira)
2534        </para>
2535       </listitem>
2536
2537       <listitem>
2538        <para>
2539         Add column storage type and other relation options to the
2540         <command>\d+</> display (Gregory Stark, Euler Taveira de
2541         Oliveira)
2542        </para>
2543       </listitem>
2544
2545       <listitem>
2546        <para>
2547         Show relation size in <command>\dt+</> output (Dickson S.
2548         Guedes)
2549        </para>
2550       </listitem>
2551
2552       <listitem>
2553        <para>
2554         Show the possible values of <literal>enum</> types in <command>\dT+</>
2555         (David Fetter)
2556        </para>
2557       </listitem>
2558
2559       <listitem>
2560        <para>
2561         Allow <command>\dC</> to accept a wildcard pattern, which matches
2562         either datatype involved in the cast (Tom)
2563        </para>
2564       </listitem>
2565
2566       <listitem>
2567        <para>
2568         Add a function type column to <command>\df</>'s output, and add
2569         options to list only selected types of functions (David Fetter)
2570        </para>
2571       </listitem>
2572
2573       <listitem>
2574        <para>
2575         Make <command>\df</> not hide functions that take or return
2576         type <type>cstring</> (Tom)
2577        </para>
2578
2579        <para>
2580         Previously, such functions were hidden because most of them are
2581         datatype I/O functions, which were deemed uninteresting.  The new
2582         policy about hiding system functions by default makes this wart
2583         unnecessary.
2584        </para>
2585       </listitem>
2586
2587      </itemizedlist>
2588
2589     </sect4>
2590
2591     <sect4>
2592      <title><application>pg_dump</></title>
2593      <itemizedlist>
2594
2595       <listitem>
2596        <para>
2597         Add a <literal>--no-tablespaces</> option to
2598         <application>pg_dump</>/<application>pg_dumpall</>/<application>pg_restore</>
2599         so that dumps can be restored to clusters that have non-matching
2600         tablespace layouts (Gavin Roy)
2601        </para>
2602       </listitem>
2603
2604       <listitem>
2605        <para>
2606         Remove <option>-d</> and <option>-D</> options from
2607         <application>pg_dump</> and <application>pg_dumpall</> (Tom)
2608        </para>
2609
2610        <para>
2611         These options were too frequently confused with the option to
2612         select a database name in other <productname>PostgreSQL</>
2613         client applications.  The functionality is still available,
2614         but you must now spell out the long option name
2615         <option>--inserts</> or <option>--column-inserts</>.
2616        </para>
2617       </listitem>
2618
2619       <listitem>
2620        <para>
2621         Remove <option>-i</>/<option>--ignore-version</> option from
2622         <application>pg_dump</> and <application>pg_dumpall</> (Tom)
2623        </para>
2624
2625        <para>
2626         Use of this option does not throw an error, but it has no
2627         effect.  This option was removed because the version checks
2628         are necessary for safety.
2629        </para>
2630       </listitem>
2631
2632       <listitem>
2633        <para>
2634         Disable <varname>statement_timeout</> during dump and restore
2635         (Joshua Drake)
2636        </para>
2637       </listitem>
2638
2639       <listitem>
2640        <para>
2641         Add <application>pg_dump</>/<application>pg_dumpall</> option
2642         <option>--lock-wait-timeout</> (David Gould)
2643        </para>
2644
2645        <para>
2646         This allows dumps to fail if unable to acquire a shared lock
2647         within the specified amount of time.
2648        </para>
2649       </listitem>
2650
2651       <listitem>
2652        <para>
2653         Reorder <application>pg_dump</> <literal>--data-only</> output
2654         to dump tables referenced by foreign keys before
2655         the referencing tables (Tom)
2656        </para>
2657
2658        <para>
2659         This allows data loads when foreign keys are already present.
2660         If circular references make a safe ordering impossible, a
2661         <literal>NOTICE</> is issued.
2662        </para>
2663       </listitem>
2664
2665       <listitem>
2666        <para>
2667         Allow <application>pg_dump</>, <application>pg_dumpall</>, and
2668         <application>pg_restore</> to use a specified role (Benedek
2669         László)
2670        </para>
2671       </listitem>
2672
2673       <listitem>
2674        <para>
2675         Allow <application>pg_restore</> to use multiple concurrent
2676         connections to do the restore (Andrew)
2677        </para>
2678
2679        <para>
2680         The number of concurrent connections is controlled by the option
2681         <literal>--jobs</>.  This is supported only for custom-format archives.
2682        </para>
2683       </listitem>
2684
2685      </itemizedlist>
2686
2687     </sect4>
2688
2689    </sect3>
2690
2691    <sect3>
2692     <title>Programming Tools</title>
2693
2694     <sect4>
2695      <title><application>libpq</></title>
2696      <itemizedlist>
2697
2698       <listitem>
2699        <para>
2700         Allow the <type>OID</> to be specified when importing a large
2701         object, via new function <function>lo_import_with_oid()</> (Tatsuo)
2702        </para>
2703       </listitem>
2704
2705       <listitem>
2706        <para>
2707         Add <quote>events</> support (Andrew Chernow, Merlin Moncure)
2708        </para>
2709
2710        <para>
2711         This adds the ability to register callbacks to manage private
2712         data associated with <structname>PGconn</> and <structname>PGresult</>
2713         objects.
2714        </para>
2715       </listitem>
2716
2717       <listitem>
2718        <para>
2719         Improve error handling to allow the return of multiple
2720         error messages as multi-line error reports (Magnus)
2721        </para>
2722       </listitem>
2723
2724       <listitem>
2725        <para>
2726         Make <function>PQexecParams()</> and related functions return
2727         <varname>PGRES_EMPTY_QUERY</> for an empty query (Tom)
2728        </para>
2729
2730        <para>
2731         They previously returned <varname>PGRES_COMMAND_OK</>.
2732        </para>
2733       </listitem>
2734
2735       <listitem>
2736        <para>
2737         Document how to avoid the overhead of <function>WSACleanup()</>
2738         on Windows (Andrew Chernow)
2739        </para>
2740       </listitem>
2741
2742       <listitem>
2743        <para>
2744         Do not rely on Kerberos tickets to determine the default database
2745         username (Magnus)
2746        </para>
2747
2748        <para>
2749         Previously, a Kerberos-capable build of libpq would use the
2750         principal name from any available Kerberos ticket as default
2751         database username, even if the connection wasn't using Kerberos
2752         authentication.  This was deemed inconsistent and confusing.
2753         The default username is now determined the same way with or
2754         without Kerberos.  Note however that the database username must still
2755         match the ticket when Kerberos authentication is used.
2756        </para>
2757       </listitem>
2758      </itemizedlist>
2759
2760     </sect4>
2761
2762     <sect4>
2763      <title><application>libpq</> <acronym>SSL</> (Secure Sockets Layer)
2764       support</title>
2765      <itemizedlist>
2766
2767       <listitem>
2768        <para>
2769         Fix certificate validation for <acronym>SSL</> connections
2770         (Magnus)
2771        </para>
2772
2773        <para>
2774         <application>libpq</> now supports verifying both the certificate
2775         and the name of the server when making <acronym>SSL</>
2776         connections. If a root certificate is not available to use for
2777         verification, <acronym>SSL</> connections will fail. The
2778         <literal>sslmode</> parameter is used to enable certificate
2779         verification and set the level of checking.
2780         The default is still not to do any verification, allowing connections
2781         to SSL-enabled servers without requiring a root certificate on the
2782         client.
2783        </para>
2784       </listitem>
2785
2786       <listitem>
2787        <para>
2788         Support wildcard server certificates (Magnus)
2789        </para>
2790
2791        <para>
2792         If a certificate <acronym>CN</> starts with <literal>*</>, it will
2793         be treated as a wildcard when matching the hostname, allowing the
2794         use of the same certificate for multiple servers.
2795        </para>
2796       </listitem>
2797
2798       <listitem>
2799        <para>
2800         Allow the file locations for client certificates to be specified
2801         (Mark Woodward, Alvaro, Magnus)
2802        </para>
2803       </listitem>
2804
2805       <listitem>
2806        <para>
2807         Add a <function>PQinitOpenSSL</> function to allow greater control
2808         over OpenSSL/libcrypto initialization (Andrew Chernow)
2809        </para>
2810       </listitem>
2811
2812       <listitem>
2813        <para>
2814         Make <application>libpq</> unregister its <application>OpenSSL</>
2815         callbacks when no database connections remain open
2816         (Bruce, Magnus, Russell Smith)
2817        </para>
2818
2819        <para>
2820         This is required for applications that unload the libpq library,
2821         otherwise invalid <application>OpenSSL</> callbacks will remain.
2822        </para>
2823       </listitem>
2824
2825      </itemizedlist>
2826
2827     </sect4>
2828
2829     <sect4>
2830      <title><application>ecpg</></title>
2831      <itemizedlist>
2832
2833       <listitem>
2834        <para>
2835         Add localization support for messages (Euler Taveira de
2836         Oliveira)
2837        </para>
2838       </listitem>
2839
2840       <listitem>
2841        <para>
2842         ecpg parser is now automatically generated from the server
2843         parser (Michael)
2844        </para>
2845
2846        <para>
2847         Previously the ecpg parser was hand-maintained.
2848        </para>
2849       </listitem>
2850
2851      </itemizedlist>
2852
2853     </sect4>
2854
2855     <sect4>
2856      <title>Server Programming Interface (<acronym>SPI</>)</title>
2857      <itemizedlist>
2858
2859       <listitem>
2860        <para>
2861         Add support for single-use plans with out-of-line
2862         parameters (Tom)
2863        </para>
2864       </listitem>
2865
2866       <listitem>
2867        <para>
2868         Add new <varname>SPI_OK_REWRITTEN</> return code for
2869         <function>SPI_execute()</> (Heikki)
2870        </para>
2871
2872        <para>
2873         This is used when a command is rewritten to another type of
2874         command.
2875        </para>
2876       </listitem>
2877
2878       <listitem>
2879        <para>
2880         Remove unnecessary inclusions from <filename>executor/spi.h</> (Tom)
2881        </para>
2882
2883        <para>
2884         SPI-using modules might need to add some <literal>#include</>
2885         lines if they were depending on <filename>spi.h</> to include
2886         things for them.
2887        </para>
2888       </listitem>
2889
2890      </itemizedlist>
2891
2892     </sect4>
2893
2894    </sect3>
2895
2896    <sect3>
2897     <title>Build Options</title>
2898     <itemizedlist>
2899
2900      <listitem>
2901       <para>
2902        Update build system to use <productname>Autoconf</> 2.61 (Peter)
2903       </para>
2904      </listitem>
2905
2906      <listitem>
2907       <para>
2908        Require <productname>GNU bison</> for source code builds (Peter)
2909       </para>
2910
2911       <para>
2912        This has effectively been required for several years, but now there
2913        is no infrastructure claiming to support other parser tools.
2914       </para>
2915      </listitem>
2916
2917      <listitem>
2918       <para>
2919        Add <application>pg_config</> <literal>--htmldir</> option
2920        (Peter)
2921       </para>
2922      </listitem>
2923
2924      <listitem>
2925       <para>
2926        Pass <type>float4</> by value inside the server (Zoltan
2927        Boszormenyi)
2928       </para>
2929
2930       <para>
2931        Add <application>configure</> option
2932        <literal>--disable-float4-byval</> to use the old behavior.
2933        External C functions that use old-style (version 0) call convention
2934        and pass or return <type>float4</> values will be broken by this
2935        change, so you may need the <application>configure</> option if you
2936        have such functions and don't want to update them.
2937       </para>
2938      </listitem>
2939
2940      <listitem>
2941       <para>
2942        Pass <type>float8</>, <type>int8</>, and related datatypes
2943        by value inside the server on 64-bit platforms (Zoltan Boszormenyi)
2944       </para>
2945
2946       <para>
2947        Add <application>configure</> option
2948        <literal>--disable-float8-byval</> to use the old behavior.
2949        As above, this change might break old-style external C functions.
2950       </para>
2951      </listitem>
2952
2953      <listitem>
2954       <para>
2955        Add configure options <literal>--with-segsize</>,
2956        <literal>--with-blocksize</>, <literal>--with-wal-blocksize</>,
2957        <literal>--with-wal-segsize</> (Zdenek Kotala, Tom)
2958       </para>
2959
2960       <para>
2961        This simplifies build-time control over several constants that
2962        previously could only be changed by editing
2963        <filename>pg_config_manual.h</>.
2964       </para>
2965      </listitem>
2966
2967      <listitem>
2968       <para>
2969        Allow threaded builds on <productname>Solaris</> 2.5 (Bruce)
2970       </para>
2971      </listitem>
2972
2973      <listitem>
2974       <para>
2975        Use the system's <function>getopt_long()</> on <productname>Solaris</>
2976        (Zdenek Kotala, Tom)
2977       </para>
2978
2979       <para>
2980        This makes option processing more consistent with what Solaris users
2981        expect.
2982       </para>
2983      </listitem>
2984
2985      <listitem>
2986       <para>
2987        Add support for the <productname>Sun Studio</> compiler on
2988        <productname>Linux</> (Julius Stroffek)
2989       </para>
2990      </listitem>
2991
2992      <listitem>
2993       <para>
2994        Append the major version number to the backend <application>gettext</>
2995        domain, and the <literal>soname</> major version number to
2996        libraries' <application>gettext</> domain (Peter)
2997       </para>
2998
2999       <para>
3000        This simplifies parallel installations of multiple versions.
3001       </para>
3002      </listitem>
3003
3004      <listitem>
3005       <para>
3006        Add support for code coverage testing with <application>gcov</>
3007        (Michelle Caisse)
3008       </para>
3009      </listitem>
3010
3011      <listitem>
3012       <para>
3013        Allow out-of-tree builds on <productname>Mingw</> and
3014        <productname>Cygwin</> (Richard Evans)
3015       </para>
3016      </listitem>
3017
3018      <listitem>
3019       <para>
3020        Fix the use of <productname>Mingw</> as a cross-compiling source
3021        platform (Peter)
3022       </para>
3023      </listitem>
3024
3025     </itemizedlist>
3026
3027    </sect3>
3028
3029    <sect3>
3030     <title>Source Code</title>
3031     <itemizedlist>
3032
3033      <listitem>
3034       <para>
3035        Support 64-bit time zone data files (Heikki)
3036       </para>
3037
3038       <para>
3039        This adds support for daylight saving time (<acronym>DST</>)
3040        calculations beyond the year 2038.
3041       </para>
3042      </listitem>
3043
3044      <listitem>
3045       <para>
3046        Deprecate use of platform's <type>time_t</> data type (Tom)
3047       </para>
3048
3049       <para>
3050        Some platforms have migrated to 64-bit <type>time_t</>, some have
3051        not, and Windows can't make up its mind what it's doing.  Define
3052        <type>pg_time_t</> to have the same meaning as <type>time_t</>,
3053        but always be 64 bits (unless the platform has no 64-bit integer type),
3054        and use that type in all module APIs and on-disk data formats.
3055       </para>
3056      </listitem>
3057
3058      <listitem>
3059       <para>
3060        Fix bug in handling of the time zone database when cross-compiling
3061        (Richard Evans)
3062       </para>
3063      </listitem>
3064
3065      <listitem>
3066       <para>
3067        Link backend object files in one step, rather than in stages
3068        (Peter)
3069       </para>
3070      </listitem>
3071
3072      <listitem>
3073       <para>
3074        Improve <application>gettext</> support to allow better translation
3075        of plurals (Peter)
3076       </para>
3077      </listitem>
3078
3079      <listitem>
3080       <para>
3081        Add message translation support to the PL languages (Alvaro, Peter)
3082       </para>
3083      </listitem>
3084
3085      <listitem>
3086       <para>
3087        Add more <application>DTrace</> probes (Robert Lor)
3088       </para>
3089      </listitem>
3090
3091      <listitem>
3092       <para>
3093        Enable <application>DTrace</> support on <application>Mac OS X
3094        Leopard</> and other non-Solaris platforms (Robert Lor)
3095       </para>
3096      </listitem>
3097
3098      <listitem>
3099       <para>
3100        Simplify and standardize conversions between C strings and
3101        <type>text</> datums, by providing common functions for the purpose
3102        (Brendan Jurd, Tom)
3103       </para>
3104      </listitem>
3105
3106      <listitem>
3107       <para>
3108        Clean up the <filename>include/catalog/</> header files so that
3109        frontend programs can include them without including
3110        <filename>postgres.h</>
3111        (Zdenek Kotala)
3112       </para>
3113      </listitem>
3114
3115      <listitem>
3116       <para>
3117        Make <type>name</> char-aligned, and suppress zero-padding of
3118        <type>name</> entries in indexes (Tom)
3119       </para>
3120      </listitem>
3121
3122      <listitem>
3123       <para>
3124        Recover better if dynamically-loaded code executes <function>exit()</>
3125        (Tom)
3126       </para>
3127      </listitem>
3128
3129      <listitem>
3130       <para>
3131        Add a hook to let plug-ins monitor the executor (Itagaki
3132        Takahiro)
3133       </para>
3134      </listitem>
3135
3136      <listitem>
3137       <para>
3138        Add a hook to allow the planner's statistics lookup behavior to
3139        be overridden (Simon Riggs)
3140       </para>
3141      </listitem>
3142
3143      <listitem>
3144       <para>
3145        Add <function>shmem_startup_hook()</> for custom shared memory
3146        requirements (Tom)
3147       </para>
3148      </listitem>
3149
3150      <listitem>
3151       <para>
3152        Replace the index access method <function>amgetmulti</> entry point
3153        with <function>amgetbitmap</>, and extend the API for
3154        <function>amgettuple</> to support run-time determination of
3155        operator lossiness (Heikki, Tom, Teodor)
3156       </para>
3157
3158       <para>
3159        The API for GIN and GiST opclass <function>consistent</> functions
3160        has been extended as well.
3161       </para>
3162      </listitem>
3163
3164      <listitem>
3165       <para>
3166        Add support for partial-match searches in <acronym>GIN</> indexes
3167        (Teodor Sigaev, Oleg Bartunov)
3168       </para>
3169      </listitem>
3170
3171      <listitem>
3172       <para>
3173        Replace <structname>pg_class</> column <structfield>reltriggers</>
3174        with boolean <structfield>relhastriggers</> (Simon)
3175       </para>
3176
3177       <para>
3178        Also remove unused <structname>pg_class</> columns
3179        <structfield>relukeys</>, <structfield>relfkeys</>, and
3180        <structfield>relrefs</>.
3181       </para>
3182      </listitem>
3183
3184      <listitem>
3185       <para>
3186        Add a <structfield>relistemp</> column to <structname>pg_class</>
3187        to ease identification of temporary tables (Tom)
3188       </para>
3189      </listitem>
3190
3191      <listitem>
3192       <para>
3193        Move platform <acronym>FAQ</>s into the main documentation
3194        (Peter)
3195       </para>
3196      </listitem>
3197
3198      <listitem>
3199       <para>
3200        Prevent parser input files from being built with any conflicts
3201        (Peter)
3202       </para>
3203      </listitem>
3204
3205      <listitem>
3206       <para>
3207        Add support for the <literal>KOI8U</> (Ukrainian) encoding
3208        (Peter)
3209       </para>
3210      </listitem>
3211
3212      <listitem>
3213       <para>
3214        Add Japanese message translations (Japan PostgreSQL Users Group)
3215       </para>
3216
3217       <para>
3218        This used to be maintained as a separate project.
3219       </para>
3220      </listitem>
3221
3222      <listitem>
3223       <para>
3224        Fix problem when setting <varname>LC_MESSAGES</> on
3225        <application>MSVC</>-built systems (Hiroshi Inoue, Hiroshi
3226        Saito, Magnus)
3227       </para>
3228      </listitem>
3229
3230     </itemizedlist>
3231
3232    </sect3>
3233
3234    <sect3>
3235     <title>Contrib</title>
3236
3237     <itemizedlist>
3238
3239      <listitem>
3240       <para>
3241        Add <filename>contrib/auto_explain</> to automatically run
3242        <command>EXPLAIN</> on queries exceeding a specified duration
3243        (Itagaki Takahiro, Tom)
3244       </para>
3245      </listitem>
3246
3247      <listitem>
3248       <para>
3249        Add <filename>contrib/btree_gin</> to allow GIN indexes to
3250        handle more datatypes (Oleg, Teodor)
3251       </para>
3252      </listitem>
3253
3254      <listitem>
3255       <para>
3256        Add <filename>contrib/citext</> to provide a case-insensitive,
3257        multibyte-aware text data type (David Wheeler)
3258       </para>
3259      </listitem>
3260
3261      <listitem>
3262       <para>
3263        Add <filename>contrib/pg_stat_statements</> for server-wide
3264        tracking of statement execution statistics (Itagaki Takahiro)
3265       </para>
3266      </listitem>
3267
3268      <listitem>
3269       <para>
3270        Add duration and query mode options to <filename>contrib/pgbench</>
3271        (Itagaki Takahiro)
3272       </para>
3273      </listitem>
3274
3275      <listitem>
3276       <para>
3277        Make <filename>contrib/pgbench</> use table names
3278        <structname>pgbench_accounts</>, <structname>pgbench_branches</>,
3279        <structname>pgbench_history</>, and <structname>pgbench_tellers</>,
3280        rather than just <structname>accounts</>, <structname>branches</>,
3281        <structname>history</>, and <structname>tellers</> (Tom)
3282       </para>
3283
3284       <para>
3285        This is to reduce the risk of accidentally destroying real data
3286        by running <application>pgbench</>.
3287       </para>
3288      </listitem>
3289
3290      <listitem>
3291       <para>
3292        Fix <filename>contrib/pgstattuple</> to handle tables and
3293        indexes with over 2 billion pages (Tatsuhito Kasahara)
3294       </para>
3295      </listitem>
3296
3297      <listitem>
3298       <para>
3299        In <filename>contrib/fuzzystrmatch</>, add a version of the
3300        Levenshtein string-distance function that allows the user to
3301        specify the costs of insertion, deletion, and substitution
3302        (Volkan Yazici)
3303       </para>
3304      </listitem>
3305
3306      <listitem>
3307       <para>
3308        Make <filename>contrib/ltree</> support multibyte encodings
3309        (laser)
3310       </para>
3311      </listitem>
3312
3313      <listitem>
3314       <para>
3315        Enable <filename>contrib/dblink</> to use connection information
3316        stored in the SQL/MED catalogs (Joe Conway)
3317       </para>
3318      </listitem>
3319
3320      <listitem>
3321       <para>
3322        Improve <filename>contrib/dblink</>'s reporting of errors from
3323        the remote server (Joe Conway)
3324       </para>
3325      </listitem>
3326
3327      <listitem>
3328       <para>
3329        Make <filename>contrib/dblink</> set <varname>client_encoding</>
3330        to match the local database's encoding (Joe Conway)
3331       </para>
3332
3333       <para>
3334        This prevents encoding problems when communicating with a remote
3335        database that uses a different encoding.
3336       </para>
3337      </listitem>
3338
3339      <listitem>
3340       <para>
3341        Make sure <filename>contrib/dblink</> uses a password supplied
3342        by the user, and not accidentally taken from the server's
3343        <filename>.pgpass</> file (Joe Conway)
3344       </para>
3345
3346       <para>
3347        This is a minor security enhancement.
3348       </para>
3349      </listitem>
3350
3351      <listitem>
3352       <para>
3353        Add <function>fsm_page_contents()</>
3354        to <filename>contrib/pageinspect</> (Heikki)
3355       </para>
3356      </listitem>
3357
3358      <listitem>
3359       <para>
3360        Modify <function>get_raw_page()</> to support free space map
3361        (<filename>*_fsm</>) files.  Also update
3362        <filename>contrib/pg_freespacemap</>.
3363       </para>
3364      </listitem>
3365
3366      <listitem>
3367       <para>
3368        Add support for multibyte encodings to <filename>contrib/pg_trgm</>
3369        (Teodor)
3370       </para>
3371      </listitem>
3372
3373      <listitem>
3374       <para>
3375        Rewrite <filename>contrib/intagg</> to use new
3376        functions <function>array_agg()</> and <function>unnest()</>
3377        (Tom)
3378       </para>
3379      </listitem>
3380
3381      <listitem>
3382       <para>
3383        Make <filename>contrib/pg_standby</> recover all available WAL before
3384        failover (Fujii Masao, Simon, Heikki)
3385       </para>
3386
3387       <para>
3388        To make this work safely, you now need to set the new
3389        <literal>recovery_end_command</> option in <filename>recovery.conf</>
3390        to clean up the trigger file after failover. <application>pg_standby</>
3391        will no longer remove the trigger file itself.
3392       </para>
3393      </listitem>
3394
3395      <listitem>
3396       <para>
3397        <filename>contrib/pg_standby</>'s <option>-l</> option is now a no-op,
3398        because it is unsafe to use a symlink (Simon)
3399       </para>
3400      </listitem>
3401
3402     </itemizedlist>
3403
3404    </sect3>
3405   </sect2>
3406  </sect1>