Commit 5e9d7b22 authored by Tom Lane's avatar Tom Lane

Make an editing pass over v11 release notes.

Set the release date.  Do a bunch of copy-editing and markup improvement,
rearrange some stuff into what seemed a more sensible order, move some
things that did not seem to be in the right section.
parent 240cd6bc
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<formalpara> <formalpara>
<title>Release date:</title> <title>Release date:</title>
<para>2018-10-?? (CURRENT AS OF 2018-09-20)</para> <para>2018-10-18</para>
</formalpara> </formalpara>
<sect2> <sect2>
...@@ -31,26 +31,26 @@ ...@@ -31,26 +31,26 @@
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<command>UPDATE</command> statements that change a partition key Support for <literal>PRIMARY KEY</literal>, <literal>FOREIGN
now move affected rows to the appropriate partitions KEY</literal>, indexes, and triggers on partitioned tables
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Improved <command>SELECT</command> performance from enhanced partition Allow creation of a <quote>default</quote> partition for storing
elimination strategies during query processing and execution data that does not match any of the remaining partitions
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Support for <literal>PRIMARY KEY</literal>, <literal>FOREIGN <command>UPDATE</command> statements that change a partition key
KEY</literal>, indexes, and triggers on partitioned tables column now move affected rows to the appropriate partitions
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Having a "default" partition for storing data that does not match any Improved <command>SELECT</command> performance due to enhanced
of the remaining partitions partition elimination strategies during query processing
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
...@@ -63,21 +63,22 @@ ...@@ -63,21 +63,22 @@
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
B-tree indexes can now be built in parallel with <command>CREATE INDEX</command> can now use parallel processing
<command>CREATE INDEX</command> while building B-tree indexes
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Parallelized <command>CREATE TABLE .. AS</command>, Parallelization is now possible in <command>CREATE TABLE
... AS</command>,
<command>CREATE MATERIALIZED VIEW</command>, and certain <command>CREATE MATERIALIZED VIEW</command>, and certain
queries using <literal>UNION</literal> queries using <literal>UNION</literal>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Performance improvements for parallelized hash joins and parallelized Parallelized hash joins and parallelized sequential scans now
sequential scans perform better
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
...@@ -86,17 +87,14 @@ ...@@ -86,17 +87,14 @@
<listitem> <listitem>
<para> <para>
SQL stored procedures that support embedded transactions. Stored SQL stored procedures that support embedded transactions
procedures can be created with <link linkend="sql-createprocedure">
<command>CREATE PROCEDURE</command></link> and executed with
<link linkend="sql-call"><command>CALL</command></link>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Optional Just-in-Time (JIT) compilation of some SQL code, including Optional Just-in-Time (JIT) compilation for some SQL code, speeding
support for fast evaluation of expressions evaluation of expressions
</para> </para>
</listitem> </listitem>
...@@ -111,7 +109,7 @@ ...@@ -111,7 +109,7 @@
<listitem> <listitem>
<para> <para>
Covering indexes, which can be utilized using the Covering indexes can now be created, using the
<literal>INCLUDE</literal> clause of <command>CREATE INDEX</command> <literal>INCLUDE</literal> clause of <command>CREATE INDEX</command>
</para> </para>
</listitem> </listitem>
...@@ -119,7 +117,7 @@ ...@@ -119,7 +117,7 @@
<listitem> <listitem>
<para> <para>
Many other useful performance improvements, including making Many other useful performance improvements, including making
<command>ALTER TABLE .. ADD COLUMN</command> with a <command>ALTER TABLE ... ADD COLUMN</command> with a
non-null column default faster non-null column default faster
</para> </para>
</listitem> </listitem>
...@@ -157,74 +155,48 @@ ...@@ -157,74 +155,48 @@
--> -->
<para> <para>
Have <link Make <link
linkend="app-pgdump"><application>pg_dump</application></link> linkend="app-pgdump"><application>pg_dump</application></link>
dump all aspects of a database (Haribabu Kommi) dump the properties of a database, not just its contents
(Haribabu Kommi)
</para> </para>
<para> <para>
Previously database attributes like Previously, attributes of the database itself, such as database-level
<command>GRANT</command>/<command>REVOKE</command> permissions and <command>GRANT</command>/<command>REVOKE</command> permissions and
<command>ALTER DATABASE SET</command> and <command>ALTER ROLE IN <command>ALTER DATABASE SET</command> variable settings, were only
DATABASE SET</command> variable settings were only dumped by <link dumped by <link linkend="app-pg-dumpall"><application>pg_dumpall</application></link>.
linkend="app-pg-dumpall"><application>pg_dumpall</application></link>.
Now <command>pg_dump --create</command> and Now <command>pg_dump --create</command> and
<command>pg_restore --create</command> will restore all <command>pg_restore --create</command> will restore these database
database aspects. <command>pg_dumpall -g</command> will properties in addition to the objects within the
now only output role and tablespace-related attributes. database. <command>pg_dumpall -g</command> now only dumps role-
<application>pg_dumpall</application>'s output (without and tablespace-related attributes.
<application>pg_dumpall</application>'s complete output (without
<option>-g</option>) is unchanged. <option>-g</option>) is unchanged.
</para> </para>
<para> <para>
<application>pg_dump</application> and <application>pg_dump</application> and
<application>pg_restore</application>, without <application>pg_restore</application>, without
<option>--create</option>, no longer dump/restore database comments <option>--create</option>, no longer dump/restore database-level
and security labels. comments and security labels; those are now treated as properties of
</para> the database.
<para>
<command>pg_dumpall --clean</command> now restores the "postgres"
and "template1" databases with the original locale and encoding
settings.
</para> </para>
<para> <para>
A restore of <application>pg_dumpall</application> will now create <application>pg_dumpall</application>'s output script will now always
databases with their original locale and encoding, and will fail if create databases with their original locale and encoding, and hence
the creation fails. Previously <command>CREATE DATABASE</command> will fail if the locale or encoding name is unknown to the
would be dumped without such specifications if the database locale destination system. Previously <command>CREATE DATABASE</command>
would be emitted without these specifications if the database locale
and encoding matched the old cluster's defaults. and encoding matched the old cluster's defaults.
</para> </para>
</listitem>
<listitem>
<!--
2017-08-16 [9b5140fb5] Correct representation of foreign tables in information
-->
<para>
Correct information schema column <link
linkend="infoschema-tables"><structname>tables</structname>.<structfield>table_type</structfield></link>
to return <literal>FOREIGN</literal> instead of <literal>FOREIGN
TABLE</literal> (Peter Eisentraut)
</para>
<para> <para>
This new output matches the SQL standard. <command>pg_dumpall --clean</command> now restores the original
</para> locale and encoding settings of the <literal>postgres</literal>
</listitem> and <literal>template1</literal> databases, as well as those of
user-created databases.
<listitem>
<!--
2017-09-20 [be87b70b6] Sync process names between ps and pg_stat_activity
-->
<para>
Change the ps process display
labels for background workers to match the <link
linkend="pg-stat-activity-view"><structname>pg_stat_activity</structname>.<structfield>backend_type</structfield></link>
labels (Peter Eisentraut)
</para> </para>
</listitem> </listitem>
...@@ -257,6 +229,24 @@ ...@@ -257,6 +229,24 @@
<listitem> <listitem>
<!-- <!--
2018-09-04 [fb466d7b5] Fully enforce uniqueness of constraint names.
-->
<para>
Fully enforce uniqueness of table and domain constraint names
(Tom Lane)
</para>
<para>
<productname>PostgreSQL</productname> expects the names of a table's
constraints to be distinct, and likewise for the names of a domain's
constraints. However, there was not rigid enforcement of this, and
previously there were corner cases where duplicate names could be
created.
</para>
</listitem>
<listitem>
<!--
2018-04-29 [61b200e2f] Avoid wrong results for power() with NaN input on some p 2018-04-29 [61b200e2f] Avoid wrong results for power() with NaN input on some p
2018-04-29 [6bdf1303b] Avoid wrong results for power() with NaN input on more p 2018-04-29 [6bdf1303b] Avoid wrong results for power() with NaN input on more p
2018-05-17 [d1fc750b5] Make numeric power() handle NaNs according to the modern 2018-05-17 [d1fc750b5] Make numeric power() handle NaNs according to the modern
...@@ -299,7 +289,7 @@ ...@@ -299,7 +289,7 @@
used to return <literal>134</literal>. It will now used to return <literal>134</literal>. It will now
return <literal>1234</literal>. <literal>L</literal> and return <literal>1234</literal>. <literal>L</literal> and
<literal>TH</literal> now only consume characters that are not <literal>TH</literal> now only consume characters that are not
digits, positive/negative signs, decimal points, and commas. digits, positive/negative signs, decimal points, or commas.
</para> </para>
</listitem> </listitem>
...@@ -317,7 +307,9 @@ ...@@ -317,7 +307,9 @@
</para> </para>
<para> <para>
Previously _bytes_ were skipped. Previously they skipped one <emphasis>byte</emphasis> for each byte
of template character, resulting in strange behavior if either string
contained multibyte characters.
</para> </para>
</listitem> </listitem>
...@@ -364,10 +356,11 @@ ...@@ -364,10 +356,11 @@
--> -->
<para> <para>
In the <link linkend="protocol-query-concepts">Extended Query In the <link linkend="protocol-query-concepts">extended query
Protocol</link>, have <varname>statement_timeout</varname> protocol</link>,
apply to each Execute message, not to all commands before Sync make <link linkend="guc-statement-timeout"><varname>statement_timeout</varname></link>
(Tatsuo Ishii, Andres Freund) apply to each Execute message separately, not to all commands before
Sync (Tatsuo Ishii, Andres Freund)
</para> </para>
</listitem> </listitem>
...@@ -377,8 +370,8 @@ ...@@ -377,8 +370,8 @@
--> -->
<para> <para>
Remove <structfield>relhaspkey</structfield> column from system Remove the <structfield>relhaspkey</structfield> column from system
table <structname>pg_class</structname> (Peter Eisentraut) catalog <structname>pg_class</structname> (Peter Eisentraut)
</para> </para>
<para> <para>
...@@ -393,29 +386,79 @@ ...@@ -393,29 +386,79 @@
--> -->
<para> <para>
Replace system table <structname>pg_proc</structname>'s Replace system catalog <structname>pg_proc</structname>'s
<structfield>proisagg</structfield> and <structfield>proisagg</structfield> and
<structfield>proiswindow</structfield> with <structfield>proiswindow</structfield> columns with
<structfield>prokind</structfield> (Peter Eisentraut) <structfield>prokind</structfield> (Peter Eisentraut)
</para> </para>
<para> <para>
This new column more clearly identifies functions, procedures, This new column more clearly distinguishes functions, procedures,
aggregates, and window functions. aggregates, and window functions.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2017-08-16 [9b5140fb5] Correct representation of foreign tables in information
-->
<para>
Correct information schema column <link
linkend="infoschema-tables"><structname>tables</structname>.<structfield>table_type</structfield></link>
to return <literal>FOREIGN</literal> instead of <literal>FOREIGN
TABLE</literal> (Peter Eisentraut)
</para>
<para>
This new output matches the SQL standard.
</para>
</listitem>
<listitem>
<!--
2017-09-20 [be87b70b6] Sync process names between ps and pg_stat_activity
-->
<para>
Change the ps process display
labels for background workers to match the <link
linkend="pg-stat-activity-view"><structname>pg_stat_activity</structname>.<structfield>backend_type</structfield></link>
labels (Peter Eisentraut)
</para>
</listitem>
<listitem>
<!--
2017-11-09 [ae20b23a9] Refactor permissions checks for large objects. 2017-11-09 [ae20b23a9] Refactor permissions checks for large objects.
2017-11-14 [6d776522d] Document changes in large-object privilege checking. 2017-11-14 [6d776522d] Document changes in large-object privilege checking.
--> -->
<para> <para>
Cause large object permission checks Cause large object permission checks
to happen on large object open, <link to happen during large object open, <link
linkend="lo-open"><function>lo_open()</function></link>, not linkend="lo-open"><function>lo_open()</function></link>, not
read/write (Tom Lane, Michael Paquier) when a read or write is attempted (Tom Lane, Michael Paquier)
</para>
<para>
If write access is requested and not available, an error will now be
thrown even if the large object is never written to.
</para>
</listitem>
<listitem>
<!--
2018-08-09 [87330e21c] Restrict access to reindex of shared catalogs for non-pr
-->
<para>
Prevent non-superusers from reindexing shared catalogs
(Michael Paquier, Robert Haas)
</para>
<para>
Previously, database owners were also allowed to do this, but
now it is considered outside the bounds of their privileges.
</para> </para>
</listitem> </listitem>
...@@ -425,17 +468,18 @@ ...@@ -425,17 +468,18 @@
--> -->
<para> <para>
Remove deprecated contrib/adminpack functions Remove deprecated <link
linkend="adminpack"><filename>adminpack</filename></link> functions
<function>pg_file_read()</function>, <function>pg_file_read()</function>,
<function>pg_file_length()</function>, and <function>pg_file_length()</function>, and
<function>pg_logfile_rotate()</function> (Stephen Frost) <function>pg_logfile_rotate()</function> (Stephen Frost)
</para> </para>
<para> <para>
These functions are now present by default. Old <link Equivalent functionality is now present in the core backend.
linkend="adminpack"><application>adminpack</application></link> Existing <filename>adminpack</filename> installs will continue to have
installs will continue to have access to these functions until access to these functions until they are updated via <command>ALTER
they are updated via <command>ALTER EXTENSION ... UPDATE</command>. EXTENSION ... UPDATE</command>.
</para> </para>
</listitem> </listitem>
...@@ -450,8 +494,10 @@ ...@@ -450,8 +494,10 @@
</para> </para>
<para> <para>
Previously index options names like ("FillFactor" = 50) were Previously, option names in certain SQL commands were forcibly
automatically lower-cased. This quoted capitalization will now lower-cased even if entered with double quotes; thus for example
<literal>"FillFactor"</literal> would be accepted as an index storage
option, though properly its name is lower-case. Such cases will now
generate an error. generate an error.
</para> </para>
</listitem> </listitem>
...@@ -462,7 +508,7 @@ ...@@ -462,7 +508,7 @@
--> -->
<para> <para>
Remove server variable <varname>replacement_sort_tuples</varname> Remove server parameter <varname>replacement_sort_tuples</varname>
(Peter Geoghegan) (Peter Geoghegan)
</para> </para>
...@@ -512,57 +558,70 @@ ...@@ -512,57 +558,70 @@
<listitem> <listitem>
<!-- <!--
2018-02-02 [9aef17316] Refactor code for partition bound searching 2017-11-09 [1aba8e651] Add hash partitioning.
2018-02-23 [f724022d0] Revise API for partition bound search functions.
2018-04-06 [9fdb675fc] Faster partition pruning
2018-04-23 [055fb8d33] Add GUC enable_partition_pruning
--> -->
<para> <para>
Allow faster partition elimination during query processing (Amit Allow the creation of partitions based on hashing a key column
Langote, David Rowley, Dilip Kumar) (Amul Sul)
</para> </para>
</listitem>
<listitem>
<!--
2018-02-19 [eb7ed3f30] Allow UNIQUE indexes on partitioned tables
2018-03-26 [555ee77a9] Handle INSERT .. ON CONFLICT with partitioned tables
-->
<para> <para>
This speeds access to partitioned tables with many partitions. Allow <literal>UNIQUE</literal> indexes on partitioned tables if
the partition key is part of the index (&Aacute;lvaro Herrera,
Amit Langote)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2018-04-07 [499be013d] Support partition pruning at execution time 2018-01-19 [8b08f7d48] Local partitioned indexes
--> -->
<para> <para>
Allow partition elimination during query execution (David Rowley, Allow indexes on a partitioned table to be automatically created
Beena Emerson) in new child partitions (&Aacute;lvaro Herrera)
</para> </para>
<para> <para>
Previously partition elimination could only happen at planning The new command <link linkend="sql-alterindex"><command>ALTER
time, meaning many joins and prepared queries could not use INDEX ATTACH PARTITION</command></link> allows indexes to be
partition elimination. attached to partitions. This does not behave as a global index
since the contents are private to each index.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2017-11-09 [1aba8e651] Add hash partitioning. 2018-04-04 [3de241dba] Foreign keys on partitioned tables
--> -->
<para> <para>
Allow the creation of partitions based on hashing a key (Amul Sul) Allow foreign keys on partitioned tables (&Aacute;lvaro Herrera)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2018-01-19 [2f1784410] Allow UPDATE to move rows between partitions. 2018-03-23 [86f575948] Allow FOR EACH ROW triggers on partitioned tables
--> -->
<para> <para>
Allow updated rows to automatically move to new partitions based Allow <literal>FOR EACH ROW</literal> triggers on partitioned
on the new row contents (Amit Khandekar) tables (&Aacute;lvaro Herrera)
</para>
<para>
Creation of a trigger on a partitioned table automatically creates
triggers on all existing partitions, and on newly-created ones.
This also allows deferred unique constraints on partitioned tables.
</para> </para>
</listitem> </listitem>
...@@ -578,83 +637,71 @@ ...@@ -578,83 +637,71 @@
</para> </para>
<para> <para>
The default partition can store rows that don't match any of the The default partition will store rows that don't match any of the
other defined partitions, and is searched accordingly. other defined partitions, and is searched accordingly.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2018-02-19 [eb7ed3f30] Allow UNIQUE indexes on partitioned tables 2018-01-19 [2f1784410] Allow UPDATE to move rows between partitions.
2018-03-26 [555ee77a9] Handle INSERT .. ON CONFLICT with partitioned tables
--> -->
<para> <para>
Allow <literal>UNIQUE</literal> indexes on partitioned tables if Allow updated rows to automatically move to new partitions based
the partition key guarantees uniqueness (&Aacute;lvaro Herrera, on the new row contents (Amit Khandekar)
Amit Langote)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2018-01-19 [8b08f7d48] Local partitioned indexes 2018-04-06 [3d956d956] Allow insert and update tuple routing and COPY for forei
--> -->
<para> <para>
Allow indexes on a partitioned table to be automatically created Allow <command>INSERT</command>, <command>UPDATE</command>, and
in any child partitions (&Aacute;lvaro Herrera) <command>COPY</command> on partitioned tables to properly route
</para> rows to foreign partitions (Etsuro Fujita, Amit Langote)
<para>
The new command <link linkend="sql-alterindex"><command>ALTER
INDEX ATTACH PARTITION</command></link> allows indexes to be
attached to partitions. This does not behave as a global index
since the contents are private to each index.
</para> </para>
</listitem>
<listitem>
<!--
2018-04-04 [3de241dba] Foreign keys on partitioned tables
-->
<para> <para>
Allow foreign keys on partitioned tables (&Aacute;lvaro Herrera) This is supported by <filename>postgres_fdw</filename>
foreign tables.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2018-04-06 [3d956d956] Allow insert and update tuple routing and COPY for forei 2018-02-02 [9aef17316] Refactor code for partition bound searching
2018-02-23 [f724022d0] Revise API for partition bound search functions.
2018-04-06 [9fdb675fc] Faster partition pruning
2018-04-23 [055fb8d33] Add GUC enable_partition_pruning
--> -->
<para> <para>
Allow <command>INSERT</command>, <command>UPDATE</command>, and Allow faster partition elimination during query processing (Amit
<command>COPY</command> on partitioned tables to properly route Langote, David Rowley, Dilip Kumar)
rows to foreign partitions (Etsuro Fujita, Amit Langote)
</para> </para>
<para> <para>
This is supported by <application>postgres_fdw</application> This speeds access to partitioned tables with many partitions.
foreign tables.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2018-03-23 [86f575948] Allow FOR EACH ROW triggers on partitioned tables 2018-04-07 [499be013d] Support partition pruning at execution time
--> -->
<para> <para>
Allow <literal>FOR EACH ROW</literal> triggers on partitioned Allow partition elimination during query execution (David Rowley,
tables (&Aacute;lvaro Herrera) Beena Emerson)
</para> </para>
<para> <para>
Creation of a trigger on partitioned tables automatically creates Previously partition elimination only happened at planning
triggers on all partition tables, and on newly-created ones. time, meaning many joins and prepared queries could not use
This also allows deferred unique constraints on partitioned tables. partition elimination.
</para> </para>
</listitem> </listitem>
...@@ -703,7 +750,7 @@ ...@@ -703,7 +750,7 @@
<para> <para>
Allow <link Allow <link
linkend="postgres-fdw"><application>postgres_fdw</application></link> linkend="postgres-fdw"><filename>postgres_fdw</filename></link>
to push down aggregates to foreign tables that are partitions to push down aggregates to foreign tables that are partitions
(Jeevan Chalke) (Jeevan Chalke)
</para> </para>
...@@ -804,9 +851,9 @@ same commits as above ...@@ -804,9 +851,9 @@ same commits as above
--> -->
<para> <para>
Add server option <link Add server parameter <link
linkend="guc-parallel-leader-participation"><varname>parallel_leader_participation</varname></link> linkend="guc-parallel-leader-participation"><varname>parallel_leader_participation</varname></link>
to control if the leader executes subplans (Thomas Munro) to control whether the leader also executes subplans (Thomas Munro)
</para> </para>
<para> <para>
...@@ -821,7 +868,7 @@ same commits as above ...@@ -821,7 +868,7 @@ same commits as above
<para> <para>
Allow parallelization of commands <command>CREATE TABLE Allow parallelization of commands <command>CREATE TABLE
.. AS</command>, <command>SELECT INTO</command>, and ... AS</command>, <command>SELECT INTO</command>, and
<command>CREATE MATERIALIZED VIEW</command> (Haribabu Kommi) <command>CREATE MATERIALIZED VIEW</command> (Haribabu Kommi)
</para> </para>
</listitem> </listitem>
...@@ -844,7 +891,7 @@ same commits as above ...@@ -844,7 +891,7 @@ same commits as above
--> -->
<para> <para>
Add reporting of parallel worker sort activity to Add reporting of parallel workers' sort activity in
<command>EXPLAIN</command> (Robert Haas, Tom Lane) <command>EXPLAIN</command> (Robert Haas, Tom Lane)
</para> </para>
...@@ -865,16 +912,18 @@ same commits as above ...@@ -865,16 +912,18 @@ same commits as above
--> -->
<para> <para>
Allow indexes to <link Allow B-tree indexes to include columns that are not part of the
linkend="sql-createindex"><literal>INCLUDE</literal></link> columns search key or unique constraint, but are available to be read by
that are not part of the unique constraint but are available index-only scans (Anastasia Lubennikova, Alexander Korotkov, Teodor
for index-only scans (Anastasia Lubennikova, Alexander Korotkov, Sigaev)
Teodor Sigaev)
</para> </para>
<para> <para>
This is also useful for including columns that don't have btree This is enabled by the new <literal>INCLUDE</literal> clause of <link
support. linkend="sql-createindex"><command>CREATE INDEX</command></link>.
It facilitates building <quote>covering indexes</quote> that optimize
specific types of queries. Columns can be included even if their
data types don't have B-tree support.
</para> </para>
</listitem> </listitem>
...@@ -885,9 +934,8 @@ same commits as above ...@@ -885,9 +934,8 @@ same commits as above
--> -->
<para> <para>
Remember the highest btree index page to optimize future Improve performance of monotonically increasing index additions
monotonically increasing index additions (Pavan Deolasee, Peter (Pavan Deolasee, Peter Geoghegan)
Geoghegan)
</para> </para>
</listitem> </listitem>
...@@ -897,12 +945,7 @@ same commits as above ...@@ -897,12 +945,7 @@ same commits as above
--> -->
<para> <para>
Allow entire hash index pages to be scanned (Ashutosh Sharma) Improve performance of hash index scans (Ashutosh Sharma)
</para>
<para>
Previously for each hash index entry, we need to refind the scan
position within the page. This cuts down on lock/unlock traffic.
</para> </para>
</listitem> </listitem>
...@@ -919,7 +962,8 @@ same commits as above ...@@ -919,7 +962,8 @@ same commits as above
</para> </para>
<para> <para>
This reduces the likelihood of serialization conflicts. This reduces the likelihood of serialization conflicts in
serializable-mode transactions.
</para> </para>
</listitem> </listitem>
...@@ -949,13 +993,14 @@ same commits as above ...@@ -949,13 +993,14 @@ same commits as above
--> -->
<para> <para>
Add <type>TEXT</type> prefix operator ^@ which is supported by Add prefix-match
SP-GiST (Ildus Kurbangaliev) operator <type>text</type> <literal>^@</literal> <type>text</type>,
which is supported by SP-GiST (Ildus Kurbangaliev)
</para> </para>
<para> <para>
This is similar to using <literal>LIKE</literal> 'word%' with This is similar to using <replaceable>var</replaceable> <literal>LIKE
btree indexes, but is more efficient. 'word%'</literal> with a btree index, but it is more efficient.
</para> </para>
</listitem> </listitem>
...@@ -999,17 +1044,17 @@ same commits as above ...@@ -999,17 +1044,17 @@ same commits as above
--> -->
<para> <para>
Improve the selection of the optimizer statistics' Improve selection of the most common values for statistics
most-common-values (Jeff Janes, Dean Rasheed) (Jeff Janes, Dean Rasheed)
</para> </para>
<para> <para>
Previously most-common-values (<acronym>MCV</acronym>) were Previously the most common values (<acronym>MCV</acronym>s) were
chosen based on their significance compared to all column identified based on their frequency compared to all column
values. Now, <acronym>MCV</acronym> are chosen based on their values. Now, <acronym>MCV</acronym>s are chosen based on their
significance compared to the non-<acronym>MCV</acronym> values. frequency compared to the non-<acronym>MCV</acronym> values.
This improves the statistics for uniform (fewer) and non-uniform This improves the robustness of the algorithm for both uniform and
(more) distributions. non-uniform distributions.
</para> </para>
</listitem> </listitem>
...@@ -1019,14 +1064,16 @@ same commits as above ...@@ -1019,14 +1064,16 @@ same commits as above
--> -->
<para> <para>
Improve selectivity estimates for &gt;= and &lt;= when the Improve selectivity estimates for <literal>&gt;=</literal>
constants are not common values (Tom Lane) and <literal>&lt;=</literal> (Tom Lane)
</para> </para>
<para> <para>
Previously such cases used the same selectivity as &gt; and Previously such cases used the same selectivity estimates
&lt;, respectively. This change is particularly useful for as <literal>&gt;</literal> and <literal>&lt;</literal>, respectively,
<literal>BETWEEN</literal> with small ranges. unless the comparison constants are <acronym>MCV</acronym>s.
This change is particularly helpful for queries
involving <literal>BETWEEN</literal> with small ranges.
</para> </para>
</listitem> </listitem>
...@@ -1036,8 +1083,10 @@ same commits as above ...@@ -1036,8 +1083,10 @@ same commits as above
--> -->
<para> <para>
Optimize var = var to var <literal>IS NOT NULL</literal> where Reduce <replaceable>var</replaceable> <literal>=</literal>
equivalent (Tom Lane) <replaceable>var</replaceable>
to <replaceable>var</replaceable> <literal>IS NOT NULL</literal>
where equivalent (Tom Lane)
</para> </para>
<para> <para>
...@@ -1051,7 +1100,7 @@ same commits as above ...@@ -1051,7 +1100,7 @@ same commits as above
--> -->
<para> <para>
Improve row count optimizer estimates for <literal>EXISTS</literal> Improve optimizer's row count estimates for <literal>EXISTS</literal>
and <literal>NOT EXISTS</literal> queries (Tom Lane) and <literal>NOT EXISTS</literal> queries (Tom Lane)
</para> </para>
</listitem> </listitem>
...@@ -1062,8 +1111,8 @@ same commits as above ...@@ -1062,8 +1111,8 @@ same commits as above
--> -->
<para> <para>
Add optimizer selectivity costs for <literal>HAVING</literal> Make the optimizer account for evaluation costs and selectivity
clauses (Tom Lane) of <literal>HAVING</literal> clauses (Tom Lane)
</para> </para>
</listitem> </listitem>
...@@ -1085,6 +1134,7 @@ same commits as above ...@@ -1085,6 +1134,7 @@ same commits as above
2018-03-26 [32af96b2b] JIT tuple deforming in LLVM JIT provider. 2018-03-26 [32af96b2b] JIT tuple deforming in LLVM JIT provider.
2018-03-27 [f4f5845b3] Quick adaption of JIT tuple deforming to the fast defaul 2018-03-27 [f4f5845b3] Quick adaption of JIT tuple deforming to the fast defaul
2018-03-28 [9370462e9] Add inlining support to LLVM JIT provider. 2018-03-28 [9370462e9] Add inlining support to LLVM JIT provider.
2018-09-15 [0fdadfb01] In v11, disable JIT by default (it's still enabled by de
--> -->
<para> <para>
...@@ -1095,7 +1145,7 @@ same commits as above ...@@ -1095,7 +1145,7 @@ same commits as above
<para> <para>
This feature requires <application>LLVM</application> to be This feature requires <application>LLVM</application> to be
available, and it is not currently enabled by default, even in available. It is not currently enabled by default, even in
builds that support it. builds that support it.
</para> </para>
</listitem> </listitem>
...@@ -1118,7 +1168,8 @@ same commits as above ...@@ -1118,7 +1168,8 @@ same commits as above
--> -->
<para> <para>
Update the free space map during vacuum (Claudio Freire) Update the free space map during <command>VACUUM</command>
(Claudio Freire)
</para> </para>
<para> <para>
...@@ -1132,8 +1183,8 @@ same commits as above ...@@ -1132,8 +1183,8 @@ same commits as above
--> -->
<para> <para>
Allow vacuum to avoid unnecessary index scans (Masahiko Sawada, Allow <command>VACUUM</command> to avoid unnecessary index scans
Alexander Korotkov) (Masahiko Sawada, Alexander Korotkov)
</para> </para>
</listitem> </listitem>
...@@ -1161,12 +1212,22 @@ same commits as above ...@@ -1161,12 +1212,22 @@ same commits as above
<listitem> <listitem>
<!-- <!--
2018-01-09 [69c3936a1] Expression evaluation based aggregate transition invocat
-->
<para>
Improve the speed of aggregate computations (Andres Freund)
</para>
</listitem>
<listitem>
<!--
2018-02-07 [1bc0100d2] postgres_fdw: Push down UPDATE/DELETE joins to remote se 2018-02-07 [1bc0100d2] postgres_fdw: Push down UPDATE/DELETE joins to remote se
--> -->
<para> <para>
Allow <link Allow <link
linkend="postgres-fdw"><application>postgres_fdw</application></link> linkend="postgres-fdw"><filename>postgres_fdw</filename></link>
to push <command>UPDATE</command>s and <command>DELETE</command>s to push <command>UPDATE</command>s and <command>DELETE</command>s
using joins to foreign servers (Etsuro Fujita) using joins to foreign servers (Etsuro Fujita)
</para> </para>
...@@ -1178,6 +1239,23 @@ same commits as above ...@@ -1178,6 +1239,23 @@ same commits as above
</listitem> </listitem>
<listitem>
<!--
2018-01-21 [1cc4f536e] Support huge pages on Windows
-->
<para>
Add support for <firstterm>large pages</firstterm> on Windows
(Takayuki Tsunakawa, Thomas Munro)
</para>
<para>
This is controlled by the <link
linkend="guc-huge-pages">huge_pages</link> configuration
parameter.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect4> </sect4>
...@@ -1193,10 +1271,10 @@ same commits as above ...@@ -1193,10 +1271,10 @@ same commits as above
--> -->
<para> <para>
Show memory usage in <link Show memory usage in output from <link
linkend="runtime-config-statistics-monitor"><varname>log_statement_stats</varname></link>, linkend="runtime-config-statistics-monitor"><varname>log_statement_stats</varname></link>,
<varname>log_parser_stats</varname>, <varname>log_parser_stats</varname>,
<varname>log_planner_stats</varname>, <varname>log_planner_stats</varname>, and
<varname>log_executor_stats</varname> (Justin Pryzby, Peter <varname>log_executor_stats</varname> (Justin Pryzby, Peter
Eisentraut) Eisentraut)
</para> </para>
...@@ -1208,20 +1286,13 @@ same commits as above ...@@ -1208,20 +1286,13 @@ same commits as above
--> -->
<para> <para>
Add <link Add column <link
linkend="pg-stat-activity-view"><structname>pg_stat_activity</structname>.<structfield>backend_type</structfield></link> linkend="pg-stat-activity-view"><structname>pg_stat_activity</structname>.<structfield>backend_type</structfield></link>
now shows the type of background worker (Peter Eisentraut) to show the type of a background worker (Peter Eisentraut)
</para> </para>
<para> <para>
Add <structfield>bgw_type</structfield> to the background worker The type is also visible in <application>ps</application> output.
C structure (Peter Eisentraut)
</para>
<para>
This is displayed to the user in
<structname>pg_stat_activity</structname>.<structfield>backend_type</structfield>
and <application>ps</application> output.
</para> </para>
</listitem> </listitem>
...@@ -1231,7 +1302,7 @@ same commits as above ...@@ -1231,7 +1302,7 @@ same commits as above
--> -->
<para> <para>
Have <link Make <link
linkend="guc-log-autovacuum-min-duration"><varname>log_autovacuum_min_duration</varname></link> linkend="guc-log-autovacuum-min-duration"><varname>log_autovacuum_min_duration</varname></link>
log skipped tables that are concurrently being dropped (Nathan log skipped tables that are concurrently being dropped (Nathan
Bossart) Bossart)
...@@ -1252,17 +1323,19 @@ same commits as above ...@@ -1252,17 +1323,19 @@ same commits as above
--> -->
<para> <para>
Add information_schema columns related to table constraints and Add <literal>information_schema</literal> columns related to table
triggers (Peter Eisentraut) constraints and triggers (Peter Eisentraut)
</para> </para>
<para> <para>
Specifically, Specifically,
<structname>table_constraints</structname>.<structfield>enforced</structfield>,
<structname>triggers</structname>.<structfield>action_order</structfield>, <structname>triggers</structname>.<structfield>action_order</structfield>,
<structname>triggers</structname>.<structfield>action_reference_old_table</structfield>, <structname>triggers</structname>.<structfield>action_reference_old_table</structfield>,
and and
<structname>triggers</structname>.<structfield>action_reference_new_table</structfield>. <structname>triggers</structname>.<structfield>action_reference_new_table</structfield>
are now populated, where before they were always null. Also,
<structname>table_constraints</structname>.<structfield>enforced</structfield>
now exists but is not yet usefully populated.
</para> </para>
</listitem> </listitem>
...@@ -1301,16 +1374,17 @@ same commits as above ...@@ -1301,16 +1374,17 @@ same commits as above
--> -->
<para> <para>
Allow <acronym>LDAP</acronym> authentication to use ldaps Allow <acronym>LDAP</acronym> authentication to use
(Thomas Munro) encrypted <acronym>LDAP</acronym> (Thomas Munro)
</para> </para>
<para> <para>
We already supported <acronym>LDAP</acronym> over We already supported <acronym>LDAP</acronym> over
<acronym>TLS</acronym> by using ldaptls=1. This new <acronym>TLS</acronym> by using <literal>ldaptls=1</literal>.
<acronym>TLS</acronym> <acronym>LDAP</acronym> method of encrypted This new <acronym>TLS</acronym> <acronym>LDAP</acronym> method for
<acronym>LDAP</acronym> is enabled with ldapscheme=ldaps or encrypted <acronym>LDAP</acronym> is enabled
ldapurl=ldaps://. with <literal>ldapscheme=ldaps</literal>
or <literal>ldapurl=ldaps://</literal>.
</para> </para>
</listitem> </listitem>
...@@ -1320,7 +1394,7 @@ same commits as above ...@@ -1320,7 +1394,7 @@ same commits as above
--> -->
<para> <para>
Improve <acronym>LDAP</acronym> logging of errors (Thomas Munro) Improve logging of <acronym>LDAP</acronym> errors (Thomas Munro)
</para> </para>
</listitem> </listitem>
...@@ -1341,16 +1415,17 @@ same commits as above ...@@ -1341,16 +1415,17 @@ same commits as above
--> -->
<para> <para>
Add default roles which control file system access (Stephen Frost) Add <link linkend="default-roles-table">default roles</link> that
enable file system access (Stephen Frost)
</para> </para>
<para> <para>
Specifically, the new roles are: <link Specifically, the new roles are:
linkend="default-roles-table"><literal>pg_read_server_files</literal></link>, <literal>pg_read_server_files</literal>,
<literal>pg_write_server_files</literal>, <literal>pg_write_server_files</literal>, and
<literal>pg_execute_server_program</literal>. These roles now also <literal>pg_execute_server_program</literal>. These roles now also
control who can use <command>COPY</command> and extension <link control who can use server-side <command>COPY</command> and the <link
linkend="file-fdw"><application>file_fdw</application></link>. linkend="file-fdw"><filename>file_fdw</filename></link> extension.
Previously only superusers could use these functions, and that Previously only superusers could use these functions, and that
is still the default behavior. is still the default behavior.
</para> </para>
...@@ -1390,12 +1465,11 @@ same commits as above ...@@ -1390,12 +1465,11 @@ same commits as above
</para> </para>
<para> <para>
Previously, superusers were exclusively granted access to these Previously, only superusers were granted access to these functions.
functions.
</para> </para>
<para> <para>
Compile-time option <literal>ALLOW_DANGEROUS_LO_FUNCTIONS</literal> The compile-time option <literal>ALLOW_DANGEROUS_LO_FUNCTIONS</literal>
has been removed. has been removed.
</para> </para>
</listitem> </listitem>
...@@ -1408,13 +1482,13 @@ same commits as above ...@@ -1408,13 +1482,13 @@ same commits as above
<para> <para>
Use view owner not session owner when Use view owner not session owner when
preventing non-password access to <link preventing non-password access to <link
linkend="postgres-fdw"><application>postgres_fdw</application></link> linkend="postgres-fdw"><filename>postgres_fdw</filename></link>
tables (Robert Haas) tables (Robert Haas)
</para> </para>
<para> <para>
<productname>PostgreSQL</productname> only allows superusers to <productname>PostgreSQL</productname> only allows superusers to
access <application>postgres_fdw</application> tables without access <filename>postgres_fdw</filename> tables without
passwords, e.g. via <literal>peer</literal>. Previously the passwords, e.g. via <literal>peer</literal>. Previously the
session owner had to be a superuser to allow such access; now session owner had to be a superuser to allow such access; now
the view owner is checked instead. the view owner is checked instead.
...@@ -1471,8 +1545,8 @@ same commits as above ...@@ -1471,8 +1545,8 @@ same commits as above
<para> <para>
Add storage parameter <link Add storage parameter <link
linkend="sql-createtable-storage-parameters"><varname>toast_tuple_target</varname></link> linkend="sql-createtable-storage-parameters"><varname>toast_tuple_target</varname></link>
to control the minimum length before <acronym>TOAST</acronym> to control the minimum tuple length before <acronym>TOAST</acronym>
storage will be considered for new rows (Simon Riggs) storage will be considered (Simon Riggs)
</para> </para>
<para> <para>
...@@ -1489,12 +1563,13 @@ same commits as above ...@@ -1489,12 +1563,13 @@ same commits as above
<para> <para>
Allow server options related to memory and file sizes to be Allow server options related to memory and file sizes to be
specified as number of bytes (Beena Emerson) specified as a number of bytes (Beena Emerson)
</para> </para>
<para> <para>
The new unit is "B". This is in addition to "kB", "MB", "GB" The new unit is <quote>B</quote>. This is in addition to the
and "TB". existing units <quote>kB</quote>, <quote>MB</quote>, <quote>GB</quote>
and <quote>TB</quote>.
</para> </para>
</listitem> </listitem>
...@@ -1514,8 +1589,8 @@ same commits as above ...@@ -1514,8 +1589,8 @@ same commits as above
--> -->
<para> <para>
Allow the <acronym>WAL</acronym> file size to be set via initdb Allow the <acronym>WAL</acronym> file size to be set
(Beena Emerson) during <application>initdb</application> (Beena Emerson)
</para> </para>
<para> <para>
...@@ -1534,8 +1609,8 @@ same commits as above ...@@ -1534,8 +1609,8 @@ same commits as above
</para> </para>
<para> <para>
The retention of <acronym>WAL</acronym> records for only one Retention of <acronym>WAL</acronym> records is only required for one
checkpoint is required. checkpoint.
</para> </para>
</listitem> </listitem>
...@@ -1610,7 +1685,7 @@ same commits as above ...@@ -1610,7 +1685,7 @@ same commits as above
--> -->
<para> <para>
Allow heap pages checksums to be checked during streaming base Allow heap pages' checksums to be checked during streaming base
backup (Michael Banck) backup (Michael Banck)
</para> </para>
</listitem> </listitem>
...@@ -1626,7 +1701,7 @@ same commits as above ...@@ -1626,7 +1701,7 @@ same commits as above
</para> </para>
<para> <para>
This allows efficient advancement replication slots when the This allows efficient advancement of replication slots when the
contents do not need to be consumed. This is performed by contents do not need to be consumed. This is performed by
<function>pg_replication_slot_advance()</function>. <function>pg_replication_slot_advance()</function>.
</para> </para>
...@@ -1665,36 +1740,6 @@ same commits as above ...@@ -1665,36 +1740,6 @@ same commits as above
</sect3> </sect3>
<sect3>
<title><link linkend="sql-window">Window Functions</link></title>
<itemizedlist>
<listitem>
<!--
2018-02-07 [0a459cec9] Support all SQL:2011 options for window frame clauses.
2018-02-24 [8b29e88cd] Add window RANGE support for float4, float8, numeric.
-->
<para>
Add window function features to complete SQL:2011 compliance
(Oliver Ford, Tom Lane)
</para>
<para>
Specifically, allow <literal>RANGE</literal> mode to use
<literal>PRECEDING</literal> and <literal>FOLLOWING</literal> to
specify peer groups with values plus or minus the specified offset.
Add <literal>GROUPS</literal> mode to include plus or minus the
number of peer groups. Frame exclusion syntax was also added.
</para>
</listitem>
</itemizedlist>
</sect3>
<sect3> <sect3>
<title>Utility Commands</title> <title>Utility Commands</title>
...@@ -1707,9 +1752,13 @@ same commits as above ...@@ -1707,9 +1752,13 @@ same commits as above
<para> <para>
Allow <command>ALTER TABLE</command> to add a column with Allow <command>ALTER TABLE</command> to add a column with
a non-null default without a table rewrite (Andrew Dunstan, a non-null default without doing a table rewrite (Andrew Dunstan,
Serge Rielau) Serge Rielau)
</para> </para>
<para>
This is enabled when the default value is a constant.
</para>
</listitem> </listitem>
<listitem> <listitem>
...@@ -1735,8 +1784,8 @@ same commits as above ...@@ -1735,8 +1784,8 @@ same commits as above
</para> </para>
<para> <para>
In <application>psql</application>, \d+ now shows the statistics In <application>psql</application>, <literal>\d+</literal> now shows
target for indexes. the statistics target for indexes.
</para> </para>
</listitem> </listitem>
...@@ -1783,12 +1832,12 @@ same commits as above ...@@ -1783,12 +1832,12 @@ same commits as above
<para> <para>
Add <command>CREATE AGGREGATE</command> option to specify the Add <command>CREATE AGGREGATE</command> option to specify the
behavior of the aggregate finalization function (Tom Lane) behavior of the aggregate's finalization function (Tom Lane)
</para> </para>
<para> <para>
This is useful for allowing aggregate functions to be optimized and This is helpful for allowing user-defined aggregate functions to be
to work as window functions. optimized and to work as window functions.
</para> </para>
</listitem> </listitem>
...@@ -1842,8 +1891,8 @@ same commits as above ...@@ -1842,8 +1891,8 @@ same commits as above
--> -->
<para> <para>
Add casts from jsonb scalars to numeric and boolean data types Add casts from <type>JSONB</type> scalars to numeric and boolean data
(Anastasia Lubennikova) types (Anastasia Lubennikova)
</para> </para>
</listitem> </listitem>
...@@ -1859,6 +1908,28 @@ same commits as above ...@@ -1859,6 +1908,28 @@ same commits as above
<listitem> <listitem>
<!-- <!--
2018-02-07 [0a459cec9] Support all SQL:2011 options for window frame clauses.
2018-02-24 [8b29e88cd] Add window RANGE support for float4, float8, numeric.
-->
<para>
Add all <link linkend="sql-window">window function</link> framing
options specified by SQL:2011 (Oliver Ford, Tom Lane)
</para>
<para>
Specifically, allow <literal>RANGE</literal> mode to use
<literal>PRECEDING</literal> and <literal>FOLLOWING</literal> to
select rows having grouping values within plus or minus the
specified offset. Add <literal>GROUPS</literal> mode to include plus
or minus the number of peer groups. Frame exclusion syntax was also
added.
</para>
</listitem>
<listitem>
<!--
2018-02-22 [10cfce34c] Add user-callable SHA-2 functions 2018-02-22 [10cfce34c] Add user-callable SHA-2 functions
--> -->
...@@ -1907,16 +1978,6 @@ same commits as above ...@@ -1907,16 +1978,6 @@ same commits as above
<listitem> <listitem>
<!-- <!--
2018-01-09 [69c3936a1] Expression evaluation based aggregate transition invocat
-->
<para>
Improve the speed of aggregate computations (Andres Freund)
</para>
</listitem>
<listitem>
<!--
2018-04-05 [1664ae197] Add websearch_to_tsquery 2018-04-05 [1664ae197] Add websearch_to_tsquery
--> -->
...@@ -1934,10 +1995,10 @@ same commits as above ...@@ -1934,10 +1995,10 @@ same commits as above
--> -->
<para> <para>
Add function <link Add functions <link
linkend="textsearch-functions-table"><function>json(b)_to_tsvector()</function></link> linkend="textsearch-functions-table"><function>json(b)_to_tsvector()</function></link>
to create a text search query for matching to create a text search query for matching
<type>JSON</type>/<type>JSONB </type>values (Dmitry Dolgov) <type>JSON</type>/<type>JSONB</type> values (Dmitry Dolgov)
</para> </para>
</listitem> </listitem>
...@@ -1957,6 +2018,8 @@ same commits as above ...@@ -1957,6 +2018,8 @@ same commits as above
2018-02-22 [76b6aa41f] Support parameters in CALL 2018-02-22 [76b6aa41f] Support parameters in CALL
2018-03-14 [33803f67f] Support INOUT arguments in procedures 2018-03-14 [33803f67f] Support INOUT arguments in procedures
2018-04-14 [a8677e3ff] Support named and default arguments in CALL 2018-04-14 [a8677e3ff] Support named and default arguments in CALL
2018-08-22 [e0dc839e7] Change PROCEDURE to FUNCTION in CREATE TRIGGER syntax
2018-08-22 [fd4417e8a] Change PROCEDURE to FUNCTION in CREATE OPERATOR syntax
--> -->
<para> <para>
...@@ -1968,9 +2031,21 @@ same commits as above ...@@ -1968,9 +2031,21 @@ same commits as above
They are created with the new <link They are created with the new <link
linkend="sql-createprocedure"><command>CREATE linkend="sql-createprocedure"><command>CREATE
PROCEDURE</command></link> command and invoked via <link PROCEDURE</command></link> command and invoked via <link
linkend="sql-call"><command>CALL</command></link>. The new linkend="sql-call"><command>CALL</command></link>.
<command>ALTER</command>/<command>DROP ROUTINE</command> commands </para>
allows altering/dropping of procedures, functions, and aggregates.
<para>
The new <command>ALTER</command>/<command>DROP ROUTINE</command>
commands allow altering/dropping of all routine-like objects,
including procedures, functions, and aggregates.
</para>
<para>
Also, writing <literal>FUNCTION</literal> is now preferred
over writing <literal>PROCEDURE</literal> in <command>CREATE
OPERATOR</command> and <command>CREATE TRIGGER</command>, because the
referenced object must be a function not a procedure. However, the
old syntax is still accepted for compatibility.
</para> </para>
</listitem> </listitem>
...@@ -1988,9 +2063,9 @@ same commits as above ...@@ -1988,9 +2063,9 @@ same commits as above
</para> </para>
<para> <para>
Transaction control is only available to top-transaction-level Transaction control is only available within top-transaction-level
<command>CALL</command>s or in nested PL/pgSQL DO and procedures and nested <command>DO</command> and
<command>CALL</command> blocks that only contain other PL/pgSQL <command>CALL</command> blocks that only contain other
<command>DO</command> and <command>CALL</command> blocks. <command>DO</command> and <command>CALL</command> blocks.
</para> </para>
</listitem> </listitem>
...@@ -2001,8 +2076,8 @@ same commits as above ...@@ -2001,8 +2076,8 @@ same commits as above
--> -->
<para> <para>
Add the ability to define PL/pgSQL record types as not null, Add the ability to define PL/pgSQL composite-type variables as not
constant, or with initial values (Tom Lane) null, constant, or with initial values (Tom Lane)
</para> </para>
</listitem> </listitem>
...@@ -2029,8 +2104,8 @@ same commits as above ...@@ -2029,8 +2104,8 @@ same commits as above
--> -->
<para> <para>
Add extension <application>jsonb_plpython</application> to Add extension <filename>jsonb_plpython</filename> to
transform <type>JSONB </type>to/from PL/Python types (Anthony transform <type>JSONB</type> to/from PL/Python types (Anthony
Bykov) Bykov)
</para> </para>
</listitem> </listitem>
...@@ -2041,8 +2116,8 @@ same commits as above ...@@ -2041,8 +2116,8 @@ same commits as above
--> -->
<para> <para>
Add extension <application>jsonb_plperl</application> to transform Add extension <filename>jsonb_plperl</filename> to transform
<type>JSONB </type>to/from PL/Perl types (Anthony Bykov) <type>JSONB</type> to/from PL/Perl types (Anthony Bykov)
</para> </para>
</listitem> </listitem>
...@@ -2066,8 +2141,8 @@ same commits as above ...@@ -2066,8 +2141,8 @@ same commits as above
</para> </para>
<para> <para>
Compression is already disabled in modern OpenSSL versions and Compression is already disabled in modern OpenSSL versions, so that
the libpq setting had no effect in that case. the libpq setting had no effect with such libraries.
</para> </para>
</listitem> </listitem>
...@@ -2077,13 +2152,15 @@ same commits as above ...@@ -2077,13 +2152,15 @@ same commits as above
--> -->
<para> <para>
Add <literal>DO CONTINUE</literal> action to the <literal>ECPG Add <literal>DO CONTINUE</literal> option
WHENEVER</literal> statement (Vinayak Pokale) to <application>ecpg</application>'s <literal>WHENEVER</literal>
statement (Vinayak Pokale)
</para> </para>
<para> <para>
This generates a C 'continue' statement, causing a return to the This generates a C <command>continue</command> statement, causing a
top of the contained loop when the specified condition occurs. return to the top of the contained loop when the specified condition
occurs.
</para> </para>
</listitem> </listitem>
...@@ -2093,7 +2170,8 @@ same commits as above ...@@ -2093,7 +2170,8 @@ same commits as above
--> -->
<para> <para>
Add ecpg mode to enable Oracle Pro*C handling of char arrays. Add an <application>ecpg</application> mode to enable Oracle
Pro*C-style handling of char arrays.
</para> </para>
<para> <para>
...@@ -2120,8 +2198,9 @@ same commits as above ...@@ -2120,8 +2198,9 @@ same commits as above
--> -->
<para> <para>
Add <application>psql</application> command \gdesc to display Add <application>psql</application> command <literal>\gdesc</literal>
the column names and types of the query output (Pavel Stehule) to display the column names and types of the query output (Pavel
Stehule)
</para> </para>
</listitem> </listitem>
...@@ -2154,8 +2233,9 @@ same commits as above ...@@ -2154,8 +2233,9 @@ same commits as above
</para> </para>
<para> <para>
Specifically , the syntax <literal>:{?variable_name}</literal> Specifically, the syntax <literal>:{?variable_name}</literal> allows
allows a variable's existence to be tested in an \if statement. a variable's existence to be tested in an <literal>\if</literal>
statement.
</para> </para>
</listitem> </listitem>
...@@ -2165,7 +2245,7 @@ same commits as above ...@@ -2165,7 +2245,7 @@ same commits as above
--> -->
<para> <para>
Add <envar>PSQL_PAGER</envar> to control Allow environment variable <envar>PSQL_PAGER</envar> to control
<application>psql</application>'s pager (Pavel Stehule) <application>psql</application>'s pager (Pavel Stehule)
</para> </para>
...@@ -2183,8 +2263,8 @@ same commits as above ...@@ -2183,8 +2263,8 @@ same commits as above
--> -->
<para> <para>
Have psql \d+ always show the partition information (Amit Langote, Make psql's <literal>\d+</literal> command always show the table's
Ashutosh Bapat) partitioning information (Amit Langote, Ashutosh Bapat)
</para> </para>
<para> <para>
...@@ -2200,8 +2280,8 @@ same commits as above ...@@ -2200,8 +2280,8 @@ same commits as above
--> -->
<para> <para>
Have <application>psql</application> report the proper user name Ensure that <application>psql</application> reports the proper user
before the password prompt (Tom Lane) name when prompting for a password (Tom Lane)
</para> </para>
<para> <para>
...@@ -2219,14 +2299,14 @@ same commits as above ...@@ -2219,14 +2299,14 @@ same commits as above
<para> <para>
Allow <command>quit</command> and <command>exit</command> to Allow <command>quit</command> and <command>exit</command> to
exit <application>psql</application> when used in an empty buffer exit <application>psql</application> when given with no prior input
(Bruce Momjian) (Bruce Momjian)
</para> </para>
<para> <para>
Also add hints of how to exit when <command>quit</command> and Also print hints about how to exit when <command>quit</command> and
<command>exit</command> are used alone on a line in a non-empty <command>exit</command> are used alone on a line while the input
buffer. Add a similar hint for <command>help</command>. buffer is not empty. Add a similar hint for <command>help</command>.
</para> </para>
</listitem> </listitem>
...@@ -2236,7 +2316,7 @@ same commits as above ...@@ -2236,7 +2316,7 @@ same commits as above
--> -->
<para> <para>
Have <application>psql</application> hint at using control-D Make <application>psql</application> hint at using control-D
when <command>\q</command> is entered alone on a line but ignored when <command>\q</command> is entered alone on a line but ignored
(Bruce Momjian) (Bruce Momjian)
</para> </para>
...@@ -2253,7 +2333,7 @@ same commits as above ...@@ -2253,7 +2333,7 @@ same commits as above
--> -->
<para> <para>
Improve tab-completion for <command>ALTER INDEX Improve tab completion for <command>ALTER INDEX
RESET</command>/<command>SET</command> (Masahiko Sawada) RESET</command>/<command>SET</command> (Masahiko Sawada)
</para> </para>
</listitem> </listitem>
...@@ -2265,12 +2345,12 @@ same commits as above ...@@ -2265,12 +2345,12 @@ same commits as above
<para> <para>
Add infrastructure to allow <application>psql</application> Add infrastructure to allow <application>psql</application>
to customize tab completion queries based on the server version to adapt its tab completion queries based on the server version
(Tom Lane) (Tom Lane)
</para> </para>
<para> <para>
Previously tab completion queries could fail. Previously tab completion queries could fail against older servers.
</para> </para>
</listitem> </listitem>
...@@ -2290,7 +2370,7 @@ same commits as above ...@@ -2290,7 +2370,7 @@ same commits as above
--> -->
<para> <para>
Add <application>pgbench</application> expressions support for Add <application>pgbench</application> expression support for
NULLs, booleans, and some functions and operators (Fabien Coelho) NULLs, booleans, and some functions and operators (Fabien Coelho)
</para> </para>
</listitem> </listitem>
...@@ -2335,7 +2415,7 @@ same commits as above ...@@ -2335,7 +2415,7 @@ same commits as above
--> -->
<para> <para>
Add an approximated Zipfian-distributed random generator to Add an approximately Zipfian-distributed random generator to
<application>pgbench</application> (Alik Khilazhev) <application>pgbench</application> (Alik Khilazhev)
</para> </para>
</listitem> </listitem>
...@@ -2430,8 +2510,8 @@ same commits as above ...@@ -2430,8 +2510,8 @@ same commits as above
</para> </para>
<para> <para>
This is accomplished with the initdb This is accomplished with the new initdb option
<option>--allow-group-access</option> flag. Administrators <option>--allow-group-access</option>. Administrators
can also set group permissions on the empty data can also set group permissions on the empty data
directory before running initdb. Server variable <link directory before running initdb. Server variable <link
linkend="guc-data-directory"><varname>data_directory_mode</varname></link> linkend="guc-data-directory"><varname>data_directory_mode</varname></link>
...@@ -2515,7 +2595,7 @@ same commits as above ...@@ -2515,7 +2595,7 @@ same commits as above
</para> </para>
<para> <para>
This was originally unsupported due to concerns over its misuse. This was previously unsupported due to concerns over possible misuse.
</para> </para>
</listitem> </listitem>
...@@ -2559,7 +2639,8 @@ same commits as above ...@@ -2559,7 +2639,8 @@ same commits as above
<para> <para>
Add <application>pg_dumpall</application> option Add <application>pg_dumpall</application> option
<option>--encoding</option> to control encoding (Michael Paquier) <option>--encoding</option> to control output encoding
(Michael Paquier)
</para> </para>
<para> <para>
...@@ -2576,14 +2657,13 @@ same commits as above ...@@ -2576,14 +2657,13 @@ same commits as above
Add <application>pg_dump</application> option Add <application>pg_dump</application> option
<option>--load-via-partition-root</option> to force loading of <option>--load-via-partition-root</option> to force loading of
data into the partition's root table, rather than the original data into the partition's root table, rather than the original
partitions partition (Rushabh Lathia)
(Rushabh Lathia)
</para> </para>
<para> <para>
This is useful if the system to be loaded has different collation This is useful if the system to be loaded to has different collation
definitions or endianness, requiring the rows to be stored in definitions or endianness, possibly requiring rows to be stored in
different partitions. different partitions than previously.
</para> </para>
</listitem> </listitem>
...@@ -2593,8 +2673,8 @@ same commits as above ...@@ -2593,8 +2673,8 @@ same commits as above
--> -->
<para> <para>
Add an option to suppress dumping and restoring comments Add an option to suppress dumping and restoring database object
(Robins Tharakan) comments (Robins Tharakan)
</para> </para>
<para> <para>
...@@ -2619,30 +2699,36 @@ same commits as above ...@@ -2619,30 +2699,36 @@ same commits as above
<listitem> <listitem>
<!-- <!--
2018-01-21 [1cc4f536e] Support huge pages on Windows 2018-07-31 [d06eebce5] Provide for contrib and pgxs modules to install include
2018-09-05 [235526a20] Allow extensions to install built as well as unbuilt hea
2018-09-07 [094ffd684] Refactor installation of extension headers.
2018-09-16 [f1ca5a654] Fix out-of-tree build for transform modules.
--> -->
<para> <para>
Add support for <firstterm>large pages</firstterm> on Windows Add <application>PGXS</application> support for installing include
(Takayuki Tsunakawa, Thomas Munro) files (Andrew Gierth)
</para> </para>
<para> <para>
This is controlled by the <link This supports creating extension modules that depend on other
linkend="guc-huge-pages">huge_pages</link> configuration modules. Formerly there was no easy way for the dependent module to
parameter. find the referenced one's include files. Several
existing <filename>contrib</filename> modules that define data types
have been adjusted to install relevant files. Also, PL/Perl and
PL/Python now install their include files, to support creation of
transform modules for those languages.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2018-04-04 [f044d71e3] Use ARMv8 CRC instructions where available. 2018-04-05 [1fd869066] Install errcodes.txt for use by extensions.
--> -->
<para> <para>
Add support for <productname>ARMv8</productname> hardware Install <filename>errcodes.txt</filename> to allow extensions to access
<acronym>CRC</acronym> calculations (Yuqi Gu, Heikki the list of error codes known to <productname>PostgreSQL</productname>
Linnakangas, Thomas Munro) (Thomas Munro)
</para> </para>
</listitem> </listitem>
...@@ -2685,6 +2771,46 @@ same commits as above ...@@ -2685,6 +2771,46 @@ same commits as above
<listitem> <listitem>
<!-- <!--
2018-03-03 [a351679c8] Trivial adjustments in preparation for bootstrap data co
2018-04-08 [372728b0d] Replace our traditional initial-catalog-data format with
2018-04-17 [e90d4ddc6] Simplify genbki.pl's data quoting rules.
2018-04-17 [9ffcccdb9] Rationalize handling of array type names in bootstrap da
2018-04-17 [55d26ff63] Rationalize handling of single and double quotes in boot
2018-04-18 [5372c2c84] Improve error detection/reporting in Catalog.pm and genb
2018-04-26 [a0854f107] Avoid parsing catalog data twice during BKI file constru
2018-05-05 [d160882a1] Fix bootstrap parser so that its keywords are unreserved
-->
<para>
Overhaul the way that initial system catalog contents are defined
(John Naylor)
</para>
<para>
The initial data is now represented in Perl data structures, making
it much easier to manipulate mechanically.
</para>
</listitem>
<listitem>
<!--
2018-03-21 [846b5a525] Prevent extensions from creating custom GUCs that are GU
-->
<para>
Prevent extensions from creating custom server parameters that
take a quoted list of values (Tom Lane)
</para>
<para>
This cannot be supported at present because knowledge of the
parameter's property would be required even before the extension is
loaded.
</para>
</listitem>
<listitem>
<!--
2017-11-18 [9288d62bb] Support channel binding 'tls-unique' in SCRAM 2017-11-18 [9288d62bb] Support channel binding 'tls-unique' in SCRAM
2017-12-19 [4bbf110d2] Add libpq connection parameter "scram_channel_binding" 2017-12-19 [4bbf110d2] Add libpq connection parameter "scram_channel_binding"
2018-01-04 [d3fb72ea6] Implement channel binding tls-server-end-point for SCRAM 2018-01-04 [d3fb72ea6] Implement channel binding tls-server-end-point for SCRAM
...@@ -2697,39 +2823,34 @@ same commits as above ...@@ -2697,39 +2823,34 @@ same commits as above
</para> </para>
<para> <para>
<acronym>SCRAM</acronym> cannot prevent man-in-the-middle attacks Channel binding is intended to prevent man-in-the-middle attacks, but
unless it can be forced. Unfortunately, there is no way to do <acronym>SCRAM</acronym> cannot prevent them unless it can be forced
this in libpq. This is expected in future versions of libpq to be active. Unfortunately, there is no way to do that in libpq.
and in interfaces not built using libpq, e.g. JDBC. Support for it is expected in future versions of libpq and in
interfaces not built using libpq, e.g. JDBC.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2018-03-03 [a351679c8] Trivial adjustments in preparation for bootstrap data co 2018-04-05 [eed1ce72e] Allow background workers to bypass datallowconn
2018-04-08 [372728b0d] Replace our traditional initial-catalog-data format with
2018-04-17 [e90d4ddc6] Simplify genbki.pl's data quoting rules.
2018-04-17 [9ffcccdb9] Rationalize handling of array type names in bootstrap da
2018-04-17 [55d26ff63] Rationalize handling of single and double quotes in boot
2018-04-18 [5372c2c84] Improve error detection/reporting in Catalog.pm and genb
2018-04-26 [a0854f107] Avoid parsing catalog data twice during BKI file constru
2018-05-05 [d160882a1] Fix bootstrap parser so that its keywords are unreserved
--> -->
<para> <para>
Overhaul the way system tables are defined for bootstrap use Allow background workers to attach to databases that normally
(John Naylor) disallow connections (Magnus Hagander)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<!-- <!--
2018-04-05 [eed1ce72e] Allow background workers to bypass datallowconn 2018-04-04 [f044d71e3] Use ARMv8 CRC instructions where available.
--> -->
<para> <para>
Allow background workers to attach to databases that normally Add support for hardware <acronym>CRC</acronym> calculations
disallow connections (Magnus Hagander) on <productname>ARMv8</productname> (Yuqi Gu, Heikki Linnakangas,
Thomas Munro)
</para> </para>
</listitem> </listitem>
...@@ -2739,12 +2860,11 @@ same commits as above ...@@ -2739,12 +2860,11 @@ same commits as above
--> -->
<para> <para>
Speed up lookups of built-in function names matching OIDs (Andres Speed up lookups of built-in functions by OID (Andres Freund)
Freund)
</para> </para>
<para> <para>
The previous binary search now uses a lookup array. The previous binary search has been replaced by a lookup array.
</para> </para>
</listitem> </listitem>
...@@ -2764,7 +2884,7 @@ same commits as above ...@@ -2764,7 +2884,7 @@ same commits as above
--> -->
<para> <para>
Improve access speed to system caches (Andres Freund) Improve speed of access to system caches (Andres Freund)
</para> </para>
</listitem> </listitem>
...@@ -2791,7 +2911,7 @@ same commits as above ...@@ -2791,7 +2911,7 @@ same commits as above
<para> <para>
Make the computation of system column Make the computation of system column
<structname>pg_class</structname>.<structfield>reltuples</structfield> <structname>pg_class</structname>.<structfield>reltuples</structfield>
consistent (Tomas Vondra) more consistent (Tomas Vondra)
</para> </para>
</listitem> </listitem>
...@@ -2823,16 +2943,15 @@ same commits as above ...@@ -2823,16 +2943,15 @@ same commits as above
<para> <para>
Allow extension <link Allow extension <link
linkend="pgprewarm"><application>pg_prewarm</application></link> linkend="pgprewarm"><filename>pg_prewarm</filename></link>
to restore the previous shared buffer contents on startup (Mithun to restore the previous shared buffer contents on startup (Mithun
Cy, Robert Haas) Cy, Robert Haas)
</para> </para>
<para> <para>
This is accomplished by having This is accomplished by having <filename>pg_prewarm</filename> store
<application>pg_prewarm</application> store the shared buffer the shared buffers' relation and block number data to disk
relation/offset values to disk occasionally during server operation occasionally during server operation, and at shutdown.
and shutdown.
</para> </para>
</listitem> </listitem>
...@@ -2842,7 +2961,7 @@ same commits as above ...@@ -2842,7 +2961,7 @@ same commits as above
--> -->
<para> <para>
Add <link linkend="pgtrgm"><application>pg_trgm</application></link> Add <link linkend="pgtrgm"><filename>pg_trgm</filename></link>
function <function>strict_word_similarity()</function> to compute function <function>strict_word_similarity()</function> to compute
the similarity of whole words (Alexander Korotkov) the similarity of whole words (Alexander Korotkov)
</para> </para>
...@@ -2861,14 +2980,14 @@ same commits as above ...@@ -2861,14 +2980,14 @@ same commits as above
--> -->
<para> <para>
Allow creation of indexes on <link Allow creation of indexes that can be used by <literal>LIKE</literal>
linkend="citext"><application>citext</application></link> extension comparisons
columns that can be used by <literal>LIKE</literal> comparisons on <link linkend="citext"><filename>citext</filename></link> columns
(Alexey Chernyshov) (Alexey Chernyshov)
</para> </para>
<para> <para>
Specifically, indexes must be created using the To do this, the index must be created using the
<literal>citext_pattern_ops</literal> operator class. <literal>citext_pattern_ops</literal> operator class.
</para> </para>
</listitem> </listitem>
...@@ -2880,7 +2999,7 @@ same commits as above ...@@ -2880,7 +2999,7 @@ same commits as above
<para> <para>
Allow <link Allow <link
linkend="btree-gin"><application>btree_gin</application></link> linkend="btree-gin"><filename>btree_gin</filename></link>
to index <type>bool</type>, <type>bpchar</type>, <type>name</type> to index <type>bool</type>, <type>bpchar</type>, <type>name</type>
and <type>uuid</type> data types (Matheus Oliveira) and <type>uuid</type> data types (Matheus Oliveira)
</para> </para>
...@@ -2892,9 +3011,9 @@ same commits as above ...@@ -2892,9 +3011,9 @@ same commits as above
--> -->
<para> <para>
Allow <link linkend="cube"><application>cube</application></link> Allow <link linkend="cube"><filename>cube</filename></link>
and <link linkend="seg"><application>seg</application></link> and <link linkend="seg"><filename>seg</filename></link>
extensions using GiST indexes to perform index-only scans extensions to perform index-only scans using GiST indexes
(Andrey Borodin) (Andrey Borodin)
</para> </para>
</listitem> </listitem>
...@@ -2905,8 +3024,8 @@ same commits as above ...@@ -2905,8 +3024,8 @@ same commits as above
--> -->
<para> <para>
Allow retrieval of negative cube coordinates using the ~&gt; Allow retrieval of negative cube coordinates using
operator (Alexander Korotkov) the <literal>~&gt;</literal> operator (Alexander Korotkov)
</para> </para>
<para> <para>
...@@ -2921,8 +3040,8 @@ same commits as above ...@@ -2921,8 +3040,8 @@ same commits as above
--> -->
<para> <para>
Add Vietnamese letter detection to the <link Add Vietnamese letter handling to the <link
linkend="unaccent"><application>unaccent</application></link> linkend="unaccent"><filename>unaccent</filename></link>
extension (Dang Minh Huong, Michael Paquier) extension (Dang Minh Huong, Michael Paquier)
</para> </para>
</listitem> </listitem>
...@@ -2934,7 +3053,7 @@ same commits as above ...@@ -2934,7 +3053,7 @@ same commits as above
<para> <para>
Enhance <link Enhance <link
linkend="amcheck"><application>amcheck</application></link> linkend="amcheck"><filename>amcheck</filename></link>
to check that each heap tuple has an index entry (Peter Geoghegan) to check that each heap tuple has an index entry (Peter Geoghegan)
</para> </para>
</listitem> </listitem>
...@@ -2946,13 +3065,13 @@ same commits as above ...@@ -2946,13 +3065,13 @@ same commits as above
<para> <para>
Have <link Have <link
linkend="adminpack"><application>adminpack</application></link> linkend="adminpack"><filename>adminpack</filename></link>
use the new default file system access roles (Stephen Frost) use the new default file system access roles (Stephen Frost)
</para> </para>
<para> <para>
Previously only superusers could call adminpack functions; Previously only superusers could call <filename>adminpack</filename>
now role permissions are checked. functions; now role permissions are checked.
</para> </para>
</listitem> </listitem>
...@@ -2962,40 +3081,13 @@ same commits as above ...@@ -2962,40 +3081,13 @@ same commits as above
--> -->
<para> <para>
Increase <structname>pg_stat_statement</structname>'s query id Widen <structname>pg_stat_statement</structname>'s query ID
to 64 bits (Robert Haas) to 64 bits (Robert Haas)
</para> </para>
<para> <para>
This greatly reduces the chance of query id hash collisions. This greatly reduces the chance of query ID hash collisions.
The query id can now potentially display as a negative value. The query ID can now potentially display as a negative value.
</para>
</listitem>
<listitem>
<!--
2018-04-05 [1fd869066] Install errcodes.txt for use by extensions.
-->
<para>
Install <filename>errcodes.txt</filename> to provide access to
the error codes reported by <productname>PostgreSQL</productname>
(Thomas Munro)
</para>
</listitem>
<listitem>
<!--
2018-03-21 [846b5a525] Prevent extensions from creating custom GUCs that are GU
-->
<para>
Prevent extensions from creating custom server variables that
take a quoted list of values (Tom Lane)
</para>
<para>
This was never intended to be supported.
</para> </para>
</listitem> </listitem>
...@@ -3005,8 +3097,10 @@ same commits as above ...@@ -3005,8 +3097,10 @@ same commits as above
--> -->
<para> <para>
Remove <filename>contrib/start-scripts/osx</filename> since they Remove the <filename>contrib/start-scripts/osx</filename> scripts
are no longer recommended (Tom Lane) since they are no longer recommended
(use <filename>contrib/start-scripts/macos</filename> instead)
(Tom Lane)
</para> </para>
</listitem> </listitem>
...@@ -3016,12 +3110,12 @@ same commits as above ...@@ -3016,12 +3110,12 @@ same commits as above
--> -->
<para> <para>
Remove extension chkpass (Peter Eisentraut) Remove the <filename>chkpass</filename> extension (Peter Eisentraut)
</para> </para>
<para> <para>
This extension no longer served as a usable security tool or This extension is no longer considered to be a usable security tool
example of how to write an extension. or example of how to write an extension.
</para> </para>
</listitem> </listitem>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment