]> granicus.if.org Git - postgresql/blob - doc/src/sgml/release-9.2.sgml
5f4f4baff3e9f13b03c53b1a19b323ea44a5fd73
[postgresql] / doc / src / sgml / release-9.2.sgml
1 <!-- doc/src/sgml/release-9.2.sgml -->
2 <!-- See header comment in release.sgml about typical markup -->
3
4  <sect1 id="release-9-2-2">
5   <title>Release 9.2.2</title>
6
7   <note>
8   <title>Release Date</title>
9   <simpara>2012-12-06</simpara>
10   </note>
11
12   <para>
13    This release contains a variety of fixes from 9.2.1.
14    For information about new features in the 9.2 major release, see
15    <xref linkend="release-9-2">.
16   </para>
17
18   <sect2>
19    <title>Migration to Version 9.2.2</title>
20
21    <para>
22     A dump/restore is not required for those running 9.2.X.
23    </para>
24
25    <para>
26     However, you may need to perform <command>REINDEX</> operations to
27     correct problems in concurrently-built indexes, as described in the first
28     changelog item below.
29    </para>
30
31    <para>
32     Also, if you are upgrading from version 9.2.0,
33     see the release notes for 9.2.1.
34    </para>
35
36   </sect2>
37
38   <sect2>
39    <title>Changes</title>
40
41    <itemizedlist>
42
43     <listitem>
44      <para>
45       Fix multiple bugs associated with <command>CREATE/DROP INDEX
46       CONCURRENTLY</> (Andres Freund, Tom Lane, Simon Riggs, Pavan Deolasee)
47      </para>
48
49      <para>
50       An error introduced while adding <command>DROP INDEX CONCURRENTLY</>
51       allowed incorrect indexing decisions to be made during the initial
52       phase of <command>CREATE INDEX CONCURRENTLY</>; so that indexes built
53       by that command could be corrupt.  It is recommended that indexes
54       built in 9.2.X with <command>CREATE INDEX CONCURRENTLY</> be rebuilt
55       after applying this update.
56      </para>
57
58      <para>
59       In addition, fix <command>CREATE/DROP INDEX CONCURRENTLY</> to use
60       in-place updates when changing the state of an index's
61       <structname>pg_index</> row.  This prevents race conditions that could
62       cause concurrent sessions to miss updating the target index, thus
63       again resulting in corrupt concurrently-created indexes.
64      </para>
65
66      <para>
67       Also, fix various other operations to ensure that they ignore
68       invalid indexes resulting from a failed <command>CREATE INDEX
69       CONCURRENTLY</> command.  The most important of these is
70       <command>VACUUM</>, because an auto-vacuum could easily be launched
71       on the table before corrective action can be taken to fix or remove
72       the invalid index.
73      </para>
74
75      <para>
76       Also fix <command>DROP INDEX CONCURRENTLY</> to not disable
77       insertions into the target index until all queries using it are done.
78      </para>
79
80      <para>
81       Also fix misbehavior if <command>DROP INDEX CONCURRENTLY</> is
82       canceled: the previous coding could leave an un-droppable index behind.
83      </para>
84     </listitem>
85
86     <listitem>
87      <para>
88       Correct predicate locking for <command>DROP INDEX CONCURRENTLY</>
89       (Kevin Grittner)
90      </para>
91
92      <para>
93       Previously, SSI predicate locks were processed at the wrong time,
94       possibly leading to incorrect behavior of serializable transactions
95       executing in parallel with the <command>DROP</>.
96      </para>
97     </listitem>
98
99     <listitem>
100      <para>
101       Fix buffer locking during WAL replay (Tom Lane)
102      </para>
103
104      <para>
105       The WAL replay code was insufficiently careful about locking buffers
106       when replaying WAL records that affect more than one page.  This could
107       result in hot standby queries transiently seeing inconsistent states,
108       resulting in wrong answers or unexpected failures.
109      </para>
110     </listitem>
111
112     <listitem>
113      <para>
114       Fix an error in WAL generation logic for GIN indexes (Tom Lane)
115      </para>
116
117      <para>
118       This could result in index corruption, if a torn-page failure occurred.
119      </para>
120     </listitem>
121
122     <listitem>
123      <para>
124       Fix an error in WAL replay logic for SP-GiST indexes (Tom Lane)
125      </para>
126
127      <para>
128       This could result in index corruption after a crash, or on a standby
129       server.
130      </para>
131     </listitem>
132
133     <listitem>
134      <para>
135       Fix incorrect detection of end-of-base-backup location during WAL
136       recovery (Heikki Linnakangas)
137      </para>
138
139      <para>
140       This mistake allowed hot standby mode to start up before the database
141       reaches a consistent state.
142      </para>
143     </listitem>
144
145     <listitem>
146      <para>
147       Properly remove startup process's virtual XID lock when promoting a
148       hot standby server to normal running (Simon Riggs)
149      </para>
150
151      <para>
152       This oversight could prevent subsequent execution of certain
153       operations such as <command>CREATE INDEX CONCURRENTLY</>.
154      </para>
155     </listitem>
156
157     <listitem>
158      <para>
159       Avoid bogus <quote>out-of-sequence timeline ID</> errors in standby
160       mode (Heikki Linnakangas)
161      </para>
162     </listitem>
163
164     <listitem>
165      <para>
166       Prevent the postmaster from launching new child processes after it's
167       received a shutdown signal (Tom Lane)
168      </para>
169
170      <para>
171       This mistake could result in shutdown taking longer than it should, or
172       even never completing at all without additional user action.
173      </para>
174     </listitem>
175
176     <listitem>
177      <para>
178       Fix the syslogger process to not fail when
179       <varname>log_rotation_age</> exceeds 2^31 milliseconds (about 25 days)
180       (Tom Lane)
181      </para>
182     </listitem>
183
184     <listitem>
185      <para>
186       Fix <function>WaitLatch()</> to return promptly when the requested
187       timeout expires (Jeff Janes, Tom Lane)
188      </para>
189
190      <para>
191       With the previous coding, a steady stream of non-wait-terminating
192       interrupts could delay return from <function>WaitLatch()</>
193       indefinitely.  This has been shown to be a problem for the autovacuum
194       launcher process, and might cause trouble elsewhere as well.
195      </para>
196     </listitem>
197
198     <listitem>
199      <para>
200       Avoid corruption of internal hash tables when out of memory
201       (Hitoshi Harada)
202      </para>
203     </listitem>
204
205     <listitem>
206      <para>
207       Prevent file descriptors for dropped tables from being held open past
208       transaction end (Tom Lane)
209      </para>
210
211      <para>
212       This should reduce problems with long-since-dropped tables continuing
213       to occupy disk space.
214      </para>
215     </listitem>
216
217     <listitem>
218      <para>
219       Prevent database-wide crash and restart when a new child process is
220       unable to create a pipe for its latch (Tom Lane)
221      </para>
222
223      <para>
224       Although the new process must fail, there is no good reason to force a
225       database-wide restart, so avoid that.  This improves robustness when
226       the kernel is nearly out of file descriptors.
227      </para>
228     </listitem>
229
230     <listitem>
231      <para>
232       Avoid planner crash with joins to unflattened subqueries (Tom Lane)
233      </para>
234     </listitem>
235
236     <listitem>
237      <para>
238       Fix planning of non-strict equivalence clauses above outer joins
239       (Tom Lane)
240      </para>
241
242      <para>
243       The planner could derive incorrect constraints from a clause equating
244       a non-strict construct to something else, for example
245       <literal>WHERE COALESCE(foo, 0) = 0</>
246       when <literal>foo</> is coming from the nullable side of an outer join.
247       9.2 showed this type of error in more cases than previous releases,
248       but the basic bug has been there for a long time.
249      </para>
250     </listitem>
251
252     <listitem>
253      <para>
254       Fix <command>SELECT DISTINCT</> with index-optimized
255       <function>MIN</>/<function>MAX</> on an inheritance tree (Tom Lane)
256      </para>
257
258      <para>
259       The planner would fail with <quote>failed to re-find MinMaxAggInfo
260       record</> given this combination of factors.
261      </para>
262     </listitem>
263
264     <listitem>
265      <para>
266       Make sure the planner sees implicit and explicit casts as equivalent
267       for all purposes, except in the minority of cases where there's
268       actually a semantic difference (Tom Lane)
269      </para>
270     </listitem>
271
272     <listitem>
273      <para>
274       Include join clauses when considering whether partial indexes can be
275       used for a query (Tom Lane)
276      </para>
277
278      <para>
279       A strict join clause can be sufficient to establish an
280       <replaceable>x</> <literal>IS NOT NULL</> predicate, for example.
281       This fixes a planner regression in 9.2, since previous versions could
282       make comparable deductions.
283      </para>
284     </listitem>
285
286     <listitem>
287      <para>
288       Limit growth of planning time when there are many indexable join
289       clauses for the same index (Tom Lane)
290      </para>
291     </listitem>
292
293     <listitem>
294      <para>
295       Improve planner's ability to prove exclusion constraints from
296       equivalence classes (Tom Lane)
297      </para>
298     </listitem>
299
300     <listitem>
301      <para>
302       Fix partial-row matching in hashed subplans to handle cross-type cases
303       correctly (Tom Lane)
304      </para>
305
306      <para>
307       This affects multicolumn <literal>NOT IN</> subplans, such as
308       <literal>WHERE (a, b) NOT IN (SELECT x, y FROM ...)</>
309       when for instance <literal>b</> and <literal>y</> are <type>int4</>
310       and <type>int8</> respectively.  This mistake led to wrong answers
311       or crashes depending on the specific datatypes involved.
312      </para>
313     </listitem>
314
315     <listitem>
316      <para>
317       Fix btree mark/restore functions to handle array keys (Tom Lane)
318      </para>
319
320      <para>
321       This oversight could result in wrong answers from merge joins whose
322       inner side is an index scan using an
323       <literal><replaceable>indexed_column</> =
324       ANY(<replaceable>array</>)</literal> condition.
325      </para>
326     </listitem>
327
328     <listitem>
329      <para>
330       Revert patch for taking fewer snapshots (Tom Lane)
331      </para>
332
333      <para>
334       The 9.2 change to reduce the number of snapshots taken during query
335       execution led to some anomalous behaviors not seen in previous
336       releases, because execution would proceed with a snapshot acquired
337       before locking the tables used by the query.  Thus, for example,
338       a query would not be guaranteed to see updates committed by a
339       preceding transaction even if that transaction had exclusive lock.
340       We'll probably revisit this in future releases, but meanwhile put it
341       back the way it was before 9.2.
342      </para>
343     </listitem>
344
345     <listitem>
346      <para>
347       Acquire buffer lock when re-fetching the old tuple for an
348       <literal>AFTER ROW UPDATE/DELETE</> trigger (Andres Freund)
349      </para>
350
351      <para>
352       In very unusual circumstances, this oversight could result in passing
353       incorrect data to a trigger <literal>WHEN</> condition, or to the
354       precheck logic for a foreign-key enforcement trigger.  That could
355       result in a crash, or in an incorrect decision about whether to
356       fire the trigger.
357      </para>
358     </listitem>
359
360     <listitem>
361      <para>
362       Fix <command>ALTER COLUMN TYPE</> to handle inherited check
363       constraints properly (Pavan Deolasee)
364      </para>
365
366      <para>
367       This worked correctly in pre-8.4 releases, and now works correctly
368       in 8.4 and later.
369      </para>
370     </listitem>
371
372     <listitem>
373      <para>
374       Fix <command>ALTER EXTENSION SET SCHEMA</>'s failure  to move some
375       subsidiary objects into the new schema (&Aacute;lvaro Herrera, Dimitri
376       Fontaine)
377      </para>
378     </listitem>
379
380     <listitem>
381      <para>
382       Handle <command>CREATE TABLE AS EXECUTE</> correctly in extended query
383       protocol (Tom Lane)
384      </para>
385     </listitem>
386
387     <listitem>
388      <para>
389       Don't modify the input parse tree in <command>DROP RULE IF NOT
390       EXISTS</> and <command>DROP TRIGGER IF NOT EXISTS</> (Tom Lane)
391      </para>
392
393      <para>
394       This mistake would cause errors if a cached statement of one of these
395       types was re-executed.
396      </para>
397     </listitem>
398
399     <listitem>
400      <para>
401       Fix <command>REASSIGN OWNED</> to handle grants on tablespaces
402       (&Aacute;lvaro Herrera)
403      </para>
404     </listitem>
405
406     <listitem>
407      <para>
408       Ignore incorrect <structname>pg_attribute</> entries for system
409       columns for views (Tom Lane)
410      </para>
411
412      <para>
413       Views do not have any system columns.  However, we forgot to
414       remove such entries when converting a table to a view.  That's fixed
415       properly for 9.3 and later, but in previous branches we need to defend
416       against existing mis-converted views.
417      </para>
418     </listitem>
419
420     <listitem>
421      <para>
422       Fix rule printing to dump <literal>INSERT INTO <replaceable>table</>
423       DEFAULT VALUES</literal> correctly (Tom Lane)
424      </para>
425     </listitem>
426
427     <listitem>
428      <para>
429       Guard against stack overflow when there are too many
430       <literal>UNION</>/<literal>INTERSECT</>/<literal>EXCEPT</> clauses
431       in a query (Tom Lane)
432      </para>
433     </listitem>
434
435     <listitem>
436      <para>
437       Prevent platform-dependent failures when dividing the minimum possible
438       integer value by -1 (Xi Wang, Tom Lane)
439      </para>
440     </listitem>
441
442     <listitem>
443      <para>
444       Fix possible access past end of string in date parsing
445       (Hitoshi Harada)
446      </para>
447     </listitem>
448
449     <listitem>
450      <para>
451       Fix failure to advance XID epoch if XID wraparound happens during a
452       checkpoint and <varname>wal_level</> is <literal>hot_standby</>
453       (Tom Lane, Andres Freund)
454      </para>
455
456      <para>
457       While this mistake had no particular impact on
458       <productname>PostgreSQL</productname> itself, it was bad for
459       applications that rely on <function>txid_current()</> and related
460       functions: the TXID value would appear to go backwards.
461      </para>
462     </listitem>
463
464     <listitem>
465      <para>
466       Fix <function>pg_terminate_backend()</> and
467       <function>pg_cancel_backend()</> to not throw error for a non-existent
468       target process (Josh Kupershmidt)
469      </para>
470
471      <para>
472       This case already worked as intended when called by a superuser,
473       but not so much when called by ordinary users.
474      </para>
475     </listitem>
476
477     <listitem>
478      <para>
479       Fix display of
480       <structname>pg_stat_replication</>.<structfield>sync_state</> at a
481       page boundary (Kyotaro Horiguchi)
482      </para>
483     </listitem>
484
485     <listitem>
486      <para>
487       Produce an understandable error message if the length of the path name
488       for a Unix-domain socket exceeds the platform-specific limit
489       (Tom Lane, Andrew Dunstan)
490      </para>
491
492      <para>
493       Formerly, this would result in something quite unhelpful, such as
494       <quote>Non-recoverable failure in name resolution</>.
495      </para>
496     </listitem>
497
498     <listitem>
499      <para>
500       Fix memory leaks when sending composite column values to the client
501       (Tom Lane)
502      </para>
503     </listitem>
504
505     <listitem>
506      <para>
507       Save some cycles by not searching for subtransaction locks at commit
508       (Simon Riggs)
509      </para>
510
511      <para>
512       In a transaction holding many exclusive locks, this useless activity
513       could be quite costly.
514      </para>
515     </listitem>
516
517     <listitem>
518      <para>
519       Make <application>pg_ctl</> more robust about reading the
520       <filename>postmaster.pid</> file (Heikki Linnakangas)
521      </para>
522
523      <para>
524       This fixes race conditions and possible file descriptor leakage.
525      </para>
526     </listitem>
527
528     <listitem>
529      <para>
530       Fix possible crash in <application>psql</> if incorrectly-encoded data
531       is presented and the <varname>client_encoding</> setting is a
532       client-only encoding, such as SJIS (Jiang Guiqing)
533      </para>
534     </listitem>
535
536     <listitem>
537      <para>
538       Make <application>pg_dump</> dump <literal>SEQUENCE SET</> items in
539       the data not pre-data section of the archive (Tom Lane)
540      </para>
541
542      <para>
543       This fixes an undesirable inconsistency between the meanings of
544       <option>--data-only</> and <option>--section=data</>, and also fixes
545       dumping of sequences that are marked as extension configuration tables.
546      </para>
547     </listitem>
548
549     <listitem>
550      <para>
551       Fix <application>pg_dump</>'s handling of <command>DROP DATABASE</>
552       commands in <option>--clean</> mode (Guillaume Lelarge)
553      </para>
554
555      <para>
556       Beginning in 9.2.0, <literal>pg_dump --clean</> would issue a
557       <command>DROP DATABASE</> command, which was either useless or
558       dangerous depending on the usage scenario.  It no longer does that.
559       This change also fixes the combination of <option>--clean</> and
560       <option>--create</> to work sensibly, i.e., emit <command>DROP
561       DATABASE</> then <command>CREATE DATABASE</> before reconnecting to the
562       target database.
563      </para>
564     </listitem>
565
566     <listitem>
567      <para>
568       Fix <application>pg_dump</> for views with circular dependencies and
569       no relation options (Tom Lane)
570      </para>
571
572      <para>
573       The previous fix to dump relation options when a view is
574       involved in a circular dependency didn't work right for the case
575       that the view has no options; it emitted <literal>ALTER VIEW foo
576       SET ()</> which is invalid syntax.
577      </para>
578     </listitem>
579
580     <listitem>
581      <para>
582       Fix bugs in the <filename>restore.sql</> script emitted by
583       <application>pg_dump</> in <literal>tar</> output format (Tom Lane)
584      </para>
585
586      <para>
587       The script would fail outright on tables whose names include
588       upper-case characters.  Also, make the script capable of restoring
589       data in <option>--inserts</> mode as well as the regular COPY mode.
590      </para>
591     </listitem>
592
593     <listitem>
594      <para>
595       Fix <application>pg_restore</> to accept POSIX-conformant
596       <literal>tar</> files (Brian Weaver, Tom Lane)
597      </para>
598
599      <para>
600       The original coding of <application>pg_dump</>'s <literal>tar</>
601       output mode produced files that are not fully conformant with the
602       POSIX standard.  This has been corrected for version 9.3.  This
603       patch updates previous branches so that they will accept both the
604       incorrect and the corrected formats, in hopes of avoiding
605       compatibility problems when 9.3 comes out.
606      </para>
607     </listitem>
608
609     <listitem>
610      <para>
611       Fix <literal>tar</> files emitted by <application>pg_basebackup</> to
612       be POSIX conformant (Brian Weaver, Tom Lane)
613      </para>
614     </listitem>
615
616     <listitem>
617      <para>
618       Fix <application>pg_resetxlog</> to locate <filename>postmaster.pid</>
619       correctly when given a relative path to the data directory (Tom Lane)
620      </para>
621
622      <para>
623       This mistake could lead to <application>pg_resetxlog</> not noticing
624       that there is an active postmaster using the data directory.
625      </para>
626     </listitem>
627
628     <listitem>
629      <para>
630       Fix <application>libpq</>'s <function>lo_import()</> and
631       <function>lo_export()</> functions to report file I/O errors properly
632       (Tom Lane)
633      </para>
634     </listitem>
635
636     <listitem>
637      <para>
638       Fix <application>ecpg</>'s processing of nested structure pointer
639       variables (Muhammad Usama)
640      </para>
641     </listitem>
642
643     <listitem>
644      <para>
645       Fix <application>ecpg</>'s <function>ecpg_get_data</> function to
646       handle arrays properly (Michael Meskes)
647      </para>
648     </listitem>
649
650     <listitem>
651      <para>
652       Prevent <application>pg_upgrade</> from trying to process TOAST tables
653       for system catalogs (Bruce Momjian)
654      </para>
655
656      <para>
657       This fixes an error seen when the <literal>information_schema</> has
658       been dropped and recreated.  Other failures were also possible.
659      </para>
660     </listitem>
661
662     <listitem>
663      <para>
664       Improve <application>pg_upgrade</> performance by setting
665       <varname>synchronous_commit</> to <literal>off</> in the new cluster
666       (Bruce Momjian)
667      </para>
668     </listitem>
669
670     <listitem>
671      <para>
672       Make <filename>contrib/pageinspect</>'s btree page inspection
673       functions take buffer locks while examining pages (Tom Lane)
674      </para>
675     </listitem>
676
677     <listitem>
678      <para>
679       Work around unportable behavior of <literal>malloc(0)</> and
680       <literal>realloc(NULL, 0)</> (Tom Lane)
681      </para>
682
683      <para>
684       On platforms where these calls return <literal>NULL</>, some code
685       mistakenly thought that meant out-of-memory.
686       This is known to have broken <application>pg_dump</> for databases
687       containing no user-defined aggregates.  There might be other cases
688       as well.
689      </para>
690     </listitem>
691
692     <listitem>
693      <para>
694       Ensure that <literal>make install</> for an extension creates the
695       <filename>extension</> installation directory (C&eacute;dric Villemain)
696      </para>
697
698      <para>
699       Previously, this step was missed if <varname>MODULEDIR</> was set in
700       the extension's Makefile.
701      </para>
702     </listitem>
703
704     <listitem>
705      <para>
706       Fix <application>pgxs</> support for building loadable modules on AIX
707       (Tom Lane)
708      </para>
709
710      <para>
711       Building modules outside the original source tree didn't work on AIX.
712      </para>
713     </listitem>
714
715     <listitem>
716      <para>
717       Update time zone data files to <application>tzdata</> release 2012j
718       for DST law changes in Cuba, Israel, Jordan, Libya, Palestine, Western
719       Samoa, and portions of Brazil.
720      </para>
721     </listitem>
722
723    </itemizedlist>
724
725   </sect2>
726  </sect1>
727
728  <sect1 id="release-9-2-1">
729   <title>Release 9.2.1</title>
730
731   <note>
732   <title>Release Date</title>
733   <simpara>2012-09-24</simpara>
734   </note>
735
736   <para>
737    This release contains a variety of fixes from 9.2.0.
738    For information about new features in the 9.2 major release, see
739    <xref linkend="release-9-2">.
740   </para>
741
742   <sect2>
743    <title>Migration to Version 9.2.1</title>
744
745    <para>
746     A dump/restore is not required for those running 9.2.X.
747    </para>
748
749    <para>
750     However, you may need to perform <command>REINDEX</> and/or
751     <command>VACUUM</> operations to recover from the effects of the data
752     corruption bug described in the first changelog item below.
753    </para>
754
755   </sect2>
756
757   <sect2>
758    <title>Changes</title>
759
760    <itemizedlist>
761
762     <listitem>
763      <para>
764       Fix persistence marking of shared buffers during WAL replay
765       (Jeff Davis)
766      </para>
767
768      <para>
769       This mistake can result in buffers not being written out during
770       checkpoints, resulting in data corruption if the server later crashes
771       without ever having written those buffers.  Corruption can occur on
772       any server following crash recovery, but it is significantly more
773       likely to occur on standby slave servers since those perform much
774       more WAL replay.  There is a low probability of corruption of btree
775       and GIN indexes.  There is a much higher probability of corruption
776       of table <quote>visibility maps</>, which might lead to wrong answers
777       from index-only scans.  Table data proper cannot be corrupted by this
778       bug.
779      </para>
780
781      <para>
782       While no index corruption due to this bug is known to have occurred
783       in the field, as a precautionary measure it is recommended that
784       production installations <command>REINDEX</> all btree and GIN
785       indexes at a convenient time after upgrading to 9.2.1.
786      </para>
787
788      <para>
789       Also, it is recommended to perform a <command>VACUUM</> of all tables
790       while having <link
791       linkend="guc-vacuum-freeze-table-age"><varname>vacuum_freeze_table_age</></link>
792       set to zero.  This will fix any incorrect visibility map data.  <link
793       linkend="guc-vacuum-cost-delay"><varname>vacuum_cost_delay</></link>
794       can be adjusted to reduce the performance impact of vacuuming, while
795       causing it to take longer to finish.
796      </para>
797     </listitem>
798
799     <listitem>
800      <para>
801       Fix possible incorrect sorting of output from queries involving
802       <literal>WHERE <replaceable>indexed_column</> IN
803       (<replaceable>list_of_values</>)</literal> (Tom Lane)
804      </para>
805     </listitem>
806
807     <listitem>
808      <para>
809       Fix planner failure for queries involving <literal>GROUP BY</>
810       expressions along with window functions and aggregates (Tom Lane)
811      </para>
812     </listitem>
813
814     <listitem>
815      <para>
816       Fix planner's assignment of executor parameters (Tom Lane)
817      </para>
818
819      <para>
820       This error could result in wrong answers from queries that scan the
821       same <literal>WITH</> subquery multiple times.
822      </para>
823     </listitem>
824
825     <listitem>
826      <para>
827       Improve planner's handling of join conditions in index scans (Tom Lane)
828      </para>
829     </listitem>
830
831     <listitem>
832      <para>
833       Improve selectivity estimation for text search queries involving
834       prefixes, i.e. <replaceable>word</><literal>:*</> patterns  (Tom Lane)
835      </para>
836
837      <para>
838      </para>
839     </listitem>
840
841     <listitem>
842      <para>
843       Fix delayed recognition of permissions changes (Tom Lane)
844      </para>
845
846      <para>
847       A command that needed no locks other than ones its transaction already
848       had might fail to notice a concurrent <command>GRANT</> or
849       <command>REVOKE</> that committed since the start of its transaction.
850      </para>
851     </listitem>
852
853     <listitem>
854      <para>
855       Fix <command>ANALYZE</> to not fail when a column is a domain over an
856       array type (Tom Lane)
857      </para>
858     </listitem>
859
860     <listitem>
861      <para>
862       Prevent PL/Perl from crashing if a recursive PL/Perl function is
863       redefined while being executed (Tom Lane)
864      </para>
865     </listitem>
866
867     <listitem>
868      <para>
869       Work around possible misoptimization in PL/Perl (Tom Lane)
870      </para>
871
872      <para>
873       Some Linux distributions contain an incorrect version of
874       <filename>pthread.h</> that results in incorrect compiled code in
875       PL/Perl, leading to crashes if a PL/Perl function calls another one
876       that throws an error.
877      </para>
878     </listitem>
879
880     <listitem>
881      <para>
882       Remove unnecessary dependency on <application>pg_config</> from
883       <application>pg_upgrade</> (Peter Eisentraut)
884      </para>
885     </listitem>
886
887     <listitem>
888      <para>
889       Update time zone data files to <application>tzdata</> release 2012f
890       for DST law changes in Fiji
891      </para>
892     </listitem>
893
894    </itemizedlist>
895
896   </sect2>
897  </sect1>
898
899  <sect1 id="release-9-2">
900   <title>Release 9.2</title>
901
902   <note>
903    <title>Release Date</title>
904    <simpara>2012-09-10</simpara>
905   </note>
906
907   <sect2>
908    <title>Overview</title>
909
910    <para>
911     This release has been largely focused on performance improvements, though
912     new SQL features are not lacking.  Work also continues in the area of
913     replication support.  Major enhancements include:
914    </para>
915
916    <itemizedlist>
917
918     <!-- This list duplicates items below, but without authors or details-->
919
920       <listitem>
921        <para>
922         Allow queries to retrieve data only from indexes, avoiding heap
923         access (<firstterm>index-only scans</>)
924        </para>
925       </listitem>
926
927       <listitem>
928        <para>
929         Allow the planner to generate custom plans for specific parameter
930         values even when using prepared statements
931        </para>
932       </listitem>
933
934       <listitem>
935        <para>
936         Improve the planner's ability to use nested loops with inner
937         index scans
938        </para>
939       </listitem>
940
941       <listitem>
942        <para>
943         Allow streaming replication slaves to forward data to other slaves
944         (<link linkend="cascading-replication"><firstterm>cascading
945         replication</></link>)
946        </para>
947       </listitem>
948
949       <listitem>
950        <para>
951         Allow <link
952         linkend="app-pgbasebackup"><application>pg_basebackup</></link>
953         to make base backups from standby servers
954        </para>
955       </listitem>
956
957       <listitem>
958        <para>
959         Add a <link
960         linkend="app-pgreceivexlog"><application>pg_receivexlog</></link>
961         tool to archive WAL file changes as they are written
962        </para>
963       </listitem>
964
965       <listitem>
966        <para>
967         Add the <link linkend="SPGiST">SP-GiST</link> (Space-Partitioned
968         GiST) index access method
969        </para>
970       </listitem>
971
972       <listitem>
973        <para>
974         Add support for <link linkend="rangetypes">range data types</link>
975        </para>
976       </listitem>
977
978       <listitem>
979        <para>
980         Add a <link linkend="datatype-json"><type>JSON</type></link>
981         data type
982        </para>
983       </listitem>
984
985       <listitem>
986        <para>
987         Add a <link
988         linkend="SQL-CREATEVIEW"><literal>security_barrier</></link>
989         option for views
990        </para>
991       </listitem>
992
993       <listitem>
994        <para>
995         Allow <application>libpq</> connection strings to have the format of a
996         <link linkend="libpq-connstring"><acronym>URI</acronym></link>
997        </para>
998       </listitem>
999
1000       <listitem>
1001        <para>
1002         Add a <link linkend="libpq-single-row-mode">single-row processing
1003         mode</link> to <application>libpq</> for better handling of large
1004         result sets
1005        </para>
1006       </listitem>
1007
1008    </itemizedlist>
1009
1010    <para>
1011     The above items are explained in more detail in the sections below.
1012    </para>
1013
1014   </sect2>
1015
1016   <sect2>
1017
1018   <title>Migration to Version 9.2</title>
1019
1020    <para>
1021     A dump/restore using <application>pg_dump</application>, or use of
1022     <application>pg_upgrade</application>, is required for those wishing
1023     to migrate data from any previous release.
1024    </para>
1025
1026    <para>
1027     Version 9.2 contains a number of changes that may affect compatibility
1028     with previous releases.  Observe the following incompatibilities:
1029    </para>
1030
1031    <sect3>
1032     <title>System Catalogs</title>
1033
1034     <itemizedlist>
1035
1036       <listitem>
1037        <para>
1038         Remove the <structfield>spclocation</> field from <link
1039         linkend="catalog-pg-tablespace"><structname>pg_tablespace</></link>
1040         (Magnus Hagander)
1041        </para>
1042
1043        <para>
1044         This field was duplicative of the symbolic links that actually define
1045         tablespace locations, and thus risked errors of omission when moving
1046         a tablespace.  This change allows tablespace directories to be moved
1047         while the server is down, by manually adjusting the symbolic links.
1048         To replace this field, we have added <link
1049         linkend="functions-info-catalog-table"><function>pg_tablespace_location()</></link>
1050         to allow querying of the symbolic links.
1051        </para>
1052       </listitem>
1053
1054       <listitem>
1055        <para>
1056         Move <type>tsvector</> most-common-element statistics to new
1057         <link linkend="view-pg-stats"><structname>pg_stats</></link> columns
1058         (Alexander Korotkov)
1059        </para>
1060
1061        <para>
1062         Consult <structfield>most_common_elems</>
1063         and <structfield>most_common_elem_freqs</> for the data formerly
1064         available in <structfield>most_common_vals</>
1065         and <structfield>most_common_freqs</> for a <type>tsvector</> column.
1066        </para>
1067       </listitem>
1068
1069     </itemizedlist>
1070
1071    </sect3>
1072
1073    <sect3>
1074     <title>Functions</title>
1075
1076     <itemizedlist>
1077
1078       <listitem>
1079        <para>
1080         Remove <link linkend="hstore">hstore</link>'s <literal>=&gt;</>
1081         operator (Robert Haas)
1082        </para>
1083
1084        <para>
1085         Users should now use <function>hstore(text, text)</>.  Since
1086         <productname>PostgreSQL</productname> 9.0, a warning message has been
1087         emitted when an operator named <literal>=&gt;</> is created because
1088         the <acronym>SQL</acronym> standard reserves that token for
1089         another use.
1090        </para>
1091       </listitem>
1092
1093       <listitem>
1094        <para>
1095         Ensure that <link
1096         linkend="functions-xml-processing"><function>xpath()</></link>
1097         escapes special characters in string values (Florian Pflug)
1098        </para>
1099
1100        <para>
1101         Without this it is possible for the result not to be valid
1102         <acronym>XML</acronym>.
1103        </para>
1104       </listitem>
1105
1106       <listitem>
1107        <para>
1108         Make <link
1109         linkend="functions-admin-dbobject"><function>pg_relation_size()</></link>
1110         and friends return NULL if the object does not exist (Phil Sorber)
1111        </para>
1112
1113        <para>
1114         This prevents queries that call these functions from returning
1115         errors immediately after a concurrent <command>DROP</>.
1116        </para>
1117       </listitem>
1118
1119       <listitem>
1120        <para>
1121         Make <link
1122         linkend="functions-datetime-extract"><function>EXTRACT(EPOCH FROM
1123         <replaceable>timestamp without time zone</>)</function></link>
1124         measure the epoch from local midnight, not <acronym>UTC</acronym>
1125         midnight (Tom Lane)
1126        </para>
1127
1128        <para>
1129         This change reverts an ill-considered change made in release 7.3.
1130         Measuring from <acronym>UTC</acronym> midnight was inconsistent
1131         because it made the result dependent on the <link
1132         linkend="guc-timezone"><varname>timezone</></link> setting, which
1133         computations for <type>timestamp without time zone</> should not be.
1134         The previous behavior remains available by casting the input value
1135         to <type>timestamp with time zone</>.
1136        </para>
1137       </listitem>
1138
1139       <listitem>
1140        <para>
1141         Properly parse time strings with trailing <literal>yesterday</>,
1142         <literal>today</>, and <literal>tomorrow</> (Dean Rasheed)
1143        </para>
1144
1145        <para>
1146         Previously, <literal>SELECT '04:00:00 yesterday'::timestamp</literal>
1147         returned yesterday's date at midnight.
1148        </para>
1149       </listitem>
1150
1151       <listitem>
1152        <para>
1153         Fix <link
1154         linkend="functions-formatting"><function>to_date()</></link> and
1155         <function>to_timestamp()</> to wrap incomplete dates toward 2020
1156         (Bruce Momjian)
1157        </para>
1158
1159        <para>
1160         Previously, supplied years and year masks of less than four digits
1161         wrapped inconsistently.
1162        </para>
1163       </listitem>
1164
1165     </itemizedlist>
1166
1167    </sect3>
1168
1169    <sect3>
1170     <title>Object Modification</title>
1171
1172     <itemizedlist>
1173
1174       <listitem>
1175        <para>
1176         Prevent  <link linkend="SQL-ALTERDOMAIN"><command>ALTER
1177         DOMAIN</command></link> from working on non-domain types (Peter
1178         Eisentraut)
1179        </para>
1180
1181        <para>
1182         Owner and schema changes were previously possible on non-domain
1183         types.
1184        </para>
1185       </listitem>
1186
1187       <listitem>
1188        <para>
1189         No longer forcibly lowercase procedural language names in <link
1190         linkend="SQL-CREATEFUNCTION"><command>CREATE FUNCTION</></link>
1191         (Robert Haas)
1192        </para>
1193
1194        <para>
1195         While unquoted language identifiers are still lowercased, strings
1196         and quoted identifiers are no longer forcibly down-cased.
1197         Thus for example <literal>CREATE FUNCTION ... LANGUAGE 'C'</>
1198         will no longer work; it must be spelled <literal>'c'</>, or better
1199         omit the quotes.
1200        </para>
1201       </listitem>
1202
1203       <listitem>
1204        <para>
1205         Change system-generated names of foreign key enforcement triggers
1206         (Tom Lane)
1207        </para>
1208
1209        <para>
1210         This change ensures that the triggers fire in the correct order in
1211         some corner cases involving self-referential foreign key constraints.
1212        </para>
1213       </listitem>
1214
1215     </itemizedlist>
1216
1217    </sect3>
1218
1219    <sect3>
1220     <title>Command-Line Tools</title>
1221
1222     <itemizedlist>
1223
1224       <listitem>
1225        <para>
1226         Provide consistent backquote, variable
1227         expansion, and quoted substring behavior in <link
1228         linkend="APP-PSQL"><application>psql</></link> meta-command
1229         arguments (Tom Lane)
1230        </para>
1231
1232        <para>
1233         Previously, such references were treated oddly when not separated by
1234         whitespace from adjacent text.  For example <literal>'FOO'BAR</> was
1235         output as <literal>FOO BAR</> (unexpected insertion of a space) and
1236         <literal>FOO'BAR'BAZ</> was output unchanged (not removing the quotes
1237         as most would expect).
1238        </para>
1239       </listitem>
1240
1241       <listitem>
1242        <para>
1243         No longer treat <link
1244         linkend="APP-CLUSTERDB"><application>clusterdb</></link>
1245         table names as double-quoted; no longer treat <link
1246         linkend="APP-REINDEXDB"><application>reindexdb</></link> table
1247         and index names as double-quoted (Bruce Momjian)
1248        </para>
1249
1250        <para>
1251         Users must now include double-quotes in the command arguments if
1252         quoting is wanted.
1253        </para>
1254       </listitem>
1255
1256       <listitem>
1257        <para>
1258         <link linkend="APP-CREATEUSER"><application>createuser</></link>
1259         no longer prompts for option settings by default (Peter Eisentraut)
1260        </para>
1261
1262        <para>
1263         Use <option>--interactive</> to obtain the old behavior.
1264        </para>
1265       </listitem>
1266
1267       <listitem>
1268        <para>
1269         Disable prompting for the user name in <link
1270         linkend="APP-DROPUSER"><application>dropuser</></link> unless
1271         <option>--interactive</> is specified (Peter Eisentraut)
1272        </para>
1273       </listitem>
1274
1275     </itemizedlist>
1276
1277    </sect3>
1278
1279    <sect3>
1280     <title>Server Settings</title>
1281
1282     <itemizedlist>
1283
1284       <listitem>
1285        <para>
1286         Add server parameters for specifying the <link
1287         linkend="guc-ssl-ca-file">locations of server-side
1288         <acronym>SSL</acronym> files</link> (Peter Eisentraut)
1289        </para>
1290
1291        <para>
1292         This allows changing the names and locations of the files that were
1293         previously hard-coded as <filename>server.crt</>,
1294         <filename>server.key</>, <filename>root.crt</>, and
1295         <filename>root.crl</> in the data directory.
1296         <emphasis>The server will no longer examine <filename>root.crt</> or
1297         <filename>root.crl</> by default</emphasis>; to load these files, the
1298         associated parameters must be set to non-default values.
1299        </para>
1300       </listitem>
1301
1302       <listitem>
1303        <para>
1304         Remove the <varname>silent_mode</> parameter (Heikki Linnakangas)
1305        </para>
1306
1307        <para>
1308         Similar behavior can be obtained with <command>pg_ctl start
1309         -l postmaster.log</>.
1310        </para>
1311       </listitem>
1312
1313       <listitem>
1314        <para>
1315         Remove the <varname>wal_sender_delay</> parameter,
1316         as it is no longer needed (Tom Lane)
1317        </para>
1318       </listitem>
1319
1320       <listitem>
1321        <para>
1322         Remove the <varname>custom_variable_classes</> parameter (Tom Lane)
1323        </para>
1324
1325        <para>
1326         The checking provided by this setting was dubious.  Now any
1327         setting can be prefixed by any class name.
1328        </para>
1329       </listitem>
1330
1331     </itemizedlist>
1332    </sect3>
1333
1334    <sect3>
1335     <title>Monitoring</title>
1336
1337     <itemizedlist>
1338
1339       <listitem>
1340        <para>
1341         Rename <link
1342         linkend="monitoring-stats-views-table"><structname>pg_stat_activity</></link><structfield>.procpid</>
1343         to <structfield>pid</>, to match other system tables (Magnus Hagander)
1344        </para>
1345       </listitem>
1346
1347       <listitem>
1348        <para>
1349         Create a separate <structfield>pg_stat_activity</> column to
1350         report process state (Scott Mead, Magnus Hagander)
1351        </para>
1352
1353        <para>
1354         The previous <structfield>query</> and <structfield>query_start</>
1355         values now remain available for an idle session, allowing enhanced
1356         analysis.
1357        </para>
1358       </listitem>
1359
1360       <listitem>
1361        <para>
1362         Rename <structname>pg_stat_activity</>.<structfield>current_query</> to
1363         <structfield>query</> because it is not cleared when the query
1364         completes (Magnus Hagander)
1365        </para>
1366       </listitem>
1367
1368       <listitem>
1369        <para>
1370         Change all <acronym>SQL</acronym>-level statistics timing values
1371         to be <type>float8</> columns measured in milliseconds (Tom Lane)
1372        </para>
1373
1374        <para>
1375         This change eliminates the designed-in assumption that the values
1376         are accurate to microseconds and no more (since the <type>float8</>
1377         values can be fractional).
1378         The columns affected are
1379         <structname>pg_stat_user_functions</>.<structfield>total_time</>,
1380         <structname>pg_stat_user_functions</>.<structfield>self_time</>,
1381         <structname>pg_stat_xact_user_functions</>.<structfield>total_time</>,
1382         and
1383         <structname>pg_stat_xact_user_functions</>.<structfield>self_time</>.
1384         The statistics functions underlying these columns now also return
1385         <type>float8</> milliseconds, rather than <type>bigint</>
1386         microseconds.
1387         <filename>contrib/pg_stat_statements</>'
1388         <structfield>total_time</> column is now also measured in
1389         milliseconds.
1390        </para>
1391       </listitem>
1392
1393     </itemizedlist>
1394
1395    </sect3>
1396
1397   </sect2>
1398
1399   <sect2>
1400    <title>Changes</title>
1401
1402    <para>
1403     Below you will find a detailed account of the changes between
1404     <productname>PostgreSQL</productname> 9.2 and the previous major
1405     release.
1406    </para>
1407
1408    <sect3>
1409     <title>Server</title>
1410
1411     <sect4>
1412      <title>Performance</title>
1413
1414      <itemizedlist>
1415       <listitem>
1416        <para>
1417         Allow queries to retrieve data only from indexes, avoiding heap
1418         access (Robert Haas, Ibrar Ahmed, Heikki Linnakangas, Tom Lane)
1419        </para>
1420
1421        <para>
1422         This feature is often called <firstterm>index-only scans</>.
1423         Heap access can be skipped for heap pages containing only tuples that
1424         are visible to all sessions, as reported by the visibility map; so
1425         the benefit applies mainly to mostly-static data.  The visibility map
1426         was made crash-safe as a necessary part of implementing this feature.
1427        </para>
1428       </listitem>
1429
1430       <listitem>
1431        <para>
1432         Add the <link linkend="SPGiST">SP-GiST</link> (Space-Partitioned
1433         GiST) index access method (Teodor Sigaev, Oleg Bartunov, Tom
1434         Lane)
1435        </para>
1436
1437        <para>
1438         SP-GiST is comparable to GiST in flexibility, but supports
1439         unbalanced partitioned search structures rather than balanced
1440         trees.  For suitable problems, SP-GiST can be faster than GiST in both
1441         index build time and search time.
1442        </para>
1443       </listitem>
1444
1445       <listitem>
1446        <para>
1447         Allow group commit to work effectively under heavy load (Peter
1448         Geoghegan, Simon Riggs, Heikki Linnakangas)
1449        </para>
1450
1451        <para>
1452         Previously, batching of commits became ineffective as the write
1453         workload increased, because of internal lock contention.
1454        </para>
1455       </listitem>
1456
1457       <listitem>
1458        <para>
1459         Allow uncontended locks to be managed using a new
1460         fast-path lock mechanism (Robert Haas)
1461        </para>
1462       </listitem>
1463
1464       <listitem>
1465        <para>
1466         Reduce overhead of creating virtual transaction ID locks (Robert
1467         Haas)
1468        </para>
1469       </listitem>
1470
1471       <listitem>
1472        <para>
1473         Reduce the overhead of serializable isolation level locks (Dan
1474         Ports)
1475        </para>
1476       </listitem>
1477
1478       <listitem>
1479        <para>
1480         Improve PowerPC and Itanium spinlock performance (Manabu Ori,
1481         Robert Haas, Tom Lane)
1482        </para>
1483       </listitem>
1484
1485       <listitem>
1486        <para>
1487         Reduce overhead for shared invalidation cache messages (Robert
1488         Haas)
1489        </para>
1490       </listitem>
1491
1492       <listitem>
1493        <para>
1494         Move the frequently accessed members of the <structname>PGPROC</>
1495         shared memory array to a separate array (Pavan
1496         Deolasee, Heikki Linnakangas, Robert Haas)
1497        </para>
1498       </listitem>
1499
1500       <listitem>
1501        <para>
1502         Improve <command>COPY</command> performance by adding tuples to
1503         the heap in batches (Heikki Linnakangas)
1504        </para>
1505       </listitem>
1506
1507       <listitem>
1508        <para>
1509         Improve GiST index performance for geometric data types by producing
1510         better trees with less memory allocation overhead (Alexander Korotkov)
1511        </para>
1512       </listitem>
1513
1514       <listitem>
1515        <para>
1516         Improve GiST index build times (Alexander Korotkov, Heikki
1517         Linnakangas)
1518        </para>
1519       </listitem>
1520
1521       <listitem>
1522        <para>
1523         Allow hint bits to be set sooner for temporary and unlogged tables
1524         (Robert Haas)
1525        </para>
1526       </listitem>
1527
1528       <listitem>
1529        <para>
1530         Allow sorting to be performed by inlined,
1531         non-<acronym>SQL</acronym>-callable comparison functions (Peter
1532         Geoghegan, Robert Haas, Tom Lane)
1533        </para>
1534       </listitem>
1535
1536       <listitem>
1537        <para>
1538         Make the number of CLOG buffers scale based on <link
1539         linkend="guc-shared-buffers"><varname>shared_buffers</></link>
1540         (Robert Haas, Simon Riggs, Tom Lane)
1541        </para>
1542       </listitem>
1543
1544       <listitem>
1545        <para>
1546         Improve performance of buffer pool scans that occur when tables or
1547         databases are dropped (Jeff Janes, Simon Riggs)
1548        </para>
1549       </listitem>
1550
1551       <listitem>
1552        <para>
1553         Improve performance of checkpointer's fsync-request queue
1554         when many tables are being dropped or truncated (Tom Lane)
1555        </para>
1556       </listitem>
1557
1558       <listitem>
1559        <para>
1560         Pass the safe number of file descriptors to child processes on Windows
1561         (Heikki Linnakangas)
1562        </para>
1563
1564        <para>
1565         This allows Windows sessions to use more open file descriptors than
1566         before.
1567        </para>
1568       </listitem>
1569
1570      </itemizedlist>
1571
1572     </sect4>
1573
1574     <sect4>
1575      <title>Process Management</title>
1576
1577      <itemizedlist>
1578
1579       <listitem>
1580        <para>
1581         Create a dedicated background process to perform checkpoints (Simon
1582         Riggs)
1583        </para>
1584
1585        <para>
1586         Formerly the background writer did both dirty-page writing and
1587         checkpointing.  Separating this into two processes allows each goal
1588         to be accomplished more predictably.
1589        </para>
1590       </listitem>
1591
1592       <listitem>
1593        <para>
1594         Improve asynchronous commit behavior by waking the walwriter sooner
1595         (Simon Riggs)
1596        </para>
1597
1598        <para>
1599         Previously, only <link
1600         linkend="guc-wal-writer-delay"><varname>wal_writer_delay</></link>
1601         triggered <acronym>WAL</acronym> flushing to disk; now filling a
1602         <acronym>WAL</acronym> buffer also triggers <acronym>WAL</acronym>
1603         writes.
1604        </para>
1605       </listitem>
1606
1607       <listitem>
1608        <para>
1609         Allow the bgwriter, walwriter, checkpointer, statistics collector,
1610         log collector, and archiver background processes to sleep more
1611         efficiently during periods of inactivity (Peter Geoghegan, Tom Lane)
1612        </para>
1613
1614        <para>
1615         This series of changes reduces the frequency of process wake-ups when
1616         there is nothing to do, dramatically reducing power consumption on
1617         idle servers.
1618        </para>
1619       </listitem>
1620
1621      </itemizedlist>
1622
1623     </sect4>
1624
1625     <sect4>
1626      <title>Optimizer</title>
1627
1628      <itemizedlist>
1629
1630       <listitem>
1631        <para>
1632         Allow the planner to generate custom plans for specific parameter
1633         values even when using prepared statements
1634         (Tom Lane)
1635        </para>
1636
1637        <para>
1638         In the past, a prepared statement always had a single
1639         <quote>generic</> plan that was used for all parameter values, which
1640         was frequently much inferior to the plans used for non-prepared
1641         statements containing explicit constant values.  Now, the planner
1642         attempts to generate custom plans for specific parameter values.
1643         A generic plan will only be used after custom plans have repeatedly
1644         proven to provide no benefit.  This change should eliminate the
1645         performance penalties formerly seen from use of prepared statements
1646         (including non-dynamic statements in PL/pgSQL).
1647        </para>
1648       </listitem>
1649
1650       <listitem>
1651        <para>
1652         Improve the planner's ability to use nested loops with inner
1653         index scans (Tom Lane)
1654        </para>
1655
1656        <para>
1657         The new <quote>parameterized path</> mechanism allows inner
1658         index scans to use values from relations that are more than one join
1659         level up from the scan.  This can greatly improve performance in
1660         situations where semantic restrictions (such as outer joins) limit
1661         the allowed join orderings.
1662        </para>
1663       </listitem>
1664
1665       <listitem>
1666        <para>
1667         Improve the planning <acronym>API</acronym> for foreign data wrappers
1668         (Etsuro Fujita, Shigeru Hanada, Tom Lane)
1669        </para>
1670
1671        <para>
1672         Wrappers can now provide multiple access <quote>paths</> for their
1673         tables, allowing more flexibility in join planning.
1674        </para>
1675       </listitem>
1676
1677       <listitem>
1678        <para>
1679         Recognize self-contradictory restriction clauses for non-table
1680         relations (Tom Lane)
1681        </para>
1682
1683        <para>
1684         This check is only performed when <link
1685         linkend="guc-constraint-exclusion"><varname>constraint_exclusion</></link>
1686         is <literal>on</literal>.
1687        </para>
1688       </listitem>
1689
1690       <listitem>
1691        <para>
1692         Allow <literal>indexed_col op ANY(ARRAY[...])</> conditions to be
1693         used in plain index scans and index-only scans (Tom Lane)
1694        </para>
1695
1696        <para>
1697         Formerly such conditions could only be used in bitmap index scans.
1698        </para>
1699       </listitem>
1700
1701       <listitem>
1702        <para>
1703         Support <function>MIN</>/<function>MAX</> index optimizations on
1704         <type>boolean</type> columns (Marti Raudsepp)
1705        </para>
1706       </listitem>
1707
1708       <listitem>
1709        <para>
1710         Account for set-returning functions in <command>SELECT</> target
1711         lists when setting row count estimates (Tom Lane)
1712        </para>
1713       </listitem>
1714
1715       <listitem>
1716        <para>
1717         Fix planner to handle indexes with duplicated columns more reliably
1718         (Tom Lane)
1719        </para>
1720       </listitem>
1721
1722       <listitem>
1723        <para>
1724         Collect and use element-frequency statistics for arrays (Alexander
1725         Korotkov, Tom Lane)
1726        </para>
1727
1728        <para>
1729         This change improves selectivity estimation for the array
1730         <literal>&lt;@</literal>, <literal>&amp;&amp;</literal>, and
1731         <literal>@&gt;</literal> operators (array containment and overlaps).
1732        </para>
1733       </listitem>
1734
1735       <listitem>
1736        <para>
1737         Allow statistics to be collected for foreign tables
1738         (Etsuro Fujita)
1739        </para>
1740       </listitem>
1741
1742       <listitem>
1743        <para>
1744         Improve cost estimates for use of partial indexes (Tom Lane)
1745        </para>
1746       </listitem>
1747
1748       <listitem>
1749        <para>
1750         Improve the planner's ability to use statistics for columns
1751         referenced in subqueries (Tom Lane)
1752        </para>
1753       </listitem>
1754
1755       <listitem>
1756        <para>
1757         Improve statistical estimates for subqueries using
1758         <literal>DISTINCT</> (Tom Lane)
1759        </para>
1760       </listitem>
1761
1762      </itemizedlist>
1763
1764     </sect4>
1765
1766     <sect4>
1767      <title>Authentication</title>
1768
1769      <itemizedlist>
1770
1771       <listitem>
1772        <para>
1773         Do not treat role names and <literal>samerole</> specified in <link
1774         linkend="auth-pg-hba-conf"><filename>pg_hba.conf</filename></link>
1775         as automatically including superusers (Andrew Dunstan)
1776        </para>
1777
1778        <para>
1779         This makes it easier to use <literal>reject</> lines with group roles.
1780        </para>
1781       </listitem>
1782
1783       <listitem>
1784        <para>
1785         Adjust <filename>pg_hba.conf</filename> processing to handle token
1786         parsing more consistently (Brendan Jurd, &Aacute;lvaro Herrera)
1787        </para>
1788       </listitem>
1789
1790       <listitem>
1791        <para>
1792         Disallow empty <filename>pg_hba.conf</filename> files (Tom Lane)
1793        </para>
1794
1795        <para>
1796         This was done to more quickly detect misconfiguration.
1797        </para>
1798       </listitem>
1799
1800       <listitem>
1801        <para>
1802         Make superuser privilege imply replication privilege (Noah Misch)
1803        </para>
1804
1805        <para>
1806         This avoids the need to explicitly assign such privileges.
1807        </para>
1808       </listitem>
1809
1810      </itemizedlist>
1811
1812     </sect4>
1813
1814     <sect4>
1815      <title>Monitoring</title>
1816
1817      <itemizedlist>
1818
1819       <listitem>
1820        <para>
1821         Attempt to log the current query string during a backend crash
1822         (Marti Raudsepp)
1823        </para>
1824       </listitem>
1825
1826       <listitem>
1827        <para>
1828         Make logging of autovacuum I/O activity more verbose (Greg
1829         Smith, Noah Misch)
1830        </para>
1831
1832        <para>
1833         This logging is triggered by <link
1834         linkend="guc-log-autovacuum-min-duration"><varname>log_autovacuum_min_duration</></link>.
1835        </para>
1836       </listitem>
1837
1838       <listitem>
1839        <para>
1840         Make <acronym>WAL</acronym> replay report failures sooner
1841         (Fujii Masao)
1842        </para>
1843
1844        <para>
1845         There were some cases where failures were only reported once the
1846         server went into master mode.
1847        </para>
1848       </listitem>
1849
1850       <listitem>
1851        <para>
1852         Add <link
1853         linkend="functions-admin-backup"><function>pg_xlog_location_diff()</></link>
1854         to simplify WAL location comparisons (Euler Taveira de Oliveira)
1855        </para>
1856
1857        <para>
1858         This is useful for computing replication lag.
1859        </para>
1860       </listitem>
1861
1862       <listitem>
1863        <para>
1864         Support configurable event log application names on Windows
1865         (MauMau, Magnus Hagander)
1866        </para>
1867
1868        <para>
1869         This allows different instances to use the event log
1870         with different identifiers, by setting the <link
1871         linkend="guc-event-source"><varname>event_source</></link>
1872         server parameter, which is similar to how <link
1873         linkend="guc-syslog-ident"><varname>syslog_ident</></link> works.
1874        </para>
1875       </listitem>
1876
1877       <listitem>
1878        <para>
1879         Change <quote>unexpected EOF</> messages to <literal>DEBUG1</> level,
1880         except when there is an open transaction (Magnus Hagander)
1881        </para>
1882
1883        <para>
1884         This change reduces log chatter caused by applications that close
1885         database connections ungracefully.
1886        </para>
1887       </listitem>
1888
1889      </itemizedlist>
1890
1891     </sect4>
1892
1893     <sect4>
1894      <title>Statistical Views</title>
1895
1896      <itemizedlist>
1897
1898       <listitem>
1899        <para>
1900         Track temporary file sizes and file counts in the <link
1901         linkend="pg-stat-database-view"><structname>pg_stat_database</></link>
1902         system view (Tomas Vondra)
1903        </para>
1904       </listitem>
1905
1906       <listitem>
1907        <para>
1908         Add a deadlock counter to the <structname>pg_stat_database</>
1909         system view (Magnus Hagander)
1910        </para>
1911       </listitem>
1912
1913       <listitem>
1914        <para>
1915         Add a server parameter <link
1916         linkend="guc-track-io-timing"><varname>track_io_timing</></link>
1917         to track I/O timings (Ants Aasma, Robert Haas)
1918        </para>
1919       </listitem>
1920
1921       <listitem>
1922        <para>
1923         Report checkpoint timing information in <link
1924         linkend="pg-stat-bgwriter-view"><structname>pg_stat_bgwriter</></link>
1925         (Greg Smith, Peter Geoghegan)
1926        </para>
1927       </listitem>
1928
1929      </itemizedlist>
1930
1931     </sect4>
1932
1933     <sect4>
1934      <title>Server Settings</title>
1935
1936      <itemizedlist>
1937
1938       <listitem>
1939        <para>
1940         Silently ignore nonexistent schemas specified in <link
1941         linkend="guc-search-path"><varname>search_path</></link> (Tom Lane)
1942        </para>
1943
1944        <para>
1945         This makes it more convenient to use generic path settings, which
1946         might include some schemas that don't exist in all databases.
1947        </para>
1948       </listitem>
1949
1950       <listitem>
1951        <para>
1952         Allow superusers to set <link
1953         linkend="guc-deadlock-timeout"><varname>deadlock_timeout</></link>
1954         per-session, not just per-cluster (Noah Misch)
1955        </para>
1956
1957        <para>
1958         This allows <varname>deadlock_timeout</> to be reduced for
1959         transactions that are likely to be involved in a deadlock, thus
1960         detecting the failure more quickly.  Alternatively, increasing the
1961         value can be used to reduce the chances of a session being chosen for
1962         cancellation due to a deadlock.
1963        </para>
1964       </listitem>
1965
1966       <listitem>
1967        <para>
1968         Add a server parameter <link
1969         linkend="guc-temp-file-limit"><varname>temp_file_limit</></link>
1970         to constrain temporary file space usage per session (Mark Kirkwood)
1971        </para>
1972       </listitem>
1973
1974       <listitem>
1975        <para>
1976         Allow a superuser to <command>SET</command> an extension's
1977         superuser-only custom variable before loading the associated
1978         extension (Tom Lane)
1979        </para>
1980
1981        <para>
1982         The system now remembers whether a <command>SET</command> was
1983         performed by a superuser, so that proper privilege checking can be
1984         done when the extension is loaded.
1985        </para>
1986       </listitem>
1987
1988       <listitem>
1989        <para>
1990         Add <link linkend="app-postmaster">postmaster</link> <option>-C</>
1991         option to query configuration parameters (Bruce Momjian)
1992        </para>
1993
1994        <para>
1995         This allows <application>pg_ctl</> to better handle cases where
1996         <envar>PGDATA</> or <option>-D</> points to a configuration-only
1997         directory.
1998        </para>
1999       </listitem>
2000
2001       <listitem>
2002        <para>
2003         Replace an empty locale name with the implied value in
2004         <command>CREATE DATABASE</>
2005         (Tom Lane)
2006        </para>
2007
2008        <para>
2009         This prevents cases where
2010         <structname>pg_database</>.<structfield>datcollate</> or
2011         <structfield>datctype</> could be interpreted differently after a
2012         server restart.
2013        </para>
2014       </listitem>
2015
2016      </itemizedlist>
2017
2018      <sect5>
2019       <title><filename>postgresql.conf</filename></title>
2020
2021       <itemizedlist>
2022
2023       <listitem>
2024        <para>
2025         Allow multiple errors in <filename>postgresql.conf</filename>
2026         to be reported, rather than just the first one (Alexey Klyukin,
2027         Tom Lane)
2028        </para>
2029       </listitem>
2030
2031       <listitem>
2032        <para>
2033         Allow a reload of <filename>postgresql.conf</filename> to be
2034         processed by all sessions, even if there are some settings that
2035         are invalid for particular sessions (Alexey Klyukin)
2036        </para>
2037
2038        <para>
2039         Previously, such not-valid-within-session values would cause all
2040         setting changes to be ignored by that session.
2041        </para>
2042       </listitem>
2043
2044       <listitem>
2045        <para>
2046         Add an <literal>include_if_exists</> facility for configuration
2047         files (Greg Smith)
2048        </para>
2049
2050        <para>
2051         This works the same as <literal>include</>, except that an error
2052         is not thrown if the file is missing.
2053        </para>
2054       </listitem>
2055
2056       <listitem>
2057        <para>
2058         Identify the server time zone during <application>initdb</>, and set
2059         <filename>postgresql.conf</filename> entries
2060         <link linkend="guc-timezone"><varname>timezone</></link> and
2061         <link linkend="guc-log-timezone"><varname>log_timezone</></link>
2062         accordingly (Tom Lane)
2063        </para>
2064
2065        <para>
2066         This avoids expensive time zone probes during server start.
2067        </para>
2068       </listitem>
2069
2070       <listitem>
2071        <para>
2072         Fix <link
2073         linkend="view-pg-settings"><structname>pg_settings</></link> to
2074         report <filename>postgresql.conf</filename> line numbers on Windows
2075         (Tom Lane)
2076        </para>
2077       </listitem>
2078
2079       </itemizedlist>
2080
2081      </sect5>
2082
2083     </sect4>
2084
2085    </sect3>
2086
2087    <sect3>
2088     <title>Replication and Recovery</title>
2089
2090      <itemizedlist>
2091
2092       <listitem>
2093        <para>
2094         Allow streaming replication slaves to forward data to other slaves
2095         (<link linkend="cascading-replication"><firstterm>cascading
2096         replication</></link>) (Fujii Masao)
2097        </para>
2098
2099        <para>
2100         Previously, only the master server could supply streaming
2101         replication log files to standby servers.
2102        </para>
2103       </listitem>
2104
2105       <listitem>
2106        <para>
2107         Add new <link
2108         linkend="guc-synchronous-commit"><varname>synchronous_commit</></link>
2109         mode <literal>remote_write</> (Fujii Masao, Simon Riggs)
2110        </para>
2111
2112        <para>
2113         This mode waits for the standby server to write transaction data to
2114         its own operating system, but does not wait for the data to be
2115         flushed to the standby's disk.
2116        </para>
2117       </listitem>
2118
2119       <listitem>
2120        <para>
2121         Add a <link
2122         linkend="app-pgreceivexlog"><application>pg_receivexlog</></link>
2123         tool to archive WAL file changes as they are written, rather
2124         than waiting for completed WAL files (Magnus Hagander)
2125        </para>
2126       </listitem>
2127
2128       <listitem>
2129        <para>
2130         Allow <link
2131         linkend="app-pgbasebackup"><application>pg_basebackup</></link>
2132         to make base backups from standby servers (Jun Ishizuka, Fujii Masao)
2133        </para>
2134
2135        <para>
2136         This feature lets the work of making new base backups be off-loaded
2137         from the primary server.
2138        </para>
2139       </listitem>
2140
2141       <listitem>
2142        <para>
2143         Allow streaming of WAL files while <application>pg_basebackup</>
2144         is performing a backup (Magnus Hagander)
2145        </para>
2146
2147        <para>
2148         This allows passing of WAL files to the standby before they are
2149         discarded on the primary.
2150        </para>
2151       </listitem>
2152
2153      </itemizedlist>
2154
2155    </sect3>
2156
2157    <sect3>
2158     <title>Queries</title>
2159
2160      <itemizedlist>
2161
2162       <listitem>
2163        <para>
2164         Cancel the running query if the client gets disconnected
2165         (Florian Pflug)
2166        </para>
2167
2168        <para>
2169         If the backend detects loss of client connection during a query, it
2170         will now cancel the query rather than attempting to finish it.
2171        </para>
2172       </listitem>
2173
2174       <listitem>
2175        <para>
2176         Retain column names at run time for row expressions
2177         (Andrew Dunstan, Tom Lane)
2178        </para>
2179
2180        <para>
2181         This change allows better results when a row value is converted to
2182         <type>hstore</> or <type>json</> type: the fields of the resulting
2183         value will now have the expected names.
2184        </para>
2185       </listitem>
2186
2187       <listitem>
2188        <para>
2189         Improve column labels used for sub-<command>SELECT</> results
2190         (Marti Raudsepp)
2191        </para>
2192
2193        <para>
2194         Previously, the generic label <literal>?column?</> was used.
2195        </para>
2196       </listitem>
2197
2198       <listitem>
2199        <para>
2200         Improve heuristics for determining the types of unknown values
2201         (Tom Lane)
2202        </para>
2203
2204        <para>
2205         The longstanding rule that an unknown constant might have the
2206         same type as the value on the other side of the operator using it
2207         is now applied when considering polymorphic operators, not only
2208         for simple operator matches.
2209        </para>
2210       </listitem>
2211
2212       <listitem>
2213        <para>
2214         Warn about creating casts to or from domain types (Robert Haas)
2215        </para>
2216
2217        <para>
2218         Such casts have no effect.
2219        </para>
2220       </listitem>
2221
2222       <listitem>
2223        <para>
2224         When a row fails a <literal>CHECK</> or <literal>NOT NULL</>
2225         constraint, show the row's contents as error detail (Jan
2226         Kundr&aacute;t)
2227        </para>
2228
2229        <para>
2230         This should make it easier to identify which row is problematic
2231         when an insert or update is processing many rows.
2232        </para>
2233       </listitem>
2234
2235      </itemizedlist>
2236
2237    </sect3>
2238
2239    <sect3>
2240     <title>Object Manipulation</title>
2241
2242      <itemizedlist>
2243
2244       <listitem>
2245        <para>
2246         Provide more reliable operation during concurrent
2247         <acronym>DDL</acronym> (Robert Haas, Noah Misch)
2248        </para>
2249
2250        <para>
2251         This change adds locking that should eliminate <quote>cache lookup
2252         failed</> errors in many scenarios.  Also, it is no longer possible
2253         to add relations to a schema that is being concurrently dropped, a
2254         scenario that formerly led to inconsistent system catalog contents.
2255        </para>
2256       </listitem>
2257
2258       <listitem>
2259        <para>
2260         Add <literal>CONCURRENTLY</> option to <link
2261         linkend="SQL-DROPINDEX"><command>DROP INDEX</command></link>
2262         (Simon Riggs)
2263        </para>
2264
2265        <para>
2266         This allows index removal without blocking other sessions.
2267        </para>
2268       </listitem>
2269
2270       <listitem>
2271        <para>
2272         Allow foreign data wrappers to have per-column options (Shigeru Hanada)
2273        </para>
2274       </listitem>
2275
2276       <listitem>
2277        <para>
2278         Improve pretty-printing of view definitions (Andrew Dunstan)
2279        </para>
2280       </listitem>
2281
2282      </itemizedlist>
2283
2284     <sect4>
2285      <title>Constraints</title>
2286
2287      <itemizedlist>
2288
2289       <listitem>
2290        <para>
2291         Allow <link linkend="ddl-constraints"><literal>CHECK</></link>
2292         constraints to be declared <literal>NOT VALID</> (&Aacute;lvaro
2293         Herrera)
2294        </para>
2295
2296        <para>
2297         Adding a <literal>NOT VALID</> constraint does not cause the table to
2298         be scanned to verify that existing rows meet the constraint.
2299         Subsequently, newly added or updated rows are checked.
2300         Such constraints are ignored by the planner when considering
2301         <varname>constraint_exclusion</>, since it is not certain that all
2302         rows meet the constraint.
2303        </para>
2304
2305        <para>
2306         The new <command>ALTER TABLE VALIDATE</> command allows <literal>NOT
2307         VALID</> constraints to be checked for existing rows, after which
2308         they are converted into ordinary constraints.
2309        </para>
2310       </listitem>
2311
2312       <listitem>
2313        <para>
2314         Allow <literal>CHECK</> constraints to be declared <literal>NO
2315         INHERIT</> (Nikhil Sontakke, Alex Hunsaker, &Aacute;lvaro Herrera)
2316        </para>
2317
2318        <para>
2319         This makes them enforceable only on the parent table, not on
2320         child tables.
2321        </para>
2322       </listitem>
2323
2324       <listitem>
2325        <para>
2326         Add the ability to <link linkend="SQL-ALTERTABLE">rename</link>
2327         constraints (Peter Eisentraut)
2328        </para>
2329       </listitem>
2330      </itemizedlist>
2331
2332     </sect4>
2333
2334     <sect4>
2335      <title><command>ALTER</></title>
2336
2337      <itemizedlist>
2338
2339       <listitem>
2340        <para>
2341         Reduce need to rebuild tables and indexes for certain <link
2342         linkend="SQL-ALTERTABLE"><command>ALTER TABLE</command></link>
2343         ... <literal>ALTER COLUMN TYPE</> operations (Noah Misch)
2344        </para>
2345
2346        <para>
2347         Increasing the length limit for a <type>varchar</> or <type>varbit</>
2348         column, or removing the limit altogether, no longer requires a table
2349         rewrite.  Similarly, increasing the allowable precision of a
2350         <type>numeric</> column, or changing a column from constrained
2351         <type>numeric</> to unconstrained <type>numeric</>, no longer
2352         requires a table rewrite.  Table rewrites are also avoided in similar
2353         cases involving the <type>interval</>, <type>timestamp</>, and
2354         <type>timestamptz</> types.
2355        </para>
2356       </listitem>
2357
2358       <listitem>
2359        <para>
2360         Avoid having <link linkend="SQL-ALTERTABLE"><command>ALTER
2361         TABLE</command></link> revalidate foreign key constraints in some
2362         cases where it is not necessary (Noah Misch)
2363        </para>
2364       </listitem>
2365
2366       <listitem>
2367        <para>
2368         Add <literal>IF EXISTS</> options to some <command>ALTER</command>
2369         commands (Pavel Stehule)
2370        </para>
2371
2372        <para>
2373         For example, <command>ALTER FOREIGN TABLE IF EXISTS foo RENAME
2374         TO bar</command>.
2375        </para>
2376       </listitem>
2377
2378       <listitem>
2379        <para>
2380         Add <link linkend="SQL-ALTERFOREIGNDATAWRAPPER"><command>ALTER
2381         FOREIGN DATA WRAPPER</command></link> ... <literal>RENAME</>
2382         and <link linkend="SQL-ALTERSERVER"><command>ALTER
2383         SERVER</command></link> ... <literal>RENAME</> (Peter Eisentraut)
2384        </para>
2385       </listitem>
2386
2387       <listitem>
2388        <para>
2389         Add <link linkend="SQL-ALTERDOMAIN"><command>ALTER
2390         DOMAIN</command></link> ... <literal>RENAME</> (Peter Eisentraut)
2391        </para>
2392
2393        <para>
2394         You could already rename domains using <command>ALTER
2395         TYPE</command>.
2396        </para>
2397       </listitem>
2398
2399       <listitem>
2400        <para>
2401         Throw an error for <command>ALTER DOMAIN</command> ... <literal>DROP
2402         CONSTRAINT</> on a nonexistent constraint (Peter Eisentraut)
2403        </para>
2404
2405        <para>
2406         An <literal>IF EXISTS</> option has been added to provide the
2407         previous behavior.
2408        </para>
2409       </listitem>
2410
2411      </itemizedlist>
2412
2413     </sect4>
2414
2415     <sect4>
2416      <title><link linkend="SQL-CREATETABLE"><command>CREATE TABLE</></link></title>
2417
2418      <itemizedlist>
2419
2420       <listitem>
2421        <para>
2422         Allow <command>CREATE TABLE (LIKE ...)</command> from foreign
2423         tables, views, and composite types (Peter Eisentraut)
2424        </para>
2425
2426        <para>
2427         For example, this allows a table to be created whose schema matches a
2428         view.
2429        </para>
2430       </listitem>
2431
2432       <listitem>
2433        <para>
2434         Fix <command>CREATE TABLE (LIKE ...)</command> to avoid index name
2435         conflicts when copying index comments (Tom Lane)
2436        </para>
2437       </listitem>
2438
2439       <listitem>
2440        <para>
2441         Fix <command>CREATE TABLE</command> ... <literal>AS EXECUTE</>
2442         to handle <literal>WITH NO DATA</> and column name specifications
2443         (Tom Lane)
2444        </para>
2445       </listitem>
2446
2447      </itemizedlist>
2448
2449     </sect4>
2450
2451     <sect4>
2452      <title>Object Permissions</title>
2453
2454      <itemizedlist>
2455
2456       <listitem>
2457        <para>
2458         Add a <link
2459         linkend="SQL-CREATEVIEW"><literal>security_barrier</></link>
2460         option for views (KaiGai Kohei, Robert Haas)
2461        </para>
2462
2463        <para>
2464         This option prevents optimizations that might allow view-protected
2465         data to be exposed to users, for example pushing a clause involving
2466         an insecure function into the <literal>WHERE</> clause of the view.
2467         Such views can be expected to perform more poorly than ordinary
2468         views.
2469        </para>
2470       </listitem>
2471
2472       <listitem>
2473        <para>
2474         Add a new <link
2475         linkend="SQL-CREATEFUNCTION"><literal>LEAKPROOF</></link> function
2476         attribute to mark functions that can safely be pushed down
2477         into <literal>security_barrier</> views (KaiGai Kohei)
2478        </para>
2479       </listitem>
2480
2481       <listitem>
2482        <para>
2483         Add support for privileges on data types (Peter Eisentraut)
2484        </para>
2485
2486        <para>
2487         This adds support for the <acronym>SQL</>-conforming
2488         <literal>USAGE</> privilege on types and domains.  The intent is
2489         to be able to restrict which users can create dependencies on types,
2490         since such dependencies limit the owner's ability to alter the type.
2491        </para>
2492       </listitem>
2493
2494       <listitem>
2495        <para>
2496         Check for <command>INSERT</command> privileges in <command>SELECT
2497         INTO</command> / <command>CREATE TABLE AS</command> (KaiGai Kohei)
2498        </para>
2499
2500        <para>
2501         Because the object is being created by <command>SELECT INTO</command>
2502         or <command>CREATE TABLE AS</command>, the creator would ordinarily
2503         have insert permissions; but there are corner cases where this is not
2504         true, such as when <literal>ALTER DEFAULT PRIVILEGES</> has removed
2505         such permissions.
2506        </para>
2507       </listitem>
2508
2509      </itemizedlist>
2510
2511     </sect4>
2512
2513    </sect3>
2514
2515    <sect3>
2516     <title>Utility Operations</title>
2517
2518     <itemizedlist>
2519
2520       <listitem>
2521        <para>
2522         Allow <link linkend="SQL-VACUUM"><command>VACUUM</></link> to more
2523         easily skip pages that cannot be locked (Simon Riggs, Robert Haas)
2524        </para>
2525
2526        <para>
2527         This change should greatly reduce the incidence of <command>VACUUM</>
2528         getting <quote>stuck</> waiting for other sessions.
2529        </para>
2530       </listitem>
2531
2532       <listitem>
2533        <para>
2534         Make <link linkend="SQL-EXPLAIN"><command>EXPLAIN</></link>
2535         <literal>(BUFFERS)</> count blocks dirtied and written (Robert Haas)
2536        </para>
2537       </listitem>
2538
2539       <listitem>
2540        <para>
2541         Make <command>EXPLAIN ANALYZE</command> report the number of rows
2542         rejected by filter steps (Marko Tiikkaja)
2543        </para>
2544       </listitem>
2545
2546       <listitem>
2547        <para>
2548         Allow <command>EXPLAIN ANALYZE</command> to avoid timing overhead when
2549         time values are not wanted (Tomas Vondra)
2550        </para>
2551
2552        <para>
2553         This is accomplished by setting the new <literal>TIMING</> option to
2554         <literal>FALSE</>.
2555        </para>
2556       </listitem>
2557
2558     </itemizedlist>
2559
2560    </sect3>
2561
2562    <sect3>
2563     <title>Data Types</title>
2564
2565     <itemizedlist>
2566
2567       <listitem>
2568        <para>
2569         Add support for <link linkend="rangetypes">range data types</link>
2570         (Jeff Davis, Tom Lane, Alexander Korotkov)
2571        </para>
2572
2573        <para>
2574         A range data type stores a lower and upper bound belonging to its
2575         base data type.  It supports operations like contains, overlaps, and
2576         intersection.
2577        </para>
2578       </listitem>
2579
2580       <listitem>
2581        <para>
2582         Add a <link linkend="datatype-json"><type>JSON</type></link>
2583         data type (Robert Haas)
2584        </para>
2585
2586        <para>
2587         This type stores <acronym>JSON</acronym> (JavaScript Object Notation)
2588         data with proper validation.
2589        </para>
2590       </listitem>
2591
2592       <listitem>
2593        <para>
2594         Add <link
2595         linkend="functions-json"><function>array_to_json()</></link>
2596         and <function>row_to_json()</> (Andrew Dunstan)
2597        </para>
2598       </listitem>
2599
2600       <listitem>
2601        <para>
2602         Add a <link linkend="datatype-serial"><type>SMALLSERIAL</></link>
2603         data type (Mike Pultz)
2604        </para>
2605
2606        <para>
2607         This is like <type>SERIAL</>, except it stores the sequence in
2608         a two-byte integer column (<type>int2</>).
2609        </para>
2610       </listitem>
2611
2612       <listitem>
2613        <para>
2614         Allow <link linkend="SQL-CREATEDOMAIN">domains</link> to be
2615         declared <literal>NOT VALID</> (&Aacute;lvaro Herrera)
2616        </para>
2617
2618        <para>
2619         This option can be set at domain creation time, or via <command>ALTER
2620         DOMAIN</command> ... <literal>ADD CONSTRAINT</> ... <literal>NOT
2621         VALID</>. <command>ALTER DOMAIN</command> ... <literal>VALIDATE
2622         CONSTRAINT</> fully validates the constraint.
2623        </para>
2624       </listitem>
2625
2626       <listitem>
2627        <para>
2628         Support more locale-specific formatting options for the <link
2629         linkend="datatype-money"><type>money</></link> data type (Tom Lane)
2630        </para>
2631
2632        <para>
2633         Specifically, honor all the POSIX options for ordering of the value,
2634         sign, and currency symbol in monetary output.  Also, make sure that
2635         the thousands separator is only inserted to the left of the decimal
2636         point, as required by POSIX.
2637        </para>
2638       </listitem>
2639
2640       <listitem>
2641        <para>
2642         Add bitwise <quote>and</>, <quote>or</>, and <quote>not</>
2643         operators for the <type>macaddr</> data type (Brendan Jurd)
2644        </para>
2645       </listitem>
2646
2647       <listitem>
2648        <para>
2649         Allow <link
2650         linkend="functions-xml-processing"><function>xpath()</></link> to
2651         return a single-element <acronym>XML</acronym> array when supplied a
2652         scalar value (Florian Pflug)
2653        </para>
2654
2655        <para>
2656         Previously, it returned an empty array.  This change will also
2657         cause <function>xpath_exists()</> to return true, not false,
2658         for such expressions.
2659        </para>
2660       </listitem>
2661
2662       <listitem>
2663        <para>
2664         Improve <acronym>XML</acronym> error handling to be more robust
2665         (Florian Pflug)
2666        </para>
2667       </listitem>
2668
2669     </itemizedlist>
2670
2671    </sect3>
2672
2673    <sect3>
2674     <title>Functions</title>
2675
2676      <itemizedlist>
2677
2678       <listitem>
2679        <para>
2680         Allow non-superusers to use <link
2681         linkend="functions-admin-signal"><function>pg_cancel_backend()</></link>
2682         and <link
2683         linkend="functions-admin-signal"><function>pg_terminate_backend()</></link>
2684         on other sessions belonging to the same user
2685         (Magnus Hagander, Josh Kupershmidt, Dan Farina)
2686        </para>
2687
2688        <para>
2689         Previously only superusers were allowed to use these functions.
2690        </para>
2691       </listitem>
2692
2693       <listitem>
2694        <para>
2695         Allow importing and exporting of transaction snapshots (Joachim
2696         Wieland, Tom Lane)
2697        </para>
2698
2699        <para>
2700         This allows multiple transactions to share identical views of the
2701         database state.
2702         Snapshots are exported via <link
2703         linkend="functions-snapshot-synchronization"><function>pg_export_snapshot()</></link>
2704         and imported via <link linkend="SQL-SET-TRANSACTION"><command>SET
2705         TRANSACTION SNAPSHOT</command></link>.  Only snapshots from
2706         currently-running transactions can be imported.
2707        </para>
2708       </listitem>
2709
2710       <listitem>
2711        <para>
2712         Support <link
2713         linkend="functions-info-catalog-table"><literal>COLLATION
2714         FOR</></link> on expressions (Peter Eisentraut)
2715        </para>
2716
2717        <para>
2718         This returns a string representing the collation of the expression.
2719        </para>
2720       </listitem>
2721
2722       <listitem>
2723        <para>
2724         Add <link
2725         linkend="functions-info-schema-table"><function>pg_opfamily_is_visible()</></link>
2726         (Josh Kupershmidt)
2727        </para>
2728       </listitem>
2729
2730       <listitem>
2731        <para>
2732         Add a <type>numeric</> variant of <link
2733         linkend="functions-admin-dbsize"><function>pg_size_pretty()</></link>
2734         for use with <function>pg_xlog_location_diff()</> (Fujii Masao)
2735        </para>
2736       </listitem>
2737
2738       <listitem>
2739        <para>
2740         Add a <link
2741         linkend="functions-info-session-table"><function>pg_trigger_depth()</></link>
2742         function (Kevin Grittner)
2743        </para>
2744
2745        <para>
2746         This reports the current trigger call depth.
2747        </para>
2748       </listitem>
2749
2750       <listitem>
2751        <para>
2752         Allow <link
2753         linkend="functions-aggregate-table"><function>string_agg()</></link>
2754         to process <type>bytea</> values (Pavel Stehule)
2755        </para>
2756       </listitem>
2757
2758       <listitem>
2759        <para>
2760         Fix regular expressions in which a back-reference occurs within
2761         a larger quantified subexpression (Tom Lane)
2762        </para>
2763
2764        <para>
2765         For example, <literal>^(\w+)( \1)+$</>.  Previous releases did not
2766         check that the back-reference actually matched the first occurrence.
2767        </para>
2768       </listitem>
2769
2770      </itemizedlist>
2771
2772    </sect3>
2773
2774    <sect3>
2775     <title><link linkend="information-schema">Information Schema</link></title>
2776
2777      <itemizedlist>
2778
2779       <listitem>
2780        <para>
2781         Add information schema views
2782         <structname>role_udt_grants</>, <structname>udt_privileges</>,
2783         and <structname>user_defined_types</> (Peter Eisentraut)
2784        </para>
2785       </listitem>
2786
2787       <listitem>
2788        <para>
2789         Add composite-type attributes to the
2790         information schema <structname>element_types</> view
2791         (Peter Eisentraut)
2792        </para>
2793       </listitem>
2794
2795       <listitem>
2796        <para>
2797         Implement <structfield>interval_type</> columns in the information
2798         schema (Peter Eisentraut)
2799        </para>
2800
2801        <para>
2802         Formerly these columns read as nulls.
2803        </para>
2804       </listitem>
2805
2806       <listitem>
2807        <para>
2808         Implement collation-related columns in the information schema
2809         <structname>attributes</>, <structname>columns</>,
2810         <structname>domains</>, and <structname>element_types</>
2811         views (Peter Eisentraut)
2812        </para>
2813       </listitem>
2814
2815       <listitem>
2816        <para>
2817         Implement the <structfield>with_hierarchy</> column in the
2818         information schema <structname>table_privileges</> view (Peter
2819         Eisentraut)
2820        </para>
2821       </listitem>
2822
2823       <listitem>
2824        <para>
2825         Add display of sequence <literal>USAGE</> privileges to information
2826         schema (Peter Eisentraut)
2827        </para>
2828       </listitem>
2829
2830       <listitem>
2831        <para>
2832         Make the information schema show default privileges (Peter
2833         Eisentraut)
2834        </para>
2835
2836        <para>
2837         Previously, non-empty default permissions were not represented in the
2838         views.
2839        </para>
2840       </listitem>
2841
2842      </itemizedlist>
2843
2844    </sect3>
2845
2846    <sect3>
2847     <title>Server-Side Languages</title>
2848
2849     <sect4>
2850      <title><link linkend="plpgsql">PL/pgSQL</link> Server-Side Language</title>
2851
2852      <itemizedlist>
2853
2854       <listitem>
2855        <para>
2856         Allow the PL/pgSQL <command>OPEN</> cursor command to supply
2857         parameters by name (Yeb Havinga)
2858        </para>
2859       </listitem>
2860
2861       <listitem>
2862        <para>
2863         Add a <command>GET STACKED DIAGNOSTICS</command> PL/pgSQL command
2864         to retrieve exception info (Pavel Stehule)
2865        </para>
2866       </listitem>
2867
2868       <listitem>
2869        <para>
2870         Speed up PL/pgSQL array assignment by caching type information
2871         (Pavel Stehule)
2872        </para>
2873       </listitem>
2874
2875       <listitem>
2876        <para>
2877         Improve performance and memory consumption for long chains of
2878         <literal>ELSIF</> clauses (Tom Lane)
2879        </para>
2880       </listitem>
2881
2882       <listitem>
2883        <para>
2884         Output the function signature, not just the name, in PL/pgSQL
2885         error messages (Pavel Stehule)
2886        </para>
2887       </listitem>
2888
2889     </itemizedlist>
2890
2891     </sect4>
2892
2893     <sect4>
2894      <title><link linkend="plpython">PL/Python</link> Server-Side Language</title>
2895
2896      <itemizedlist>
2897
2898       <listitem>
2899        <para>
2900         Add PL/Python <acronym>SPI</acronym> cursor support (Jan
2901         Urbanski)
2902        </para>
2903
2904        <para>
2905         This allows PL/Python to read partial result sets.
2906        </para>
2907       </listitem>
2908
2909       <listitem>
2910        <para>
2911         Add result metadata functions to PL/Python (Peter Eisentraut)
2912        </para>
2913
2914        <para>
2915         Specifically, this adds result object functions
2916         <literal>.colnames</literal>, <literal>.coltypes</literal>, and
2917         <literal>.coltypmods</literal>.
2918        </para>
2919       </listitem>
2920
2921       <listitem>
2922        <para>
2923         Remove support for Python 2.2 (Peter Eisentraut)
2924        </para>
2925       </listitem>
2926
2927      </itemizedlist>
2928
2929     </sect4>
2930
2931     <sect4>
2932      <title><link linkend="xfunc-sql">SQL</link> Server-Side Language</title>
2933
2934      <itemizedlist>
2935       <listitem>
2936        <para>
2937         Allow <acronym>SQL</acronym>-language functions to reference
2938         parameters by name (Matthew Draper)
2939        </para>
2940
2941        <para>
2942         To use this, simply name the function arguments and then reference
2943         the argument names in the <acronym>SQL</acronym> function body.
2944        </para>
2945       </listitem>
2946
2947      </itemizedlist>
2948     </sect4>
2949
2950    </sect3>
2951
2952    <sect3>
2953     <title>Client Applications</title>
2954
2955     <itemizedlist>
2956
2957       <listitem>
2958        <para>
2959         Add <link linkend="APP-INITDB"><application>initdb</></link>
2960         options <option>--auth-local</> and <option>--auth-host</>
2961         (Peter Eisentraut)
2962        </para>
2963
2964        <para>
2965         This allows separate control of <literal>local</> and
2966         <literal>host</> <filename>pg_hba.conf</filename> authentication
2967         settings.  <option>--auth</> still controls both.
2968        </para>
2969       </listitem>
2970
2971       <listitem>
2972        <para>
2973         Add <option>--replication</>/<option>--no-replication</> flags to
2974         <link linkend="APP-CREATEUSER"><application>createuser</></link>
2975         to control replication permission (Fujii Masao)
2976        </para>
2977       </listitem>
2978
2979       <listitem>
2980        <para>
2981         Add the <option>--if-exists</> option to <link
2982         linkend="APP-DROPDB"><application>dropdb</></link> and <link
2983         linkend="APP-DROPUSER"><application>dropuser</></link> (Josh
2984         Kupershmidt)
2985        </para>
2986       </listitem>
2987
2988       <listitem>
2989        <para>
2990         Give command-line tools the ability to specify the name of the
2991         database to connect to, and fall back to <literal>template1</>
2992         if a <literal>postgres</> database connection fails (Robert Haas)
2993        </para>
2994       </listitem>
2995
2996     </itemizedlist>
2997
2998     <sect4>
2999      <title><link linkend="APP-PSQL"><application>psql</></link></title>
3000
3001      <itemizedlist>
3002
3003       <listitem>
3004        <para>
3005         Add a display mode to auto-expand output based on the
3006         display width (Peter Eisentraut)
3007        </para>
3008
3009        <para>
3010         This adds the <literal>auto</> option to the <command>\x</>
3011         command, which switches to the expanded mode when the normal
3012         output would be wider than the screen.
3013        </para>
3014       </listitem>
3015
3016       <listitem>
3017        <para>
3018         Allow inclusion of a script file that is named relative to the
3019         directory of the file from which it was invoked (Gurjeet Singh)
3020        </para>
3021
3022        <para>
3023         This is done with a new command <command>\ir</>.
3024        </para>
3025       </listitem>
3026
3027       <listitem>
3028        <para>
3029         Add support for non-<acronym>ASCII</acronym> characters in
3030         <application>psql</> variable names (Tom Lane)
3031        </para>
3032       </listitem>
3033
3034       <listitem>
3035        <para>
3036         Add support for major-version-specific <filename>.psqlrc</> files
3037         (Bruce Momjian)
3038        </para>
3039
3040        <para>
3041         <application>psql</> already supported minor-version-specific
3042         <filename>.psqlrc</> files.
3043        </para>
3044       </listitem>
3045
3046       <listitem>
3047        <para>
3048         Provide environment variable overrides for <application>psql</>
3049         history and startup file locations (Andrew Dunstan)
3050        </para>
3051
3052        <para>
3053         <envar>PSQL_HISTORY</envar> and <envar>PSQLRC</envar> now
3054         determine these file names if set.
3055        </para>
3056       </listitem>
3057
3058       <listitem>
3059        <para>
3060         Add a <command>\setenv</> command to modify
3061         the environment variables passed to child processes (Andrew Dunstan)
3062        </para>
3063       </listitem>
3064
3065       <listitem>
3066        <para>
3067         Name <application>psql</>'s temporary editor files with a
3068         <filename>.sql</> extension (Peter Eisentraut)
3069        </para>
3070
3071        <para>
3072         This allows extension-sensitive editors to select the right mode.
3073        </para>
3074       </listitem>
3075
3076       <listitem>
3077        <para>
3078         Allow <application>psql</> to use zero-byte field and record
3079         separators (Peter Eisentraut)
3080        </para>
3081
3082        <para>
3083         Various shell tools use zero-byte (NUL) separators,
3084         e.g. <application>find</>.
3085        </para>
3086       </listitem>
3087
3088       <listitem>
3089        <para>
3090         Make the <command>\timing</> option report times for
3091         failed queries (Magnus Hagander)
3092        </para>
3093
3094        <para>
3095         Previously times were reported only for successful queries.
3096        </para>
3097       </listitem>
3098
3099       <listitem>
3100        <para>
3101         Unify and tighten <application>psql</>'s treatment of <command>\copy</>
3102         and SQL <command>COPY</> (Noah Misch)
3103        </para>
3104
3105        <para>
3106         This fix makes failure behavior more predictable and honors
3107         <command>\set ON_ERROR_ROLLBACK</>.
3108        </para>
3109       </listitem>
3110
3111      </itemizedlist>
3112
3113     </sect4>
3114
3115     <sect4>
3116      <title>Informational Commands</title>
3117
3118      <itemizedlist>
3119       <listitem>
3120        <para>
3121         Make <command>\d</> on a sequence show the
3122         table/column name owning it (Magnus Hagander)
3123        </para>
3124       </listitem>
3125
3126       <listitem>
3127        <para>
3128         Show statistics target for columns in <command>\d+</> (Magnus
3129         Hagander)
3130        </para>
3131       </listitem>
3132
3133       <listitem>
3134        <para>
3135         Show role password expiration dates in <command>\du</>
3136         (Fabr&iacute;zio de Royes Mello)
3137        </para>
3138       </listitem>
3139
3140       <listitem>
3141        <para>
3142         Display comments for casts, conversions, domains, and languages
3143         (Josh Kupershmidt)
3144        </para>
3145
3146        <para>
3147         These are included in the output of <command>\dC+</>,
3148         <command>\dc+</>, <command>\dD+</>, and <command>\dL</> respectively.
3149        </para>
3150       </listitem>
3151
3152       <listitem>
3153        <para>
3154         Display comments for <acronym>SQL</acronym>/<acronym>MED</acronym>
3155         objects (Josh Kupershmidt)
3156        </para>
3157
3158        <para>
3159         These are included in the output of <command>\des+</>,
3160         <command>\det+</>, and <command>\dew+</> for foreign servers, foreign
3161         tables, and foreign data wrappers respectively.
3162        </para>
3163       </listitem>
3164
3165       <listitem>
3166        <para>
3167         Change <command>\dd</> to display comments only for object types
3168         without their own backslash command (Josh Kupershmidt)
3169        </para>
3170       </listitem>
3171
3172      </itemizedlist>
3173
3174     </sect4>
3175
3176     <sect4>
3177      <title>Tab Completion</title>
3178
3179      <itemizedlist>
3180
3181       <listitem>
3182        <para>
3183         In <application>psql</> tab completion, complete <acronym>SQL</>
3184         keywords in either upper or lower case according to the new <link
3185         linkend="APP-PSQL-variables"><literal>COMP_KEYWORD_CASE</></link>
3186         setting (Peter Eisentraut)
3187        </para>
3188       </listitem>
3189
3190       <listitem>
3191        <para>
3192         Add tab completion support for
3193         <command>EXECUTE</command> (Andreas Karlsson)
3194        </para>
3195       </listitem>
3196
3197       <listitem>
3198        <para>
3199         Allow tab completion of role references in
3200         <command>GRANT</command>/<command>REVOKE</command> (Peter
3201         Eisentraut)
3202        </para>
3203       </listitem>
3204
3205       <listitem>
3206        <para>
3207         Allow tab completion of file names to supply quotes, when necessary
3208         (Noah Misch)
3209        </para>
3210       </listitem>
3211
3212       <listitem>
3213        <para>
3214         Change tab completion support for
3215         <command>TABLE</command> to also include views (Magnus Hagander)
3216        </para>
3217       </listitem>
3218
3219      </itemizedlist>
3220
3221     </sect4>
3222
3223     <sect4>
3224      <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
3225
3226      <itemizedlist>
3227
3228       <listitem>
3229        <para>
3230         Add an <option>--exclude-table-data</> option to
3231         <application>pg_dump</> (Andrew Dunstan)
3232        </para>
3233
3234        <para>
3235         This allows dumping of a table's definition but not its data,
3236         on a per-table basis.
3237        </para>
3238       </listitem>
3239
3240       <listitem>
3241        <para>
3242         Add a <option>--section</> option to <application>pg_dump</>
3243         and <application>pg_restore</> (Andrew Dunstan)
3244        </para>
3245
3246        <para>
3247         Valid values are <literal>pre-data</>, <literal>data</>,
3248         and <literal>post-data</>. The option can be
3249         given more than once to select two or more sections.
3250        </para>
3251       </listitem>
3252
3253       <listitem>
3254        <para>
3255         Make <link
3256         linkend="APP-PG-DUMPALL"><application>pg_dumpall</></link> dump all
3257         roles first, then all configuration settings on roles (Phil Sorber)
3258        </para>
3259
3260        <para>
3261         This allows a role's configuration settings to mention other
3262         roles without generating an error.
3263        </para>
3264       </listitem>
3265
3266       <listitem>
3267        <para>
3268         Allow <application>pg_dumpall</> to avoid errors if the
3269         <literal>postgres</> database is missing in the new cluster
3270         (Robert Haas)
3271        </para>
3272       </listitem>
3273
3274       <listitem>
3275        <para>
3276         Dump foreign server user mappings in user name order (Peter
3277         Eisentraut)
3278        </para>
3279
3280        <para>
3281         This helps produce deterministic dump files.
3282        </para>
3283       </listitem>
3284
3285       <listitem>
3286        <para>
3287         Dump operators in a predictable order (Peter Eisentraut)
3288        </para>
3289       </listitem>
3290
3291       <listitem>
3292        <para>
3293         Tighten rules for when extension configuration tables are dumped
3294         by <application>pg_dump</> (Tom Lane)
3295        </para>
3296       </listitem>
3297
3298       <listitem>
3299        <para>
3300         Make <application>pg_dump</> emit more useful dependency
3301         information (Tom Lane)
3302        </para>
3303
3304        <para>
3305         The dependency links included in archive-format dumps were formerly
3306         of very limited use, because they frequently referenced objects that
3307         appeared nowhere in the dump.  Now they represent actual dependencies
3308         (possibly indirect) among the dumped objects.
3309        </para>
3310       </listitem>
3311
3312       <listitem>
3313        <para>
3314         Improve <application>pg_dump</>'s performance when dumping many
3315         database objects (Tom Lane)
3316        </para>
3317       </listitem>
3318
3319      </itemizedlist>
3320
3321     </sect4>
3322
3323    </sect3>
3324
3325     <sect3>
3326      <title><link linkend="libpq"><application>libpq</></link></title>
3327
3328      <itemizedlist>
3329
3330       <listitem>
3331        <para>
3332         Allow <application>libpq</> connection strings to have the format of a
3333         <link linkend="libpq-connstring"><acronym>URI</acronym></link>
3334         (Alexander Shulgin)
3335        </para>
3336
3337        <para>
3338         The syntax begins with <literal>postgres://</>.  This can allow
3339         applications to avoid implementing their own parser for URIs
3340         representing database connections.
3341        </para>
3342       </listitem>
3343
3344       <listitem>
3345        <para>
3346         Add a <link linkend="libpq-connect-sslcompression">connection
3347         option</link> to disable <acronym>SSL</acronym> compression
3348         (Laurenz Albe)
3349        </para>
3350
3351        <para>
3352         This can be used to remove the overhead of <acronym>SSL</acronym>
3353         compression on fast networks.
3354        </para>
3355       </listitem>
3356
3357       <listitem>
3358        <para>
3359         Add a <link linkend="libpq-single-row-mode">single-row processing
3360         mode</link> for better handling of large result sets
3361         (Kyotaro Horiguchi, Marko Kreen)
3362        </para>
3363
3364        <para>
3365         Previously, <application>libpq</> always collected the entire query
3366         result in memory before passing it back to the application.
3367        </para>
3368       </listitem>
3369
3370       <listitem>
3371        <para>
3372         Add <literal>const</> qualifiers to the declarations of the functions
3373         <function>PQconnectdbParams</>, <function>PQconnectStartParams</>,
3374         and <function>PQpingParams</> (Lionel Elie Mamane)
3375        </para>
3376       </listitem>
3377
3378       <listitem>
3379        <para>
3380         Allow the <filename>.pgpass</> file to include escaped characters
3381         in the password field (Robert Haas)
3382        </para>
3383       </listitem>
3384
3385       <listitem>
3386        <para>
3387         Make library functions use <function>abort()</> instead of
3388         <function>exit()</> when it is necessary to terminate the process
3389         (Peter Eisentraut)
3390        </para>
3391
3392        <para>
3393         This choice does not interfere with the normal exit codes used by the
3394         program, and generates a signal that can be caught by the caller.
3395        </para>
3396       </listitem>
3397
3398      </itemizedlist>
3399
3400    </sect3>
3401
3402    <sect3>
3403     <title>Source Code</title>
3404
3405      <itemizedlist>
3406
3407       <listitem>
3408        <para>
3409         Remove dead ports (Peter Eisentraut)
3410        </para>
3411
3412        <para>
3413         The following platforms are no longer supported: dgux,
3414         nextstep, sunos4, svr4, ultrix4, univel, bsdi.
3415        </para>
3416       </listitem>
3417
3418       <listitem>
3419        <para>
3420         Add support for building with <link linkend="install-windows">MS
3421         Visual Studio 2010</link> (Brar Piening)
3422        </para>
3423       </listitem>
3424
3425       <listitem>
3426        <para>
3427         Enable compiling with the MinGW-w64 32-bit compiler (Lars Kanis)
3428        </para>
3429       </listitem>
3430
3431       <listitem>
3432        <para>
3433         Install <filename>plpgsql.h</> into <filename>include/server</> during installation
3434         (Heikki Linnakangas)
3435        </para>
3436       </listitem>
3437
3438       <listitem>
3439        <para>
3440         Improve the latch facility to include detection of postmaster death
3441         (Peter Geoghegan, Heikki Linnakangas, Tom Lane)
3442        </para>
3443
3444        <para>
3445         This eliminates one of the main reasons that background processes
3446         formerly had to wake up to poll for events.
3447        </para>
3448       </listitem>
3449
3450       <listitem>
3451        <para>
3452         Use C flexible array members, where supported (Peter Eisentraut)
3453        </para>
3454       </listitem>
3455
3456       <listitem>
3457        <para>
3458         Improve the concurrent transaction regression tests
3459         (<application>isolationtester</>) (Noah Misch)
3460        </para>
3461       </listitem>
3462
3463       <listitem>
3464        <para>
3465         Modify <application>thread_test</> to create its test files in
3466         the current directory, rather than <filename>/tmp</> (Bruce Momjian)
3467        </para>
3468       </listitem>
3469
3470       <listitem>
3471        <para>
3472         Improve flex and bison warning and error reporting (Tom Lane)
3473        </para>
3474       </listitem>
3475
3476       <listitem>
3477        <para>
3478         Add memory barrier support (Robert Haas)
3479        </para>
3480
3481        <para>
3482         This is currently unused.
3483        </para>
3484       </listitem>
3485
3486       <listitem>
3487        <para>
3488         Modify pgindent to use a typedef file (Bruce Momjian)
3489        </para>
3490       </listitem>
3491
3492       <listitem>
3493        <para>
3494         Add a hook for processing messages due to be sent to the server
3495         log (Martin Pihlak)
3496        </para>
3497       </listitem>
3498
3499       <listitem>
3500        <para>
3501         Add object access hooks for <command>DROP</command> commands
3502         (KaiGai Kohei)
3503        </para>
3504       </listitem>
3505
3506       <listitem>
3507        <para>
3508         Centralize <command>DROP</command> handling for some object types
3509         (KaiGai Kohei)
3510        </para>
3511       </listitem>
3512
3513       <listitem>
3514        <para>
3515         Add a <application>pg_upgrade</> test suite (Peter Eisentraut)
3516        </para>
3517       </listitem>
3518
3519       <listitem>
3520        <para>
3521         Sync regular expression code with <acronym>TCL</acronym> 8.5.11
3522         and improve internal processing (Tom Lane)
3523        </para>
3524       </listitem>
3525
3526       <listitem>
3527        <para>
3528         Move <acronym>CRC</acronym> tables to libpgport, and provide them
3529         in a separate include file (Daniel Farina)
3530        </para>
3531       </listitem>
3532
3533       <listitem>
3534        <para>
3535         Add options to <application>git_changelog</> for use in major
3536         release note creation (Bruce Momjian)
3537        </para>
3538       </listitem>
3539
3540       <listitem>
3541        <para>
3542         Support Linux's <filename>/proc/self/oom_score_adj</> API (Tom Lane)
3543        </para>
3544       </listitem>
3545
3546      </itemizedlist>
3547
3548    </sect3>
3549
3550    <sect3>
3551     <title>Additional Modules</title>
3552
3553     <itemizedlist>
3554
3555       <listitem>
3556        <para>
3557         Improve efficiency of <link linkend="dblink">dblink</link> by using
3558         libpq's new single-row processing mode (Kyotaro Horiguchi, Marko
3559         Kreen)
3560        </para>
3561
3562        <para>
3563         This improvement does not apply to
3564         <function>dblink_send_query()</>/<function>dblink_get_result()</>.
3565        </para>
3566       </listitem>
3567
3568       <listitem>
3569        <para>
3570         Support <literal>force_not_null</> option in <link
3571         linkend="file-fdw">file_fdw</link> (Shigeru Hanada)
3572        </para>
3573       </listitem>
3574
3575       <listitem>
3576        <para>
3577         Implement dry-run mode for <link
3578         linkend="pgarchivecleanup"><application>pg_archivecleanup</></link>
3579         (Gabriele Bartolini)
3580        </para>
3581
3582        <para>
3583         This only outputs the names of files to be deleted.
3584        </para>
3585       </listitem>
3586
3587       <listitem>
3588        <para>
3589         Add new <link linkend="pgbench">pgbench</link> switches
3590         <option>--unlogged-tables</>, <option>--tablespace</>, and
3591         <option>--index-tablespace</> (Robert Haas)
3592        </para>
3593       </listitem>
3594
3595       <listitem>
3596        <para>
3597         Change <link
3598         linkend="pgtestfsync"><application>pg_test_fsync</></link> to test
3599         for a fixed amount of time, rather than a fixed number of cycles
3600         (Bruce Momjian)
3601        </para>
3602
3603        <para>
3604         The <option>-o</>/cycles option was removed, and
3605         <option>-s</>/seconds added.
3606        </para>
3607       </listitem>
3608
3609       <listitem>
3610        <para>
3611         Add a <link
3612         linkend="pgtesttiming"><application>pg_test_timing</></link>
3613         utility to measure clock monotonicity and timing overhead (Ants
3614         Aasma, Greg Smith)
3615        </para>
3616       </listitem>
3617
3618       <listitem>
3619        <para>
3620         Add a <link linkend="tcn">tcn</link> (triggered change notification)
3621         module to generate <command>NOTIFY</command> events on table changes
3622         (Kevin Grittner)
3623        </para>
3624       </listitem>
3625
3626     </itemizedlist>
3627
3628     <sect4>
3629      <title><link linkend="pgupgrade"><application>pg_upgrade</></link></title>
3630
3631      <itemizedlist>
3632
3633       <listitem>
3634        <para>
3635         Adjust <application>pg_upgrade</> environment variables (Bruce
3636         Momjian)
3637        </para>
3638
3639        <para>
3640         Rename data, bin, and port environment
3641         variables to begin with <literal>PG</>, and support
3642         <envar>PGPORTOLD</envar>/<envar>PGPORTNEW</envar>, to replace
3643         <envar>PGPORT</envar>.
3644        </para>
3645       </listitem>
3646
3647       <listitem>
3648        <para>
3649         Overhaul <application>pg_upgrade</> logging and failure reporting
3650         (Bruce Momjian)
3651        </para>
3652
3653        <para>
3654         Create four append-only log files, and delete them on success.
3655         Add <option>-r</>/<option>--retain</> option to unconditionally
3656         retain these files.  Also remove <application>pg_upgrade</> options
3657         <option>-g</>/<option>-G</>/<option>-l</> options as unnecessary,
3658         and tighten log file permissions.
3659        </para>
3660       </listitem>
3661
3662       <listitem>
3663        <para>
3664         Make <application>pg_upgrade</> create a script to incrementally
3665         generate more accurate optimizer statistics (Bruce Momjian)
3666        </para>
3667
3668        <para>
3669         This reduces the time needed to generate minimal cluster statistics
3670         after an upgrade.
3671        </para>
3672       </listitem>
3673
3674       <listitem>
3675        <para>
3676         Allow <application>pg_upgrade</> to upgrade an old cluster that
3677         does not have a <literal>postgres</> database (Bruce Momjian)
3678        </para>
3679       </listitem>
3680
3681       <listitem>
3682        <para>
3683         Allow <application>pg_upgrade</> to handle cases where some
3684         old or new databases are missing, as long as they are empty
3685         (Bruce Momjian)
3686        </para>
3687       </listitem>
3688
3689       <listitem>
3690        <para>
3691         Allow <application>pg_upgrade</> to handle configuration-only
3692         directory installations (Bruce Momjian)
3693        </para>
3694       </listitem>
3695
3696       <listitem>
3697        <para>
3698         In <application>pg_upgrade</>, add <option>-o</>/<option>-O</>
3699         options to pass parameters to the servers (Bruce Momjian)
3700        </para>
3701
3702        <para>
3703         This is useful for configuration-only directory installs.
3704        </para>
3705       </listitem>
3706
3707       <listitem>
3708        <para>
3709         Change <application>pg_upgrade</> to use port 50432 by default
3710         (Bruce Momjian)
3711        </para>
3712
3713        <para>
3714         This helps avoid unintended client connections during the upgrade.
3715        </para>
3716       </listitem>
3717
3718       <listitem>
3719        <para>
3720         Reduce cluster locking in <application>pg_upgrade</> (Bruce
3721         Momjian)
3722        </para>
3723
3724        <para>
3725         Specifically, only lock the old cluster if link mode is used,
3726         and do it right after the schema is restored.
3727        </para>
3728       </listitem>
3729
3730     </itemizedlist>
3731
3732     </sect4>
3733
3734     <sect4>
3735      <title><link linkend="pgstatstatements"><application>pg_stat_statements</></link></title>
3736
3737      <itemizedlist>
3738
3739       <listitem>
3740        <para>
3741         Allow <application>pg_stat_statements</> to aggregate similar
3742         queries via SQL text normalization (Peter Geoghegan, Tom Lane)
3743        </para>
3744
3745        <para>
3746         Users with applications that use non-parameterized SQL will now
3747         be able to monitor query performance without detailed log analysis.
3748        </para>
3749       </listitem>
3750
3751       <listitem>
3752        <para>
3753         Add dirtied and written block counts and read/write times to
3754         <application>pg_stat_statements</> (Robert Haas, Ants Aasma)
3755        </para>
3756       </listitem>
3757
3758       <listitem>
3759        <para>
3760         Prevent <application>pg_stat_statements</> from double-counting
3761         <command>PREPARE</command> and <command>EXECUTE</command> commands
3762         (Tom Lane)
3763        </para>
3764       </listitem>
3765
3766     </itemizedlist>
3767
3768     </sect4>
3769
3770     <sect4>
3771      <title><link linkend="sepgsql">sepgsql</link></title>
3772
3773      <itemizedlist>
3774       <listitem>
3775        <para>
3776         Support <literal>SECURITY LABEL</> on global objects (KaiGai
3777         Kohei, Robert Haas)
3778        </para>
3779
3780        <para>
3781         Specifically, add security labels to databases,
3782         tablespaces, and roles.
3783        </para>
3784       </listitem>
3785
3786       <listitem>
3787        <para>
3788         Allow sepgsql to honor database labels (KaiGai Kohei)
3789        </para>
3790       </listitem>
3791
3792       <listitem>
3793        <para>
3794         Perform sepgsql permission checks during the creation of various
3795         objects (KaiGai Kohei)
3796        </para>
3797       </listitem>
3798
3799       <listitem>
3800        <para>
3801         Add <function>sepgsql_setcon()</> and related functions to control
3802         the sepgsql security domain (KaiGai Kohei)
3803        </para>
3804       </listitem>
3805
3806       <listitem>
3807        <para>
3808         Add a user space access cache to sepgsql to improve performance
3809         (KaiGai Kohei)
3810        </para>
3811       </listitem>
3812
3813      </itemizedlist>
3814     </sect4>
3815
3816    </sect3>
3817
3818    <sect3>
3819     <title>Documentation</title>
3820
3821     <itemizedlist>
3822
3823       <listitem>
3824        <para>
3825         Add a rule to optionally build HTML documentation using the
3826         stylesheet from the website (Magnus Hagander)
3827        </para>
3828
3829        <para>
3830         Use <command>gmake STYLE=website draft</>.
3831        </para>
3832       </listitem>
3833
3834       <listitem>
3835        <para>
3836         Improve <command>EXPLAIN</command> documentation (Tom Lane)
3837        </para>
3838       </listitem>
3839
3840       <listitem>
3841        <para>
3842         Document that user/database names are preserved with double-quoting
3843         by command-line tools like <application>vacuumdb</>  (Bruce
3844         Momjian)
3845        </para>
3846       </listitem>
3847
3848       <listitem>
3849        <para>
3850         Document the actual string returned by the client for MD5
3851         authentication (Cyan Ogilvie)
3852        </para>
3853       </listitem>
3854
3855       <listitem>
3856        <para>
3857         Deprecate use of <literal>GLOBAL</> and <literal>LOCAL</> in
3858         <command>CREATE TEMP TABLE</> (Noah Misch)
3859        </para>
3860
3861        <para>
3862         <productname>PostgreSQL</> has long treated these keyword as no-ops,
3863         and continues to do so; but in future they might mean what the SQL
3864         standard says they mean, so applications should avoid using them.
3865        </para>
3866       </listitem>
3867
3868     </itemizedlist>
3869
3870    </sect3>
3871
3872   </sect2>
3873  </sect1>