]> granicus.if.org Git - postgresql/blob - doc/src/sgml/release-9.4.sgml
doc: improve ssl_ecdh_curve descriptions
[postgresql] / doc / src / sgml / release-9.4.sgml
1 <!-- doc/src/sgml/release-9.4.sgml -->
2 <!-- See header comment in release.sgml about typical markup -->
3
4  <sect1 id="release-9-4">
5   <title>Release 9.4</title>
6
7   <note>
8    <title>Release Date</title>
9    <simpara>2014-??-??</simpara>
10    <simpara>Current as of 2014-05-10</simpara>
11   </note>
12
13   <sect2>
14    <title>Overview</title>
15
16    <para>
17     Major enhancements in <productname>PostgreSQL</> 9.4 include:
18    </para>
19
20    <!-- This list duplicates items below, but without authors or details-->
21
22    <itemizedlist>
23
24      <listitem>
25       <para>
26        Allow materialized views to be refreshed without blocking reads
27       </para>
28      </listitem>
29
30      <listitem>
31       <para>
32        <link linkend="logicaldecoding">Logical decoding</link> allows database
33        changes to be streamed out in a customizable format
34       </para>
35      </listitem>
36
37      <listitem>
38       <para>
39         Allow <link linkend="bgworker">background workers</link>
40         to be dynamically registered, started and terminated
41       </para>
42      </listitem>
43
44      <listitem>
45       <para>
46        Add structured (non-text) data type (<link
47        linkend="datatype-json"><type>JSONB</></link>) for storing
48        <type>JSON</> data
49       </para>
50      </listitem>
51
52      <listitem>
53       <para>
54        Add <acronym>SQL</>-level command <link
55        linkend="SQL-ALTERSYSTEM"><command>ALTER SYSTEM</></link>
56        to edit the <filename>postgresql.conf</> configuration file
57       </para>
58      </listitem>
59
60      <listitem>
61       <para>
62        Reduce lock levels of some <link
63        linkend="SQL-ALTERTABLE"><command>ALTER TABLE</></link> commands
64       </para>
65      </listitem>
66
67    </itemizedlist>
68
69    <para>
70     The above items are explained in more detail in the sections below.
71    </para>
72
73   </sect2>
74
75   <sect2>
76
77   <title>Migration to Version 9.4</title>
78
79    <para>
80     A dump/restore using <link
81     linkend="APP-PG-DUMPALL"><application>pg_dumpall</></link>, or use
82     of <link linkend="pgupgrade"><application>pg_upgrade</></link>, is
83     required for those wishing to migrate data from any previous release.
84    </para>
85
86    <para>
87     Version 9.4 contains a number of changes that may affect compatibility
88     with previous releases.  Observe the following incompatibilities:
89    </para>
90
91    <itemizedlist>
92
93     <listitem>
94      <para>
95       Cause consecutive whitespace in <link
96       linkend="functions-formatting-table"><function>to_timestamp()</></link>
97       and <function>to_date()</> format strings to consume a corresponding
98       number of characters in the input string (whitespace or not), then
99       conditionally consume adjacent whitespace if not in <literal>FX</>
100       mode (Jeevan Chalke)
101      </para>
102
103      <para>
104       Previously consecutive whitespace characters in a non-<literal>FX</>
105       format string behaved like a single whitespace character and consumed
106       all adjacent whitespace in the input string.  For example, previously
107       format string space-space-space would consume only the first space in
108       ' 12', while it will now consume all three characters.
109      </para>
110     </listitem>
111
112     <listitem>
113      <para>
114       Tighten checks for multi-dimensional <link
115       linkend="arrays">array</link> input (Bruce Momjian)
116      </para>
117
118      <para>
119       Previously an input array string that started with a single-element
120       array dimension could later contain multi-dimensional segments,
121       e.g. <literal>'{{1}, {2,3}}'::int[]</>.
122      </para>
123     </listitem>
124
125     <listitem>
126      <para>
127       Change empty arrays returned by <application>intarray</> to be
128       zero-dimensional arrays (Bruce Momjian)
129      </para>
130
131      <para>
132       Previously, empty arrays were returned as one-dimensional empty arrays
133       whose text representation looked the same as zero-dimensional arrays
134       (<literal>{}</>).  <application>intarray</>'s behavior in this area
135       now matches the built-in array operators.
136      </para>
137     </listitem>
138
139     <listitem>
140      <para>
141       Disallow NULL <link
142       linkend="xfunc-sql-variadic-functions"><literal>VARIADIC</></link>
143       function arguments (Pavel Stehule)
144      </para>
145
146      <para>
147       Such arguments must be cast to an array data type.
148      </para>
149     </listitem>
150
151     <listitem>
152      <para>
153       <link linkend="SQL-SHOW"><command>SHOW TIME ZONE</></link> now
154       outputs constant time zone offsets in <acronym>POSIX</>-style zone
155       format (Tom Lane)
156      </para>
157
158      <para>
159       Previously it was returned in <link
160       linkend="datatype-interval-output"><type>INTERVAL</></link> format.
161       The new format can be passed to <command>SET TIME ZONE</>.
162      </para>
163     </listitem>
164
165     <listitem>
166      <para>
167       Rename <link linkend="SQL-EXPLAIN"><command>EXPLAIN
168       ANALYZE</></link>'s "total runtime" output to "execution time"
169       (Tom Lane)
170      </para>
171
172      <para>
173       This was required now that planning time is also reported.
174      </para>
175     </listitem>
176
177     <listitem>
178      <para>
179       Fix <link
180       linkend="textsearch-functions-table"><function>ts_rank_cd()</></link>
181       to ignore stripped lexemes (Alex Hill)
182      </para>
183
184      <para>
185       Previously stripped lexemes got a default location and could be
186       considered if mixed with non-stripped lexemes.
187      </para>
188     </listitem>
189
190     <listitem>
191      <para>
192       Prevent <link
193       linkend="ddl-constraints-check-constraints"><literal>CHECK</></link>
194       constraints from referencing system columns, except
195       <structfield>tableoid</> (Amit Kapila)
196      </para>
197
198      <para>
199       Restoring such check constraints will lead to restore errors.
200      </para>
201     </listitem>
202
203     <listitem>
204      <para>
205       Use the last specified <link
206       linkend="recovery-target"><varname>recovery_target</></link> if
207       multiple are specified (Heikki Linnakangas)
208      </para>
209     </listitem>
210
211     <listitem>
212      <para>
213       On Windows, automatically preserve quotes in command strings supplied
214       by the user (Heikki Linnakangas)
215      </para>
216
217      <para>
218       User commands that did their own quote preservation might need
219       adjustment, e.g.  <link
220       linkend="guc-archive-command">archive_command</link>, <link
221       linkend="restore-command">restore_command</link>, <command>COPY TO/FROM
222       PROGRAM</>.
223      </para>
224     </listitem>
225
226     <listitem>
227      <para>
228       Remove system column <link
229       linkend="catalog-pg-class"><structfield>pg_class.reltoastidxid</></link>
230       (Michael Paquier)
231      </para>
232     </listitem>
233
234     <listitem>
235      <para>
236       Remove support for native <application>krb5</> authentication
237       (Magnus Hagander)
238      </para>
239
240      <para>
241       The proper way to use <application>Kerberos</> authentication is
242       with <acronym>GSSAPI</>.
243      </para>
244     </listitem>
245
246     <listitem>
247      <para>
248       Handle domains over arrays like plain arrays in PL/Python
249       (Rodolfo Campero)
250      </para>
251
252      <para>
253       Previously they were treated as strings.
254      </para>
255     </listitem>
256
257     <listitem>
258      <para>
259       Have libpq's <link
260       linkend="libpq-pqconnectdbparams"><function>PQconnectdbParams()</></link>
261       and <link
262       linkend="libpq-pqpingparams"><function>PQpingParams()</></link>
263       functions process zero-length strings as defaults (Adrian
264       Vondendriesch)
265      </para>
266
267      <para>
268       Previously, these functions treated zero-length string values as
269       defaults only in some cases.
270      </para>
271     </listitem>
272
273     <listitem>
274      <para>
275       Remove system column <link
276       linkend="catalog-pg-rewrite"><structfield>pg_rewrite.ev_attr</></link>
277       (Kevin Grittner)
278      </para>
279
280      <para>
281       Per-column rules have not been supported since
282       <application>PostgreSQL</> 7.3.
283      </para>
284     </listitem>
285
286     <listitem>
287      <para>
288       <link linkend="pgupgrade"><application>pg_upgrade</></link> now
289       uses <option>-U</> to specify the user name (Bruce Momjian)
290      </para>
291
292      <para>
293       Previously <option>-u</> was used to specify the user name.
294       Also spell the long option as <option>--username</>, again for
295       consistency with other tools.
296      </para>
297     </listitem>
298
299     <listitem>
300      <para>
301       The maximum number of <link linkend="bgworker">background workers</link>
302       that can be registered
303       by <function>RegisterBackgroundWorker()</function> is now limited to
304       <link linkend="guc-max-worker-processes"><varname>max_worker_processes</></link>
305      </para>
306     </listitem>
307
308     <listitem>
309      <para>
310       <command>DISCARD ALL</> now also discards sequence state.
311      </para>
312     </listitem>
313
314    </itemizedlist>
315
316   </sect2>
317
318   <sect2>
319    <title>Changes</title>
320
321    <para>
322     Below you will find a detailed account of the changes between
323     <productname>PostgreSQL</productname> 9.4 and the previous major
324     release.
325    </para>
326
327    <sect3>
328     <title>Server</title>
329
330      <itemizedlist>
331
332       <listitem>
333        <para>
334         Have <link linkend="SQL-VACUUM"><command>VACUUM</></link> properly
335         report dead but not removable rows to the statistics collector
336         (Hari Babu)
337        </para>
338
339        <para>
340         Previously these were reported as live rows.
341        </para>
342       </listitem>
343       <listitem>
344        <para>
345         Allow <link linkend="bgworker">background workers</link> to be
346         dynamically registered, started and terminated (Robert Haas)
347        </para>
348
349        <para>
350         <function>worker_spi_launch()</> in <application>worker_spi</>
351         shows an example of its use.
352        </para>
353       </listitem>
354
355       <listitem>
356        <para>
357         Allow dynamic allocation of shared memory segments (Robert Haas,
358         Amit Kapila)
359        </para>
360
361        <para>
362         This is illustrated in <link
363         linkend="test-shm-mq"><application>test_shm_mq</></link>.
364        </para>
365       </listitem>
366
367       <listitem>
368        <para>
369         Improve <acronym>SSL</> renegotiation handling (&Aacute;lvaro
370         Herrera)
371        </para>
372       </listitem>
373
374       <listitem>
375        <para>
376         During immediate shutdown send uncatchable termination signals
377         to child processes that have not already shutdown (MauMau,
378         &Aacute;lvaro Herrera)
379        </para>
380
381        <para>
382         This reduces the likelihood of orphaned child processes after
383         <link linkend="app-postmaster"><application>postmaster</></link>
384         shutdown.
385        </para>
386       </listitem>
387
388       <listitem>
389        <para>
390         Improve randomness of the database system identifier (Tom Lane)
391        </para>
392       </listitem>
393
394      </itemizedlist>
395
396     <sect4>
397      <title>Indexes</title>
398
399      <itemizedlist>
400
401       <listitem>
402        <para>
403         Improve speed of multi-key <link
404         linkend="GIN"><acronym>GIN</></link> lookups (Alexander Korotkov,
405         Heikki Linnakangas)
406        </para>
407       </listitem>
408
409       <listitem>
410        <para>
411         Reduce <link linkend="GIN"><acronym>GIN</></link> index size
412         (Alexander Korotkov, Heikki Linnakangas)
413        </para>
414
415        <para>
416         Indexes upgraded via <link
417         linkend="pgupgrade"><application>pg_upgrade</></link> will work
418         fine but will use the old larger <acronym>GIN</> format; <link
419         linkend="SQL-REINDEX"><command>REINDEX</></link> will recreate
420         the index in the new format.
421        </para>
422       </listitem>
423
424       <listitem>
425        <para>
426         Add <link linkend="GiST"><acronym>GiST</></link> index support
427         for <link linkend="datatype-inet"><type>INET</></link> and
428         <link linkend="datatype-cidr"><type>CIDR</></link> data types
429         (Emre Hasegeli)
430        </para>
431
432        <para>
433         Such indexes improve <link
434         linkend="cidr-inet-operators-table">subnet</link> and supernet
435         lookups and ordering comparisons.
436        </para>
437       </listitem>
438
439       <listitem>
440        <para>
441         Fix race condition in B-tree page deletion (Heikki Linnakangas)
442        </para>
443       </listitem>
444
445       <listitem>
446        <para>
447         Make the handling of interrupted B-tree page splits more robust
448         (Heikki Linnakangas)
449        </para>
450       </listitem>
451
452      </itemizedlist>
453
454     </sect4>
455
456     <sect4>
457      <title>General Performance</title>
458
459      <itemizedlist>
460
461       <listitem>
462        <para>
463         Allow multiple backends to simultaneously insert into <link
464         linkend="wal"><acronym>WAL</></link> buffers (Heikki Linnakangas)
465        </para>
466
467        <para>
468         This improves parallel write performance.
469        </para>
470       </listitem>
471
472       <listitem>
473        <para>
474         Conditionally write only the modified portion of updated rows to
475         <link linkend="wal"><acronym>WAL</></link> (Amit Kapila)
476        </para>
477       </listitem>
478
479       <listitem>
480        <para>
481         Improve performance of <link
482         linkend="syntax-window-functions"><literal>WINDOW</></link>
483         aggregate functions (David Rowley, Florian Pflug, Tom Lane)
484        </para>
485       </listitem>
486
487       <listitem>
488        <para>
489         Improve speed of aggregates which use <link
490         linkend="datatype-numeric"><type>NUMERIC</></link>s (Hadi
491         Moshayedi)
492        </para>
493
494        <para>
495         These include <function>SUM()</>, <function>AVG()</>, <link
496         linkend="functions-aggregate-statistics-table"><function>STDDEV()</></link>,
497         and <function>VARIANCE()</>.
498        </para>
499       </listitem>
500
501       <listitem>
502        <para>
503         Attempt to <link linkend="vacuum-for-wraparound">freeze</link>
504         tuples when tables are rewritten with <link
505         linkend="SQL-CLUSTER"><command>CLUSTER</></link> or <link
506         linkend="SQL-VACUUM"><command>VACUUM FULL</></link> (Robert Haas,
507         Andres Freund)
508        </para>
509
510        <para>
511         This can avoid the need to freeze the tuples in the future.
512        </para>
513       </listitem>
514
515       <listitem>
516        <para>
517         Improve speed of <link linkend="SQL-COPY"><command>COPY</></link>
518         with <literal>DEFAULT</> <link
519         linkend="functions-sequence-table"><function>nextval()</></link>
520         columns (Simon Riggs)
521        </para>
522       </listitem>
523
524       <listitem>
525        <para>
526         Improve speed of accesessing many different <link
527         linkend="SQL-CREATESEQUENCE">sequences</link> in the same session
528         (David Rowley)
529        </para>
530       </listitem>
531
532       <listitem>
533        <para>
534         Allow sorting and B-tree <link linkend="SQL-CREATEINDEX">index
535         builds</link> to use over four gigabytes of memory (Noah Misch)
536        </para>
537       </listitem>
538
539       <listitem>
540        <para>
541         Reduce memory allocated by <link
542         linkend="SQL-DO"><literal>DO</></link> blocks (Tom Lane)
543        </para>
544       </listitem>
545
546       <listitem>
547        <para>
548         Have the optimizer be more aggressive in creating restrictions
549         from mixed <literal>AND</>/<literal>OR</> clauses (Tom Lane)
550        </para>
551       </listitem>
552
553       <listitem>
554        <para>
555         Auto-resize the catalog cache (Heikki Linnakangas)
556        </para>
557
558        <para>
559         This reduces memory consumption for backends accessing only a few
560         tables, and improves performance for backend accessing many tables.
561        </para>
562       </listitem>
563
564      </itemizedlist>
565
566     </sect4>
567
568     <sect4>
569      <title>Monitoring</title>
570
571      <itemizedlist>
572
573       <listitem>
574        <para>
575         Expose the estimation of number of changed tuples since last <link
576         linkend="vacuum-for-statistics">analyze</link> (Mark Kirkwood)
577        </para>
578
579        <para>
580         This appears in <link
581         linkend="pg-stat-all-tables-view"><structfield>pg_stat_all_tables.n_mod_since_analyze</></link>.
582        </para>
583       </listitem>
584
585       <listitem>
586        <para>
587         Add <link
588         linkend="pg-stat-archiver-view"><structname>pg_stat_archiver</></link>
589         system view to report <link linkend="wal"><acronym>WAL</></link>
590         archiver activity (Gabriele Bartolini)
591        </para>
592       </listitem>
593
594       <listitem>
595        <para>
596         Add <varname>backend_xid</> and <varname>backend_xmin</> columns to
597         the system view <link linkend="pg-stat-activity-view"><structname>pg_stat_activity</></link>
598         and <varname>backend_xmin</> to <link linkend="pg-stat-replication-view"><structname>pg_stat_replication</></link>
599         (Christian Kruse)
600        </para>
601       </listitem>
602
603      </itemizedlist>
604
605     </sect4>
606
607     <sect4>
608      <title><acronym>SSL</></title>
609
610      <itemizedlist>
611
612       <listitem>
613        <para>
614         Add support for <acronym>SSL</> <acronym>ECDH</> key exchange
615         (Marko Kreen)
616        </para>
617
618        <para>
619         This allows use of Elliptic Curve keys for server authentication.
620         Such keys are faster and have improved security over <acronym>RSA</> keys.
621         The new configuration parameter
622         <link linkend="guc-ssl-ecdh-curve"><varname>ssl_ecdh_curve</></link>
623         controls which curve is used for <acronym>ECDH</>.
624        </para>
625       </listitem>
626
627       <listitem>
628        <para>
629         Improve the default <link
630         linkend="guc-ssl-ciphers"><varname>ssl_ciphers</></link> value
631         (Marko Kreen)
632        </para>
633       </listitem>
634
635       <listitem>
636        <para>
637         Allow the server to specify the preferred <acronym>SSL</> cipher
638         order (Marko Kreen)
639        </para>
640
641        <para>
642         This is controlled by the new configuration parameter <link
643         linkend="guc-ssl-prefer-server-ciphers"><varname>ssl_prefer_server_ciphers</></link>.
644        </para>
645       </listitem>
646
647       <listitem>
648        <para>
649         Have <link
650         linkend="guc-log-connections"><varname>log_connections</></link>
651         show <acronym>SSL</> encryption information (Andreas Kunert)
652        </para>
653       </listitem>
654
655      </itemizedlist>
656
657     </sect4>
658
659     <sect4>
660      <title>Server Settings</title>
661
662      <itemizedlist>
663
664       <listitem>
665        <para>
666         Add <acronym>SQL</>-level <link
667         linkend="SQL-ALTERSYSTEM"><command>ALTER SYSTEM</></link> command
668         to adjust server-wide settings (Amit Kapila)
669        </para>
670
671        <para>
672         Previously such settings could only be changed by
673         editing <filename>postgresql.conf</> at the file system level.
674        </para>
675       </listitem>
676
677       <listitem>
678        <para>
679         Add <link linkend="guc-huge-pages"><varname>huge_pages</></link>
680         configuration parameter to use huge memory pages on Linux
681         (Christian Kruse, Richard Poole, Abhijit Menon-Sen)
682        </para>
683
684        <para>
685         This can improve performance on large memory systems.
686        </para>
687       </listitem>
688
689       <listitem>
690        <para>
691         Show <acronym>PID</>s of lock holders and
692         waiters and improve relation information in <link
693         linkend="guc-log-lock-waits"><varname>log_lock_waits</></link>
694         log messages (Christian Kruse)
695        </para>
696       </listitem>
697
698       <listitem>
699        <para>
700         Add parameter <link
701         linkend="guc-autovacuum-work-mem"><varname>autovacuum_work_mem</></link>
702         to control the amount of memory used by autovacuum workers
703         (Peter Geoghegan)
704        </para>
705       </listitem>
706
707       <listitem>
708        <para>
709         Add <link
710         linkend="guc-max-worker-processes"><varname>max_worker_processes</></link>
711         to limit the number of background workers (Robert Haas)
712        </para>
713
714        <para>
715         This is helpful in configuring the standby server to have the
716         required same number of worker processes as the primary.
717        </para>
718       </listitem>
719
720       <listitem>
721        <para>
722         Add configuration parameter <link
723         linkend="guc-wal-log-hints"><varname>wal_log_hints</></link>
724         to enable logging of hint bits (Sawada Masahiko)
725        </para>
726
727        <para>
728         Hint bits are not normally logged, except when checksums are enabled.
729         This is useful for external tools like <application>pg_rewind</>.
730        </para>
731       </listitem>
732
733       <listitem>
734        <para>
735         Allow printf-style space padding to be specified in <link
736         linkend="guc-log-line-prefix"><varname>log_line_prefix</></link>
737         (David Rowley)
738        </para>
739       </listitem>
740
741       <listitem>
742        <para>
743         Add superuser-only <link
744         linkend="guc-session-preload-libraries"><varname>session_preload_libraries</></link>
745         configuration parameter to load libraries at session start
746         (Peter Eisentraut)
747        </para>
748
749        <para>
750         In contrast
751         to <link linkend="guc-local-preload-libraries"><varname>local_preload_libraries</></link>
752         this parameter can load any shared library, not just those in
753         the <filename>$libdir/plugins</> directory.
754        </para>
755       </listitem>
756
757       <listitem>
758        <para>
759         Reduce server logging level when loading shared libraries (Peter
760         Geoghegan)
761        </para>
762
763        <para>
764         The previous level was <literal>LOG</>, which was too verbose
765         for per-session libraries.
766        </para>
767       </listitem>
768
769       <listitem>
770        <para>
771         Increase <link
772         linkend="guc-work-mem"><varname>work_mem</></link> and <link
773         linkend="guc-maintenance-work-mem"><varname>maintenance_work_mem</></link>
774         defaults by four times (Bruce Momjian)
775        </para>
776
777        <para>
778         The new defaults are 4MB and 64MB respectively.
779        </para>
780       </listitem>
781
782       <listitem>
783        <para>
784         Increase the default setting of <link
785         linkend="guc-effective-cache-size"><varname>effective_cache_size</></link>
786         to 4GB (Bruce Momjian, Tom Lane)
787        </para>
788       </listitem>
789
790       <listitem>
791        <para>
792         Allow terabyte units to be specified for configuration variable
793         values (Simon Riggs)
794        </para>
795       </listitem>
796
797       <listitem>
798        <para>
799         Have Windows <acronym>ASCII</>-encoded databases and server process
800         (e.g.  <link linkend="app-postmaster">postmaster</>) emit messages
801         in the <envar>LC_CTYPE</>-defined language (Alexander Law,
802         Noah Misch)
803        </para>
804
805        <para>
806         Previously these messages were output using the Windows
807         <acronym>ANSI</> code page.
808        </para>
809       </listitem>
810
811      </itemizedlist>
812
813     </sect4>
814
815    </sect3>
816
817    <sect3>
818     <title>Replication and Recovery</title>
819
820      <itemizedlist>
821
822       <listitem>
823        <para>
824         Add <link linkend="recovery-config"><filename>recovery.conf</></link>
825         parameter <link linkend="recovery-min-apply-delay"><varname>recovery_min_apply_delay</></link>
826         to delay replication (Robert Haas, Fabr&iacute;zio de Royes Mello,
827         Simon Riggs)
828        </para>
829
830        <para>
831         This is useful for delaying the replay of user errors on standby
832         servers.
833        </para>
834       </listitem>
835
836       <listitem>
837        <para>
838         Add <link
839         linkend="recovery-target"><varname>recovery_target</></link>
840         option <option>immediate</> to stop <link
841         linkend="wal"><acronym>WAL</></link> recovery as soon as a
842         consistent state is reached (MauMau, Heikki Linnakangas)
843        </para>
844       </listitem>
845
846       <listitem>
847        <para>
848         Improve recovery target processing (Heikki Linnakangas)
849        </para>
850
851        <para>
852         The timestamp reported
853         by <link linkend="functions-recovery-info-table"><function>pg_last_xact_replay_timestamp()</></link>
854         now shows information about already-committed records, not of transactions
855         about to be committed. Recovering to a restore point now replays the
856         restore point, rather than stopping just before the restore point.
857        </para>
858       </listitem>
859
860       <listitem>
861        <para>
862         <link
863         linkend="functions-admin-backup-table"><function>pg_switch_xlog()</></link>
864         now clears the trailing unused space in the <acronym>WAL</> file
865         (Heikki Linnakangas)
866        </para>
867
868        <para>
869         This improves the compression ratio for <acronym>WAL</> files.
870        </para>
871       </listitem>
872
873       <listitem>
874        <para>
875         Add <link linkend="streaming-replication-slots">replication
876         slots</link> to coordinate activity on streaming standbys with the
877         node they are streaming from (Andres Freund, Robert Haas)
878        </para>
879
880        <para>
881         Replication slots allow preservation of resources like
882         <acronym>WAL</> files on the primary that are needed by standby
883         servers.
884        </para>
885       </listitem>
886
887       <listitem>
888        <para>
889         Reduce spinlock contention during <acronym>WAL</> replay (Heikki
890         Linnakangas)
891        </para>
892       </listitem>
893
894       <listitem>
895        <para>
896         Report failure return codes from <link
897         linkend="archive-recovery-settings">external recovery commands</>
898         (Peter Eisentraut)
899        </para>
900       </listitem>
901
902       <listitem>
903        <para>
904         Write <acronym>WAL</> records of running transactions more
905         frequently (Andres Freund)
906        </para>
907
908        <para>
909         This allows standby servers to start faster and cleanup resources
910         more aggressively.
911        </para>
912       </listitem>
913
914      </itemizedlist>
915
916      <sect4>
917       <title><link linkend="logicaldecoding">Logical Decoding</></title>
918
919       <para>
920        Logical decoding allows database changes to be optionally streamed in a
921        configurable format. The data is read from
922        the <link linkend="wal"><acronym>WAL</></link> and transformed into the
923        desired target format. To implement this feature, the following changes
924        were made:
925       </para>
926
927       <itemizedlist>
928        <!-- FIXME: This imo needs a pretty fundamental rewrite -->
929        <listitem>
930         <para>
931          Add new <option>logical</> <link
932          linkend="guc-wal-level"><varname>wal_level</></link> to enable
933          logical change-set encoding in <acronym>WAL</> (Andres Freund)
934         </para>
935
936         <para>
937          This interacts with <link
938          linkend="catalog-pg-class"><literal>REPLICA IDENTITY</></link>.
939         </para>
940        </listitem>
941
942        <listitem>
943         <para>
944          Allow <link
945          linkend="app-pgrecvlogical"><application>pg_recvlogical</></link>
946          to receive data logical decoding data (Andres Freund)
947         </para>
948        </listitem>
949
950        <listitem>
951         <para>
952          Add <link
953          linkend="test-decoding"><application>test_decoding</></link>
954          module to illustrate logical decoding at the <acronym>SQL</>
955          level (Andres Freund)
956         </para>
957        </listitem>
958
959        <listitem>
960         <para>
961          Allow logical decoding via the walsender interface ? (Andres
962          Freund)
963         </para>
964        </listitem>
965
966        <listitem>
967         <para>
968          Add table-level parameter <link
969          linkend="catalog-pg-class"><literal>REPLICA IDENTITY</></link>
970          to control logical replication (Andres Freund)
971         </para>
972        </listitem>
973
974        <listitem>
975         <para>
976          Add relation option <link
977          linkend="SQL-CREATETABLE-storage-parameters"><option>user_catalog_table</></link>
978          to identify user-created tables involved in logical change-set
979          encoding (Andres Freund)
980         </para>
981        </listitem>
982
983       </itemizedlist>
984
985      </sect4>
986
987    </sect3>
988
989    <sect3>
990     <title>Queries</title>
991
992      <itemizedlist>
993
994       <listitem>
995        <para>
996         Add <link linkend="queries-tablefunctions"><literal>ROWS
997         FROM()</></link> syntax to allow horizontal concatenation of
998         set-returning functions in the <literal>FROM</>-clause (Andrew Gierth)
999        </para>
1000       </listitem>
1001
1002       <listitem>
1003        <para>
1004         Add <link linkend="queries-tablefunctions"><literal>WITH
1005         ORDINALITY</></link> syntax to number rows returned from
1006         <literal>FROM</>-clause functions (Andrew Gierth, David Fetter)
1007        </para>
1008
1009        <para>
1010         This is particularly useful for functions like
1011         <function>unnest()</>.
1012        </para>
1013       </listitem>
1014
1015       <listitem>
1016        <para>
1017         Allow <link linkend="SQL-SELECT"><command>SELECT</></link> with
1018         an empty target list (Tom Lane)
1019        </para>
1020
1021        <para>
1022         This was added so views that select from a table with zero columns
1023         can be dumped correctly.
1024        </para>
1025       </listitem>
1026
1027      </itemizedlist>
1028
1029    </sect3>
1030
1031    <sect3>
1032     <title>Utility Commands</title>
1033
1034      <itemizedlist>
1035
1036       <listitem>
1037        <para>
1038         Add <link linkend="SQL-DISCARD"><command>DISCARD
1039         SEQUENCES</></link> command to discard cached sequence information
1040         (Fabr&iacute;zio de Royes Mello, Robert Haas)
1041        </para>
1042
1043        <para>
1044         <command>DISCARD ALL</> will now also discard such information.
1045        </para>
1046       </listitem>
1047
1048        <listitem>
1049         <para>
1050          Add <command>FORCE NULL</> option
1051          to <link linkend="SQL-COPY"><command>COPY FROM</></link> which causes
1052          quoted strings matching the null string to be converted to NULL in
1053          <literal>CSV</> mode (Ian Barwick, Michael Paquier)
1054         </para>
1055
1056         <para>
1057          Previously only unquoted matching strings would be imported
1058          as NULLs.
1059         </para>
1060        </listitem>
1061
1062       <listitem>
1063        <para>
1064         Issue warnings for commands used outside of transaction blocks
1065         because they have no effect (Bruce Momjian)
1066        </para>
1067
1068        <para>
1069         The cases are <literal>SET
1070         LOCAL</>, <literal>SET CONSTRAINTS</>, <literal>SET TRANSACTION</> and
1071         <literal>ABORT</>.
1072        </para>
1073       </listitem>
1074
1075      </itemizedlist>
1076
1077      <sect4>
1078       <title><link linkend="SQL-EXPLAIN"><command>EXPLAIN</></link></title>
1079
1080       <itemizedlist>
1081
1082        <listitem>
1083         <para>
1084          Have <command>EXPLAIN ANALYZE</> output planning time (Andreas
1085          Karlsson)
1086         </para>
1087        </listitem>
1088
1089        <listitem>
1090         <para>
1091          Have <command>EXPLAIN</> print the grouping columns in Agg and
1092          Group nodes (Tom Lane)
1093         </para>
1094        </listitem>
1095
1096        <listitem>
1097         <para>
1098          Have <command>EXPLAIN ANALYZE</> show bitmap heap scan exact/lossy
1099          block information (Etsuro Fujita)
1100         </para>
1101        </listitem>
1102
1103       </itemizedlist>
1104
1105      </sect4>
1106
1107      <sect4>
1108       <title>Views</title>
1109
1110       <itemizedlist>
1111
1112       <listitem>
1113        <para>
1114         Allow materialized views to be refreshed without blocking reads
1115          (Kevin Grittner)
1116        </para>
1117
1118        <para>
1119         This is done with <link
1120         linkend="SQL-REFRESHMATERIALIZEDVIEW"><command>REFRESH MATERIALIZED
1121         VIEW CONCURRENTLY</></link>.
1122        </para>
1123       </listitem>
1124
1125       <listitem>
1126        <para>
1127         Allow views to be <link
1128         linkend="SQL-CREATEVIEW-updatable-views">automatically
1129         updated</link> even if they contain some non-updatable columns
1130         (Dean Rasheed)
1131        </para>
1132
1133        <para>
1134         Previously the presence of non-updatable columns such as
1135         expressions, literals, and function calls prevented automatic
1136         updates.  Now <command>INSERT</>s, <command>UPDATE</>s and
1137         <command>DELETE</>s are supported, provided that they do not
1138         attempt to assign new values to any of the non-updatable columns.
1139        </para>
1140       </listitem>
1141
1142       <listitem>
1143        <para>
1144         Allow control over whether <command>INSERT</>s and
1145         <command>UPDATE</>s can add rows to an auto-updatable view that
1146         would no longer appear in the view (Dean Rasheed)
1147        </para>
1148
1149        <para>
1150         This is controlled with the new <link
1151         linkend="SQL-CREATEVIEW"><literal>WITH CHECK OPTION</></link>.
1152        </para>
1153       </listitem>
1154
1155       <listitem>
1156        <para>
1157         Allow <link linkend="rules-privileges">security barrier views</>
1158         to be automatically updatable (Dean Rasheed)
1159        </para>
1160       </listitem>
1161
1162       </itemizedlist>
1163
1164      </sect4>
1165
1166    </sect3>
1167
1168    <sect3>
1169     <title>Object Manipulation</title>
1170
1171      <itemizedlist>
1172
1173       <listitem>
1174        <para>
1175         Allow triggers on <link linkend="SQL-CREATEFOREIGNTABLE">foreign
1176         tables</> (Ronan Dunklau)
1177        </para>
1178       </listitem>
1179
1180       <listitem>
1181        <para>
1182         Fix <command>DROP IF EXISTS</> to more consistently not error
1183         for non-existent objects (Pavel Stehule,  Dean Rasheed)
1184        </para>
1185       </listitem>
1186
1187       <listitem>
1188        <para>
1189         Improve how system-level relations are designated (Andres Freund,
1190         Robert Haas)
1191        </para>
1192
1193        <para>
1194         Previously, relations once moved into the system catalog schema could
1195         no longer be modified or dropped.
1196        </para>
1197       </listitem>
1198
1199       <listitem>
1200        <para>
1201         Allow <link linkend="SQL-ALTERTABLESPACE"><command>ALTER
1202         TABLESPACE</></link> options to be also set by <link
1203         linkend="SQL-CREATETABLESPACE"><command>CREATE TABLESPACE</></link>
1204         (Vik Fearing)
1205        </para>
1206       </listitem>
1207
1208       <listitem>
1209        <para>
1210         Allow <link linkend="SQL-CREATEAGGREGATE"><command>CREATE
1211         AGGREGATE</></link> to supply the size of the aggregate's
1212         transition state data (Hadi Moshayedi)
1213        </para>
1214
1215        <para>
1216         This allows the optimizer to better estimate how much memory will be
1217         used by aggregates.
1218        </para>
1219       </listitem>
1220
1221      </itemizedlist>
1222
1223     <sect4>
1224      <title><command>ALTER</></title>
1225
1226      <itemizedlist>
1227
1228       <listitem>
1229        <para>
1230         Allow moving groups of objects from one tablespace to another
1231         using <link linkend="SQL-ALTERTABLESPACE"><command>ALTER
1232         TABLESPACE</></link> ... <literal>MOVE</> (Stephen Frost)
1233        </para>
1234       </listitem>
1235
1236       <listitem>
1237        <para>
1238         Allow changing foreign key constraint deferrability via <link
1239         linkend="SQL-ALTERTABLE"><command>ALTER TABLE</></link>
1240         ... <literal>ALTER CONSTRAINT</> (Simon Riggs)
1241        </para>
1242       </listitem>
1243
1244       <listitem>
1245        <para>
1246         Reduce lock levels of some <link
1247         linkend="SQL-ALTERTABLE"><command>ALTER TABLE</></link> commands
1248         (Simon Riggs, Noah Misch, Robert Haas)
1249        </para>
1250
1251        <para>
1252         Specifically, <literal>VALIDATE CONSTRAINT</>, <literal>CLUSTER
1253         ON</>, <literal>SET WITHOUT CLUSTER</>, <literal>ALTER COLUMN
1254         SET STATISTICS</>, <literal>ALTER COLUMN</> <literal>SET</>
1255         <option>(attribute_option)</>, <literal>ALTER COLUMN RESET</>
1256         <option>(attribute_option)</> no longer require <literal>ACCESS
1257         EXCLUSIVE</> locks.
1258        </para>
1259       </listitem>
1260
1261      </itemizedlist>
1262
1263     </sect4>
1264
1265    </sect3>
1266
1267    <sect3>
1268     <title>Data Types</title>
1269
1270     <itemizedlist>
1271
1272       <listitem>
1273        <para>
1274         Fully implement the <link
1275         linkend="datatype-line"><type>line</></link> data type (Peter
1276         Eisentraut)
1277        </para>
1278
1279        <para>
1280         The line <emphasis>segment</> data type (<link
1281         linkend="datatype-lseg"><type>LSEG</></link>) has always been
1282         fully supported.  The previous <type>line</> data type (enabled
1283         only via a compile-time option) is not binary or dump-compatible.
1284        </para>
1285       </listitem>
1286
1287       <listitem>
1288        <para>
1289         Add <link linkend="datatype-pg-lsn"><type>PG_LSN</></link>
1290         data type to represent a <acronym>WAL</> log sequence number
1291         (<acronym>LSN</>) (Robert Haas, Michael Paquier)
1292        </para>
1293       </listitem>
1294
1295       <listitem>
1296        <para>
1297         Allow single-point <link
1298         linkend="datatype-polygon"><type>POLYGON</></link>s to be converted
1299         to <link linkend="datatype-circle"><type>CIRCLE</></link>s
1300         (Bruce Momjian)
1301        </para>
1302       </listitem>
1303
1304       <listitem>
1305        <para>
1306         Allow 5+ digit years for non-<acronym>ISO</> <link
1307         linkend="datatype-datetime"><type>TIMESTAMP</></link> and
1308         <type>DATE</> strings, where appropriate (Bruce Momjian)
1309        </para>
1310       </listitem>
1311
1312       <listitem>
1313        <para>
1314         Add checks for overflow/underflow of <link
1315         linkend="datatype-datetime"><type>INTERVAL</></link> values
1316         (Bruce Momjian)
1317        </para>
1318       </listitem>
1319
1320     </itemizedlist>
1321
1322     <sect4>
1323      <title><link linkend="datatype-json"><type>JSON</></link></title>
1324
1325      <itemizedlist>
1326
1327        <listitem>
1328         <para>
1329          Add structured (non-text) data type (<link
1330          linkend="datatype-json"><type>JSONB</></link>) for storing
1331          <type>JSON</> data (Oleg Bartunov, Teodor Sigaev, Alexander
1332          Korotkov, Peter Geoghegan, and Andrew Dunstan)
1333         </para>
1334
1335         <para>
1336          This allows for faster access to values in the <type>JSON</>
1337          document and faster and more useful indexing of <type>JSON</>.
1338          Scalar values in <type>JSONB</> documents are typed as appropriate
1339          scalar SQL types.
1340         </para>
1341        </listitem>
1342
1343        <listitem>
1344         <para>
1345          Add new <type>JSON</> functions to allow for the construction
1346          of arbitrarily complex json trees (Andrew Dunstan, Laurence Rowe)
1347         </para>
1348
1349         <para>
1350          New functions include <link
1351          linkend="functions-json-processing-table"><function>json_array_elements_text()</></link>,
1352          <function>json_build_array()</>, <function>json_object()</>,
1353          <function>json_object_agg()</>, <function>json_to_record()</>,
1354          and <function>json_to_recordset()</>.
1355         </para>
1356        </listitem>
1357
1358        <listitem>
1359         <para>
1360          Add <link
1361          linkend="functions-json-processing-table"><function>json_typeof()</></link>
1362          to return the data type of a <type>JSON</> value (Andrew Tipton)
1363         </para>
1364        </listitem>
1365
1366      </itemizedlist>
1367
1368     </sect4>
1369
1370    </sect3>
1371
1372
1373    <sect3>
1374     <title>Functions</title>
1375
1376      <itemizedlist>
1377
1378       <listitem>
1379        <para>
1380         Add <link
1381         linkend="functions-datetime-delay"><function>pg_sleep_for(interval)</></link>
1382         and <function>pg_sleep_until(timestamp)</> to specify sophisticated
1383         delays (Vik Fearing, Julien Rouhaud)
1384        </para>
1385
1386        <para>
1387         <function>pg_sleep()</> only supports delays specified in seconds.
1388        </para>
1389       </listitem>
1390
1391       <listitem>
1392        <para>
1393         Add <link
1394         linkend="array-functions-table"><function>cardinality()</></link>
1395         function for arrays (Marko Tiikkaja)
1396        </para>
1397
1398        <para>
1399         This returns the total number of elements in the array, or zero
1400         for an array with no elements.
1401        </para>
1402       </listitem>
1403
1404       <listitem>
1405        <para>
1406         Add <acronym>SQL</> functions to allow <link
1407         linkend="lo-interfaces">large object reads/writes</link> at
1408         arbitrary offsets (Pavel Stehule)
1409        </para>
1410       </listitem>
1411
1412       <listitem>
1413        <para>
1414         Allow <link
1415         linkend="array-functions-table"><function>unnest()</></link>
1416         to take multiple arguments, which are individually unnested then
1417         horizontally concatenated (Andrew Gierth)
1418        </para>
1419       </listitem>
1420
1421       <listitem>
1422        <para>
1423         Add functions to construct <type>time</>s, <type>date</>s,
1424         <type>timestamp</>s, <type>timestamptz</>s, and <type>interval</>s
1425         from individual values, rather than strings (Pavel Stehule)
1426        </para>
1427
1428        <para>
1429         These functions are prefixed with <literal>make_</>,
1430         e.g. <link linkend="functions-datetime-table"><function>make_date()</></link>.
1431        </para>
1432       </listitem>
1433
1434       <listitem>
1435        <para>
1436         Have <link
1437         linkend="functions-formatting-table"><function>to_char(<literal>TZ</>)</></link>
1438         return the proper value for constant time zone offsets (Tom Lane)
1439        </para>
1440
1441        <para>
1442         Previously, <literal>to_char(CURRENT_TIMESTAMP, 'TZ')</> returned
1443         NULL if the <literal>TIME ZONE</> was set to a constant like
1444         <literal>-4</>.
1445        </para>
1446       </listitem>
1447
1448       <listitem>
1449        <para>
1450         Add timezone offset output option <literal>OF</> to <link
1451         linkend="functions-formatting-table"><function>to_char()</></link>
1452         (Bruce Momjian)
1453        </para>
1454       </listitem>
1455
1456       <listitem>
1457        <para>
1458         Improve the random seed used for <link
1459         linkend="functions-math-random-table"><function>random()</></link>
1460         (Honza Horak)
1461        </para>
1462       </listitem>
1463
1464      </itemizedlist>
1465
1466     <sect4>
1467      <title>System Information Functions</title>
1468
1469      <itemizedlist>
1470
1471       <listitem>
1472        <para>
1473         Add functions for looking up objects in <structname>pg_class</>,
1474         <structname>pg_proc</>, <structname>pg_type</>, and
1475         <structname>pg_operator</> which do not generate errors for
1476         non-existent objects (Yugo Nagata, Nozomi Anzai,
1477         Robert Haas)
1478        </para>
1479
1480        <para>
1481         For example, <link
1482         linkend="functions-info-catalog-table"><function>to_regclass()</></link>
1483         does lookups of <structname>pg_class</> and returns NULL for
1484         non-existent objects.
1485        </para>
1486       </listitem>
1487
1488       <listitem>
1489        <para>
1490         Add function <link
1491         linkend="functions-admin-dblocation"><function>pg_filenode_relation()</></link>
1492         to allow for more efficient lookup of relation names from filenodes (Andres
1493         Freund)
1494        </para>
1495       </listitem>
1496
1497       <listitem>
1498        <para>
1499         Add <link
1500         linkend="information-schema"><structname>information_schema</></link>
1501         column <link
1502         linkend="infoschema-parameters"><structfield>parameters.parameter_default</></link>
1503         (Peter Eisentraut)
1504        </para>
1505       </listitem>
1506
1507       <listitem>
1508        <para>
1509         Have <link
1510         linkend="infoschema-schemata"><structfield>information_schema.schemata</></link>
1511         show all accessible schema (Peter Eisentraut)
1512        </para>
1513
1514        <para>
1515         Previously it only showed <emphasis>owned</> schemas.
1516        </para>
1517       </listitem>
1518
1519      </itemizedlist>
1520
1521     </sect4>
1522
1523     <sect4>
1524      <title>Aggregates</title>
1525
1526      <itemizedlist>
1527
1528       <listitem>
1529        <para>
1530         Add aggregates <link
1531         linkend="functions-orderedset-table"><function>percentile_cont()</></link>,
1532         <function>percentile_disc()</>, <link
1533         linkend="functions-hypothetical-table"><function>rank()</></link>,
1534         <function>dense_rank()</>, <function>percent_rank()</>,
1535         <function>cume_dist()</>, and <link
1536         linkend="functions-orderedset-table"><function>mode()</></link>
1537         (Atri Sharma, Andrew Gierth)
1538        </para>
1539       </listitem>
1540
1541       <listitem>
1542        <para>
1543         Add control over which values are passed
1544         into aggregate functions using the <link
1545         linkend="syntax-aggregates"><literal>FILTER</></link> clause
1546         (David Fetter)
1547        </para>
1548       </listitem>
1549
1550       <listitem>
1551        <para>
1552         Support ordered-set (<link
1553         linkend="syntax-aggregates"><literal>WITHIN GROUP</></link>)
1554         aggregates (Atri Sharma, Andrew Gierth, Tom Lane)
1555        </para>
1556
1557        <para>
1558         This allows aggregates that require sorted input.
1559        </para>
1560       </listitem>
1561
1562       <listitem>
1563        <para>
1564         Allow polymorphic aggregates to have non-polymorphic state data
1565         types (Tom Lane)
1566        </para>
1567        <para>
1568         This allows the declaration of aggregates like the built-in
1569         aggregate <function>array_agg()</> in SQL.
1570        </para>
1571       </listitem>
1572
1573       <listitem>
1574        <para>
1575         Allow <link
1576         linkend="xfunc-sql-variadic-functions"><literal>VARIADIC</></link>
1577         aggregate functions (Tom Lane)
1578        </para>
1579       </listitem>
1580
1581      </itemizedlist>
1582
1583     </sect4>
1584
1585    </sect3>
1586
1587    <sect3>
1588     <title>Server-Side Languages</title>
1589
1590     <itemizedlist>
1591
1592      <listitem>
1593       <para>
1594        Add event trigger support to <link linkend="plperl">PL/Perl</>
1595        and <link linkend="pltcl">PL/Tcl</> (Dimitri Fontaine)
1596       </para>
1597      </listitem>
1598
1599     </itemizedlist>
1600
1601     <sect4>
1602      <title><link linkend="plpgsql">PL/pgSQL</link> Server-Side Language</title>
1603
1604      <itemizedlist>
1605
1606       <listitem>
1607        <para>
1608         Add ability to store the PL/PgSQL
1609         call stack into a variable using <link
1610         linkend="plpgsql-get-diagnostics-context"><literal>PG_CONTEXT</></link>
1611         (Pavel Stehule, Stephen Frost)
1612        </para>
1613       </listitem>
1614
1615       <listitem>
1616        <para>
1617         Add option <link
1618         linkend="plpgsql-statements-assignment"><option>print_strict_params</></link>
1619         to output parameters passed to queries generating <link
1620         linkend="plpgsql-statements-sql-onerow"><literal>STRICT</></link>
1621         errors (Marko Tiikkaja)
1622        </para>
1623       </listitem>
1624
1625       <listitem>
1626        <para>
1627         Add variables <link
1628         linkend="plpgsql-extra-checks"><varname>plpgsql.extra_warnings</></link>
1629         and <varname>plpgsql.extra_errors</> to enable additional PL/pgSQL
1630         warnings and errors (Marko Tiikkaja, Petr Jelinek)
1631        </para>
1632
1633        <para>
1634         Currently only shadowed variable errors/warnings are available.
1635        </para>
1636       </listitem>
1637
1638     </itemizedlist>
1639
1640     </sect4>
1641
1642     <sect4>
1643      <title><link linkend="plpython">PL/Python</link> Server-Side Language</title>
1644
1645      <itemizedlist>
1646
1647       <listitem>
1648        <para>
1649         Convert <link linkend="datatype-numeric"><type>NUMERIC</></link>s
1650         to <type>decimal</> values in PL/Python (Szymon Guz, Ronan Dunklau)
1651        </para>
1652
1653        <para>
1654         Previously these were converted to <type>float</>s.
1655        </para>
1656       </listitem>
1657
1658      </itemizedlist>
1659
1660     </sect4>
1661
1662    </sect3>
1663
1664    <sect3>
1665     <title><link linkend="libpq"><application>libpq</></link></title>
1666      <itemizedlist>
1667
1668       <listitem>
1669        <para>
1670         Add libpq function <link
1671         linkend="libpq-pqhostaddr"><function>PQhostaddr()</></link>
1672         to return the server's <acronym>IP</> address (Fujii Masao)
1673        </para>
1674       </listitem>
1675
1676       <listitem>
1677        <para>
1678         Make libpq's <link
1679         linkend="libpq-pqconndefaults"><function>PQconndefaults()</></link>
1680         ignore invalid service files (Steve Singer, Bruce Momjian)
1681        </para>
1682
1683        <para>
1684         Previously it returned NULL.
1685        </para>
1686       </listitem>
1687
1688       <listitem>
1689        <para>
1690         Allow libpq to support <acronym>TLS</> versions beyond
1691         <literal>TLSv1</> (Marko Kreen)
1692        </para>
1693       </listitem>
1694
1695       <listitem>
1696        <para>
1697         Document that libpq's <link
1698         linkend="libpq-pqclientencoding"><function>PQclientEncoding()</></link>
1699         returns <literal>-1</> for an encoding lookup failure (Bruce
1700         Momjian)
1701        </para>
1702       </listitem>
1703
1704      </itemizedlist>
1705
1706    </sect3>
1707
1708    <sect3>
1709     <title>Client Applications</title>
1710
1711     <itemizedlist>
1712
1713       <listitem>
1714        <para>
1715         Add <link
1716         linkend="APP-CREATEUSER"><application>createuser</></link>
1717         <option>-g</> to specify role membership (Chistopher Browne)
1718        </para>
1719       </listitem>
1720
1721       <listitem>
1722        <para>
1723         Add <link linkend="APP-VACUUMDB"><application>vacuumdb</></link>
1724         option <option>--analyze-in-stages</> to analyze in stages of
1725         increasing granularity (Peter Eisentraut)
1726        </para>
1727
1728        <para>
1729         This allows minimal statistics to be created quickly.
1730        </para>
1731       </listitem>
1732
1733       <listitem>
1734        <para>
1735         Allow <link linkend="pgxlogdump"><application>pg_xlogdump</></link>
1736         to report a live log stream with <option>--follow</> (Heikki
1737         Linnakangas)
1738        </para>
1739       </listitem>
1740
1741       <listitem>
1742        <para>
1743         Have <link linkend="APP-PGRESETXLOG"><command>pg_resetxlog
1744         -n</></link> output current and potentially changed values
1745         (Rajeev Rastogi)
1746        </para>
1747       </listitem>
1748
1749       <listitem>
1750        <para>
1751         Allow <function>sizeof()</> in <link linkend="ecpg">ecpg</link>
1752         C array definitions (Michael Meskes)
1753        </para>
1754       </listitem>
1755
1756       <listitem>
1757        <para>
1758         Have <link linkend="ecpg">ecpg</link> properly handle nesting
1759         requirements in C and <acronym>SQL</> mode for C-style comments
1760         (Michael Meskes)
1761        </para>
1762       </listitem>
1763
1764       <listitem>
1765        <para>
1766         Have <link linkend="app-pg-ctl"><application>pg_ctl</></link>
1767         return <literal>4</> for an inaccessible data directory
1768         specification (Amit Kapila, Bruce Momjian)
1769        </para>
1770
1771        <para>
1772         This more closely matches the Linux Standard Base (<acronym>LSB</>)
1773         Core Specification.
1774        </para>
1775       </listitem>
1776
1777       <listitem>
1778        <para>
1779         On Windows, interpret <link
1780         linkend="app-pg-ctl"><application>pg_ctl</></link>'s non-absolute
1781         path <option>-D</> directories relative to <application>pg_ctl</>'s
1782         current directory (Kumar Rajeev Rastogi)
1783        </para>
1784       </listitem>
1785
1786     </itemizedlist>
1787
1788     <sect4>
1789      <title><link linkend="APP-PSQL"><application>psql</></link></title>
1790
1791      <itemizedlist>
1792
1793       <listitem>
1794        <para>
1795         Add ability to wrap long lines in <application>psql</>'s
1796         <literal>expanded</> mode by using <command>\pset format wrapped</>
1797         (Sergey Muraviov)
1798        </para>
1799       </listitem>
1800
1801       <listitem>
1802        <para>
1803         Suppress "No rows" in <application>psql</> <link
1804         linkend="APP-PSQL-meta-commands"><option>expanded</></link>
1805         mode when the footer is disabled (Bruce Momjian)
1806        </para>
1807       </listitem>
1808
1809       <listitem>
1810        <para>
1811         Allow Control-C to abort <application>psql</> hung at connection
1812         startup (Peter Eisentraut)
1813        </para>
1814       </listitem>
1815
1816      </itemizedlist>
1817
1818      <sect5>
1819       <title><link linkend="APP-PSQL-meta-commands">Backslash Commands</link></title>
1820
1821       <itemizedlist>
1822
1823        <listitem>
1824         <para>
1825          Have <application>psql</> <command>\db+</> show tablespace options
1826          (Magnus Hagander)
1827         </para>
1828        </listitem>
1829
1830        <listitem>
1831         <para>
1832          Have <application>psql</> <command>\do+</> display the functions
1833          which implement the operators (Marko Tiikkaja)
1834         </para>
1835        </listitem>
1836
1837        <listitem>
1838         <para>
1839          Have <application>psql</> <command>\d+</> output an
1840          <literal>OID</> line only if an oid column exists in a table
1841          (Bruce Momjian)
1842         </para>
1843
1844         <para>
1845          Previously, the presence or absence of an oid column was always
1846          reported.
1847         </para>
1848        </listitem>
1849
1850        <listitem>
1851         <para>
1852          Have <command>\d</> display disabled system triggers (Bruce
1853          Momjian)
1854         </para>
1855
1856         <para>
1857          Previously if you disabled all triggers, only user triggers
1858          would show as disabled.
1859         </para>
1860        </listitem>
1861
1862        <listitem>
1863         <para>
1864          Fix <application>psql</> <command>\copy</> to no longer require
1865          a space between <literal>stdin</> and a semicolon (Etsuro Fujita)
1866         </para>
1867        </listitem>
1868
1869        <listitem>
1870         <para>
1871          Output the row count at the end of
1872          <application>psql</> <command>\copy</> just like <link
1873          linkend="SQL-COPY"><command>COPY</></link> (Kumar Rajeev Rastogi)
1874         </para>
1875        </listitem>
1876
1877        <listitem>
1878         <para>
1879          Fix <application>psql</> <command>\conninfo</> to display the
1880          server's <acronym>IP</> address for clients that connect using
1881          <literal>hostaddr</> (Fujii Masao)
1882         </para>
1883
1884         <para>
1885          Previously <command>\conninfo</> could not display the server's
1886          <acronym>IP</> address in such cases.
1887         </para>
1888        </listitem>
1889
1890        <listitem>
1891         <para>
1892          Mention the <acronym>SSL</> protocol version in
1893          <application>psql</>'s <command>\conninfo</> (Marko Kreen)
1894         </para>
1895        </listitem>
1896
1897        <listitem>
1898         <para>
1899          Add <application>psql</> tab completion for <command>\pset</>
1900          (Pavel Stehule)
1901         </para>
1902        </listitem>
1903
1904        <listitem>
1905         <para>
1906          Allow <application>psql</> <command>\pset</> with no arguments
1907          to show all settings (Gilles Darold)
1908         </para>
1909        </listitem>
1910
1911        <listitem>
1912         <para>
1913          In <application>psql</>, output the written history file name
1914          (<command>\s</>) without adding an absolute path prefix (Tom Lane)
1915         </para>
1916
1917         <para>
1918          The previous output was inconsistent.
1919         </para>
1920        </listitem>
1921
1922       </itemizedlist>
1923
1924      </sect5>
1925
1926     </sect4>
1927
1928     <sect4>
1929      <title><link linkend="APP-PGDUMP"><application>pg_dump</></link></title>
1930
1931      <itemizedlist>
1932
1933       <listitem>
1934        <para>
1935         Allow <link
1936         linkend="APP-PGRESTORE"><application>pg_restore</></link> options
1937         <option>-I</>, <option>-P</>, <option>-T</> and <option>-n</>
1938         to be specified multiple times (Heikki Linnakangas)
1939        </para>
1940
1941        <para>
1942         This allows multiple restore object to be specified.
1943        </para>
1944       </listitem>
1945
1946       <listitem>
1947        <para>
1948         Add <literal>IF EXISTS</> clauses when removing old objects during
1949         dump and restore (Pavel Stehule)
1950        </para>
1951
1952        <para>
1953         This suppresses errors when removing old objects.
1954         The new <option>--if-exists</> option to <link
1955         linkend="APP-PGDUMP"><application>pg_dump</></link>, <link
1956         linkend="APP-PG-DUMPALL"><application>pg_dumpall</></link>, and
1957         <link linkend="APP-PGRESTORE"><application>pg_restore</></link>
1958         is only available when <option>--clean</> is also specified.
1959        </para>
1960       </listitem>
1961
1962      </itemizedlist>
1963
1964     </sect4>
1965
1966     <sect4>
1967      <title><link linkend="app-pgbasebackup"><application>pg_basebackup</></link></title>
1968
1969      <itemizedlist>
1970
1971       <listitem>
1972        <para>
1973         Add <application>pg_basebackup</> option <option>--xlogdir</>
1974         to specify the <filename>pg_xlog</> direction location (Haribabu
1975         Kommi)
1976        </para>
1977       </listitem>
1978
1979       <listitem>
1980        <para>
1981         Allow <application>pg_basebackup</> to relocate tablespaces in
1982         the backup copy (Steeve Lennmark)
1983        </para>
1984
1985        <para>
1986         This is particularly useful for using <application>pg_basebackup</>
1987         on the same machine as the primary.
1988        </para>
1989       </listitem>
1990
1991       <listitem>
1992        <para>
1993         Allow network-streams base backups to be throttled (Antonin Houska)
1994        </para>
1995
1996        <para>
1997         This can be controlled with the <application>pg_basebackup</>
1998         <option>--max-rate</> parameter.
1999        </para>
2000       </listitem>
2001
2002      </itemizedlist>
2003
2004     </sect4>
2005
2006    </sect3>
2007
2008    <sect3>
2009     <title>Source Code</title>
2010
2011      <itemizedlist>
2012
2013       <listitem>
2014        <para>
2015         Improve the way tuples are frozen, to preserve forensic information
2016         (Robert Haas, Andres Freund)
2017        </para>
2018
2019        <para>
2020         Code that inspects tuple flag bits will need to be modified.
2021        </para>
2022       </listitem>
2023
2024       <listitem>
2025        <para>
2026         No longer require function prototypes for function marked with the
2027         <link linkend="xfunc-c"><function>PG_FUNCTION_INFO_V1</></link>
2028         macro (Peter Eisentraut)
2029        </para>
2030
2031        <para>
2032         This eliminates needless boilerplate prototypes whose lack
2033         generates compiler warnings.
2034        </para>
2035       </listitem>
2036
2037       <listitem>
2038        <para>
2039         Remove <function>SnapshotNow()</> and
2040         <function>HeapTupleSatisfiesNow()</> (Robert Haas)
2041        </para>
2042
2043        <para>
2044         All existing uses have been switched to more appropriate snapshot
2045         types.  Catalog scans now use <acronym>MVCC</> snapshots.
2046        </para>
2047       </listitem>
2048
2049       <listitem>
2050        <para>
2051         Add <acronym>API</> for memory allocations over four gigabytes
2052         (Noah Misch)
2053        </para>
2054       </listitem>
2055
2056       <listitem>
2057        <para>
2058         Add <function>psprintf()</> to simplify memory allocation during
2059         string composition (Peter Eisentraut, Tom Lane)
2060        </para>
2061       </listitem>
2062
2063       <listitem>
2064        <para>
2065         Add <function>printf()</> modifier "z" to specify <type>size_t</>
2066         values (Andres Freund)
2067        </para>
2068       </listitem>
2069
2070       <listitem>
2071        <para>
2072         Change <acronym>API</> of <function>appendStringInfoVA()</>
2073         to better use <function>vsnprintf()</> (David Rowley, Tom Lane)
2074        </para>
2075       </listitem>
2076
2077       <listitem>
2078        <para>
2079         Allow new types of external toast datums to be created (Andres
2080         Freund)
2081        </para>
2082       </listitem>
2083
2084       <listitem>
2085        <para>
2086         Add single-reader, single-writer, lightweight shared message queue
2087         (Robert Haas)
2088        </para>
2089       </listitem>
2090
2091       <listitem>
2092        <para>
2093         Improve spinlock speed on x86_64 <acronym>CPU</>s (Heikki
2094         Linnakangas)
2095        </para>
2096       </listitem>
2097
2098       <listitem>
2099        <para>
2100         Remove spinlock support for unsupported platforms
2101         <productname>SINIX</>, <productname>Sun3</>, and
2102         <productname>NS32K</> (Robert Haas)
2103        </para>
2104       </listitem>
2105
2106       <listitem>
2107        <para>
2108         Remove <acronym>IRIX</> port (Robert Haas)
2109        </para>
2110       </listitem>
2111
2112       <listitem>
2113        <para>
2114         Reduce the number of semaphores required by
2115         <option>--disable-spinlocks</> (Robert Haas)
2116        </para>
2117       </listitem>
2118
2119       <listitem>
2120        <para>
2121         Rewrite <application>duplicate_oids</> Unix shell script in
2122         <application>Perl</> (Andrew Dunstan)
2123        </para>
2124       </listitem>
2125
2126       <listitem>
2127        <para>
2128         Add Test Anything Protocol (<acronym>TAP</>) tests for client
2129         programs (Peter Eisentraut)
2130        </para>
2131       </listitem>
2132
2133       <listitem>
2134        <para>
2135         Add make targets <option>check-tests</> and
2136         <option>installcheck-tests</> which allow per-test specification
2137         (Andrew Dunstan)
2138        </para>
2139       </listitem>
2140
2141       <listitem>
2142        <para>
2143         Remove <option>maintainer-check</> makefile rule (Peter Eisentraut)
2144        </para>
2145
2146        <para>
2147         Its functionality is now done by the default build rules.
2148        </para>
2149       </listitem>
2150
2151       <listitem>
2152        <para>
2153         Improve support for <envar>VPATH</> builds of <acronym>PGXS</>
2154         modules  (C&eacute;dric Villemain, Andrew Dunstan)
2155        </para>
2156       </listitem>
2157
2158       <listitem>
2159        <para>
2160         Upgrade to Autoconf 2.69 (Peter Eisentraut)
2161        </para>
2162       </listitem>
2163
2164       <listitem>
2165        <para>
2166         Add configure flag that appends custom text to the
2167         <envar>PG_VERSION</> string (Oskari Saarenmaa)
2168        </para>
2169
2170        <para>
2171         This is useful for packagers building custom binaries.
2172        </para>
2173       </listitem>
2174
2175       <listitem>
2176        <para>
2177         Improve DocBook <acronym>XML</> validity (Peter Eisentraut)
2178        </para>
2179       </listitem>
2180
2181       <listitem>
2182        <para>
2183         Various security and sanity fixes reported by the
2184         <productname>Coverity</> scanner (Stephen Frost)
2185        </para>
2186       </listitem>
2187
2188       <listitem>
2189        <para>
2190         Improve <application>valgrind</> error reporting (Noah Misch)
2191        </para>
2192       </listitem>
2193
2194       <listitem>
2195        <para>
2196         Improve <application>Emacs</> configuration file
2197         <filename>emacs.samples</> (Peter Eisentraut)
2198        </para>
2199
2200        <para>
2201         Also add <filename>.dir-locals.el</> to the top of the source tree.
2202        </para>
2203       </listitem>
2204
2205       <listitem>
2206        <para>
2207         Allow <application>pgindent</> to be supplied a command-line list
2208         of typedefs (Bruce Momjian)
2209        </para>
2210
2211        <para>
2212         <application>Pgindent</> is also now smarter about blank lines
2213         around preprocessor conditionals.
2214        </para>
2215       </listitem>
2216
2217       <listitem>
2218        <para>
2219         Avoid most uses of dlltool in <productname>Cygwin</> and
2220         <productname>Mingw</> builds (Marco Atzeri, Hiroshi Inoue)
2221        </para>
2222       </listitem>
2223
2224       <listitem>
2225        <para>
2226         Allow client-only installs for <acronym>MSVC</> (Windows) builds (MauMau)
2227        </para>
2228       </listitem>
2229
2230      </itemizedlist>
2231
2232    </sect3>
2233
2234    <sect3>
2235     <title>Additional Modules</title>
2236
2237     <itemizedlist>
2238
2239       <listitem>
2240        <para>
2241         Add <link linkend="pgprewarm"><application>pg_prewarm</></link>
2242         extension to preload relation data into the shared buffer cache
2243         (Robert Haas)
2244        </para>
2245
2246        <para>
2247         This is useful at server start to produce more consistent
2248         performance.
2249        </para>
2250       </listitem>
2251
2252       <listitem>
2253        <para>
2254         Add <acronym>UUID</> random number generator
2255         <function>gen_random_uuid()</> to <link
2256         linkend="pgcrypto"><application>pgcrypto</></link> (Oskari
2257         Saarenmaa)
2258        </para>
2259
2260        <para>
2261         This allows the creation of version 4 <acronym>UUID</>s without
2262         requiring the installation of uuid-ossp.
2263        </para>
2264       </listitem>
2265
2266       <listitem>
2267        <para>
2268         Add option to include trigger execution time to <link
2269         linkend="auto-explain"><application>auto_explain</></link>
2270         (Horiguchi Kyotaro)
2271        </para>
2272       </listitem>
2273
2274       <listitem>
2275        <para>
2276         Fix <link linkend="pgstattuple"><application>pgstattuple</></link>
2277         to not report rows from uncommitted transactions as dead
2278         (Robert Haas)
2279        </para>
2280       </listitem>
2281
2282       <listitem>
2283        <para>
2284         Have <link linkend="pgstattuple"><application>pgstattuple</></link>
2285         functions use regclass-type arguments (Satoshi Nagayasu)
2286        </para>
2287
2288        <para>
2289         While text-type arguments are still supported, they will be
2290         removed in a later major release.
2291        </para>
2292       </listitem>
2293
2294       <listitem>
2295        <para>
2296         Improve consistency of <link
2297         linkend="pgrowlocks"><application>pgrowlocks</></link> output to
2298         honor snapshot rules more consistently (Robert Haas)
2299        </para>
2300       </listitem>
2301
2302       <listitem>
2303        <para>
2304         Improve <link linkend="pgtrgm"><application>pg_trgm</>'s</link>
2305         generation of trigrams for indexed regular expression searches by
2306         discouraging the indexing of trigrams containing whitespace (Alexander
2307         Korotkov)
2308        </para>
2309       </listitem>
2310
2311       <listitem>
2312        <para>
2313         Store <link linkend="cube"><type>cube</></link> data more compactly
2314         (Stas Kelvich)
2315        </para>
2316
2317        <para>
2318         Existing data must be dumped/restored to use the new format.
2319         The old format can still be read.
2320        </para>
2321       </listitem>
2322
2323       <listitem>
2324        <para>
2325         Reduce <link linkend="vacuumlo"><application>vacuumlo</></link>
2326         client-side memory usage by using a cursor (Andrew Dunstan)
2327        </para>
2328       </listitem>
2329
2330       <listitem>
2331        <para>
2332         Dramatically reduce memory consumption in <link
2333         linkend="pgupgrade"><application>pg_upgrade</></link> (Bruce
2334         Momjian)
2335        </para>
2336       </listitem>
2337
2338       <listitem>
2339        <para>
2340         Pass <link linkend="pgupgrade"><application>pg_upgrade</></link>
2341         user names (<option>-U</>) to analyze scripts (Bruce Momjian)
2342        </para>
2343       </listitem>
2344
2345     </itemizedlist>
2346
2347     <sect4>
2348      <title><link linkend="pgbench"><application>pgbench</></link></title>
2349
2350      <itemizedlist>
2351
2352       <listitem>
2353        <para>
2354         Remove line length limit for <application>pgbench</> scripts (Sawada
2355         Masahiko)
2356        </para>
2357
2358        <para>
2359         The previous line limit was <envar>BUFSIZ</>.
2360        </para>
2361       </listitem>
2362
2363       <listitem>
2364        <para>
2365         Add <application>pgbench</> option (<option>--rate</>) to control
2366         the transaction rate (Fabien Coelho)
2367        </para>
2368       </listitem>
2369
2370       <listitem>
2371        <para>
2372         Add <option>--progress</> output option to <application>pgbench</> (Fabien Coelho)
2373        </para>
2374       </listitem>
2375
2376       <listitem>
2377        <para>
2378         Add long options to <application>pgbench</> (Fabien Coelho)
2379        </para>
2380       </listitem>
2381
2382      </itemizedlist>
2383
2384     </sect4>
2385
2386     <sect4>
2387      <title><link linkend="pgstatstatements"><application>pg_stat_statements</></link></title>
2388
2389      <itemizedlist>
2390
2391       <listitem>
2392        <para>
2393         Have <application>pg_stat_statements</> use a flat file for query
2394         text storage (Peter Geoghegan)
2395        </para>
2396
2397        <para>
2398         This removes the limitation on query text length, and allows a
2399         higher default number of unique statements to be tracked.
2400        </para>
2401       </listitem>
2402
2403       <listitem>
2404        <para>
2405         Allow reporting of <application>pg_stat_statements</>'s internal
2406         query hash identifier (Daniel Farina, Sameer Thakur, Peter
2407         Geoghegan)
2408        </para>
2409       </listitem>
2410
2411       <listitem>
2412        <para>
2413         Add the ability to retrieve all <application>pg_stat_statements</>
2414         information except the query text (Peter Geoghegan)
2415        </para>
2416
2417        <para>
2418         This allows monitoring tools to only fetch query text for newly
2419         created entries, as reported in <structfield>queryid</>.
2420        </para>
2421       </listitem>
2422
2423      </itemizedlist>
2424
2425     </sect4>
2426
2427    </sect3>
2428
2429   </sect2>
2430  </sect1>