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