OSDN Git Service

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