Commit 9eced003 authored by Bruce Momjian's avatar Bruce Momjian

Split release notes up into smaller sections; easier to read.

parent e66d0c62
<!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.553 2007/11/20 05:23:20 momjian Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.554 2007/11/20 17:10:25 momjian Exp $ -->
<!-- <!--
Typical markup: Typical markup:
...@@ -232,376 +232,390 @@ do it for earlier branch release files. ...@@ -232,376 +232,390 @@ do it for earlier branch release files.
Observe the following incompatibilities: Observe the following incompatibilities:
</para> </para>
<itemizedlist> <sect3>
<title>General</title>
<itemizedlist>
<listitem> <listitem>
<para> <para>
Non-character data types are no longer automatically cast to Non-character data types are no longer automatically cast to
<type>TEXT</> (Peter, Tom) <type>TEXT</> (Peter, Tom)
</para> </para>
<para> <para>
Previously, if a non-character value was supplied to an operator or Previously, if a non-character value was supplied to an operator or
function that requires <type>text</> input, it was automatically function that requires <type>text</> input, it was automatically
cast to <type>text</>, for most (though not all) built-in data types. cast to <type>text</>, for most (though not all) built-in data types.
This no longer happens: an explicit cast to <type>text</> is now This no longer happens: an explicit cast to <type>text</> is now
required for all non-character-string types. For example, these required for all non-character-string types. For example, these
expressions formerly worked: expressions formerly worked:
<programlisting> <programlisting>
substr(current_date, 1, 4) substr(current_date, 1, 4)
23 LIKE '2%' 23 LIKE '2%'
</programlisting> </programlisting>
but will now draw <quote>function does not exist</> and <quote>operator but will now draw <quote>function does not exist</> and <quote>operator
does not exist</> errors respectively. Use an explicit cast instead: does not exist</> errors respectively. Use an explicit cast instead:
<programlisting> <programlisting>
substr(current_date::text, 1, 4) substr(current_date::text, 1, 4)
23::text LIKE '2%' 23::text LIKE '2%'
</programlisting> </programlisting>
(Of course, you can use the more verbose <literal>CAST()</> syntax too.) (Of course, you can use the more verbose <literal>CAST()</> syntax too.)
The reason for the change is that these automatic casts too often caused The reason for the change is that these automatic casts too often caused
surprising behavior. An example is that in previous releases, this surprising behavior. An example is that in previous releases, this
expression was accepted but did not do what was expected: expression was accepted but did not do what was expected:
<programlisting> <programlisting>
current_date &lt; 2017-11-17 current_date &lt; 2017-11-17
</programlisting> </programlisting>
This is actually comparing a date to an integer, which should be This is actually comparing a date to an integer, which should be
(and now is) rejected &mdash; but in the presence of automatic (and now is) rejected &mdash; but in the presence of automatic
casts both sides were cast to <type>text</> and a textual comparison casts both sides were cast to <type>text</> and a textual comparison
was done, because the <literal>text &lt; text</> operator was able was done, because the <literal>text &lt; text</> operator was able
to match the expression when no other <literal>&lt;</> operator could. to match the expression when no other <literal>&lt;</> operator could.
</para> </para>
<para> <para>
Types <type>char(<replaceable>n</>)</type> and Types <type>char(<replaceable>n</>)</type> and
<type>varchar(<replaceable>n</>)</type> still cast to <type>text</> <type>varchar(<replaceable>n</>)</type> still cast to <type>text</>
automatically. Also, automatic casting to <type>text</> still works for automatically. Also, automatic casting to <type>text</> still works for
inputs to the concatenation (<literal>||</>) operator, so long as least inputs to the concatenation (<literal>||</>) operator, so long as least
one input is a character-string type. one input is a character-string type.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Full text search features from <filename>contrib/tsearch2</> have Full text search features from <filename>contrib/tsearch2</> have
been moved into the core server, with some minor syntax changes been moved into the core server, with some minor syntax changes
</para> </para>
<para> <para>
<filename>contrib/tsearch2</> now contains a compatibility <filename>contrib/tsearch2</> now contains a compatibility
interface. interface.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Numerous changes in administrative server parameters <literal>ARRAY(SELECT ...)</literal>, where the <command>SELECT</>
</para> returns no rows, now returns an empty array, rather than NULL
(Tom)
</para>
</listitem>
<para> <listitem>
<varname>bgwriter_lru_percent</>, <para>
<varname>bgwriter_all_percent</>, The array type name for a base data type is no longer always the base
<varname>bgwriter_all_maxpages</>, type's name with an underscore prefix
<varname>stats_start_collector</>, and </para>
<varname>stats_reset_on_server_start</> are removed.
<varname>redirect_stderr</> is renamed to
<varname>logging_collector</>.
<varname>stats_command_string</> is renamed to
<varname>track_activities</>.
<varname>stats_block_level</> and <varname>stats_row_level</>
are merged into <varname>track_counts</>.
A new boolean configuration parameter, <varname>archive_mode</>,
controls archiving. Autovacuum's default settings have changed.
</para>
</listitem>
<listitem> <para>
<para> The old naming convention is still honored when possible, but
Commenting out a parameter in <filename>postgresql.conf</> now application code should no longer depend on it. Instead
causes it to revert to its default value (Joachim Wieland) use the new <literal>pg_type.typarray</literal> column to
</para> identify the array data type associated with a given type.
</para>
</listitem>
<para> <listitem>
Previously, commenting out an entry left the parameter's value unchanged <para>
until the next server restart. <literal>ORDER BY ... USING</> <replaceable>operator</> must now
</para> use a less-than or greater-than <replaceable>operator</> that is
</listitem> defined in a btree operator class
</para>
<listitem> <para>
<para> This restriction was added to prevent inconsistent results.
<literal>ARRAY(SELECT ...)</literal>, where the <command>SELECT</> </para>
returns no rows, now returns an empty array, rather than NULL </listitem>
(Tom)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
<literal>ORDER BY ... USING</> <replaceable>operator</> must now <command>SET LOCAL</command> changes now persist until
use a less-than or greater-than <replaceable>operator</> that is the end of the outermost transaction, unless rolled back (Tom)
defined in a btree operator class </para>
</para>
<para> <para>
This restriction was added to prevent inconsistent results. Previously <command>SET LOCAL</command>'s effects were lost
</para> after subtransaction commit (<command>RELEASE SAVEPOINT</>
</listitem> or exit from a PL/pgSQL exception block).
</para>
</listitem>
<listitem> <listitem>
<para> <para>
The array type name for a base data type is no longer always the base Commands rejected in transaction blocks are now also rejected in
type's name with an underscore prefix multiple-statement query strings (Tom)
</para> </para>
<para> <para>
The old naming convention is still honored when possible, but For example, <literal>"BEGIN; DROP DATABASE; COMMIT"</> will now be
application code should no longer depend on it. Instead rejected even if submitted as a single query message.
use the new <literal>pg_type.typarray</literal> column to </para>
identify the array data type associated with a given type. </listitem>
</para>
</listitem>
<listitem> <listitem>
<para> <para>
<command>SET LOCAL</command> changes now persist until <command>ROLLBACK</> outside a transaction block now
the end of the outermost transaction, unless rolled back (Tom) issues <literal>NOTICE</> instead of <literal>WARNING</> (Bruce)
</para> </para>
</listitem>
<para> <listitem>
Previously <command>SET LOCAL</command>'s effects were lost <para>
after subtransaction commit (<command>RELEASE SAVEPOINT</> Prevent <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command>
or exit from a PL/pgSQL exception block). from accepting schema-qualified names (Bruce)
</para> </para>
</listitem>
<listitem> <para>
<para> Formerly, these commands accepted <literal>schema.relation</> but
Commands rejected in transaction blocks are now also rejected in ignored the schema part, which was confusing.
multiple-statement query strings (Tom) </para>
</para> </listitem>
<para> <listitem>
For example, <literal>"BEGIN; DROP DATABASE; COMMIT"</> will now be <para>
rejected even if submitted as a single query message. <command>ALTER SEQUENCE</> no longer affects <function>currval()</>
</para> (Tom)
</listitem> </para>
</listitem>
<listitem> <listitem>
<para> <para>
<command>ROLLBACK</> outside a transaction block now Foreign keys now must match indexable conditions for
issues <literal>NOTICE</> instead of <literal>WARNING</> (Bruce) cross-data-type references (Tom)
</para> </para>
</listitem>
<listitem> <para>
<para> This improves semantic consistency and helps avoid
Prevent <command>NOTIFY</command>/<command>LISTEN</command>/<command>UNLISTEN</command> performance problems.
from accepting schema-qualified names (Bruce) </para>
</para> </listitem>
<para> <listitem>
Formerly, these commands accepted <literal>schema.relation</> but <para>
ignored the schema part, which was confusing. Restrict object size functions to users who have reasonable
</para> permissions to view such information (Tom)
</listitem> </para>
<listitem> <para>
<para> For example, <function>pg_database_size()</function> now requires
Restrict object size functions to users who have reasonable <literal>CONNECT</> permission, which is granted to everyone by
permissions to view such information (Tom) default. <function>pg_tablespace_size()</function> requires
</para> <literal>CREATE</> permission in the tablespace, or is allowed if
the tablespace is the default tablespace for the database.
</para>
</listitem>
<para> <listitem>
For example, <function>pg_database_size()</function> now requires <para>
<literal>CONNECT</> permission, which is granted to everyone by Remove the undocumented <literal>!!=</> (not in) operator (Tom)
default. <function>pg_tablespace_size()</function> requires </para>
<literal>CREATE</> permission in the tablespace, or is allowed if
the tablespace is the default tablespace for the database.
</para>
</listitem>
<listitem> <para>
<para> <literal>NOT IN (SELECT ...)</literal> is the proper way to
Internal hashing functions are now more uniformly-distributed (Tom) perform this operation.
</para> </para>
</listitem>
<para> <listitem>
If application code was computing and storing hash values using <para>
internal <productname>PostgreSQL</> hashing functions, the hash Internal hashing functions are now more uniformly-distributed (Tom)
values must be regenerated. </para>
</para>
</listitem>
<listitem> <para>
<para> If application code was computing and storing hash values using
<command>ALTER SEQUENCE</> no longer affects <function>currval()</> internal <productname>PostgreSQL</> hashing functions, the hash
(Tom) values must be regenerated.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Foreign keys now must match indexable conditions for C-code conventions for handling variable-length data values
cross-data-type references (Tom) have changed (Greg Stark, Tom)
</para> </para>
<para> <para>
This improves semantic consistency and helps avoid The new <function>SET_VARSIZE()</> macro <emphasis>must</> be used
performance problems. to set the length of generated <type>varlena</> values. Also, it
</para> might be necessary to expand (<quote>de-TOAST</quote>) input values
</listitem> in more cases.
</para>
</listitem>
<listitem> </itemizedlist>
<para>
Remove the undocumented <literal>!!=</> (not in) operator (Tom)
</para>
<para> </sect3>
<literal>NOT IN (SELECT ...)</literal> is the proper way to
perform this operation.
</para>
</listitem>
<listitem> <sect3>
<para> <title>Configuration Parameters</title>
Remove <varname>stats_start_collector</varname> parameter (Tom)
</para>
<para> <itemizedlist>
We now always start the collector process, unless <acronym>UDP</>
socket creation fails.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Remove <varname>stats_reset_on_server_start</varname> parameter (Tom) Numerous changes in administrative server parameters
</para> </para>
<para> <para>
This was removed because <function>pg_stat_reset()</function> <varname>bgwriter_lru_percent</>,
can be used for this purpose. <varname>bgwriter_all_percent</>,
</para> <varname>bgwriter_all_maxpages</>,
</listitem> <varname>stats_start_collector</>, and
<varname>stats_reset_on_server_start</> are removed.
<varname>redirect_stderr</> is renamed to
<varname>logging_collector</>.
<varname>stats_command_string</> is renamed to
<varname>track_activities</>.
<varname>stats_block_level</> and <varname>stats_row_level</>
are merged into <varname>track_counts</>.
A new boolean configuration parameter, <varname>archive_mode</>,
controls archiving. Autovacuum's default settings have changed.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
C-code conventions for handling variable-length data values Remove <varname>stats_start_collector</varname> parameter (Tom)
have changed (Greg Stark, Tom) </para>
</para>
<para> <para>
The new <function>SET_VARSIZE()</> macro <emphasis>must</> be used We now always start the collector process, unless <acronym>UDP</>
to set the length of generated <type>varlena</> values. Also, it socket creation fails.
might be necessary to expand (<quote>de-TOAST</quote>) input values </para>
in more cases. </listitem>
</para>
</listitem>
</itemizedlist> <listitem>
<para>
Remove <varname>stats_reset_on_server_start</varname> parameter (Tom)
</para>
<para>
This was removed because <function>pg_stat_reset()</function>
can be used for this purpose.
</para>
</listitem>
<para> <listitem>
The following incompatibilities relate to character encodings: <para>
</para> Commenting out a parameter in <filename>postgresql.conf</> now
causes it to revert to its default value (Joachim Wieland)
</para>
<itemizedlist> <para>
Previously, commenting out an entry left the parameter's value unchanged
until the next server restart.
</para>
</listitem>
<listitem> </itemizedlist>
<para>
Add more checks for invalidly-encoded data (Andrew)
</para>
<para> </sect3>
This change plugs some holes that existed in literal backslash
escape string processing and <command>COPY</command> escape
processing. Now the de-escaped string is rechecked to see if the
result created an invalid multi-byte character.
</para>
</listitem>
<listitem>
<para>
Ensure that <function>chr()</function> cannot create
invalidly-encoded values (Andrew)
</para>
<para> <sect3>
In UTF8-encoded databases the argument of <function>chr()</function> is <title>Character Encodings</title>
now treated as a Unicode code point. In other multi-byte encodings
<function>chr()</function>'s argument must designate a 7-bit ASCII
character. Zero is no longer accepted.
<function>ascii()</function> has been adjusted to match.
</para>
</listitem>
<listitem> <itemizedlist>
<para>
Adjust <function>convert()</function> behavior to ensure encoding
validity (Andrew)
</para>
<para> <listitem>
The two argument form of <function>convert()</function> has been <para>
removed. The three argument form now takes a <type>bytea</type> Add more checks for invalidly-encoded data (Andrew)
first argument and returns a <type>bytea</type>. To cover the </para>
loss of functionality, three new functions have been added:
</para>
<itemizedlist> <para>
<listitem> This change plugs some holes that existed in literal backslash
<para> escape string processing and <command>COPY</command> escape
<function>convert_from(bytea, name)</function> returns processing. Now the de-escaped string is rechecked to see if the
<type>text</> &mdash; converts the first argument from the named result created an invalid multi-byte character.
encoding to the database encoding </para>
</para> </listitem>
</listitem>
<listitem> <listitem>
<para> <para>
<function>convert_to(text, name)</function> returns Ensure that <function>chr()</function> cannot create
<type>bytea</> &mdash; converts the first argument from the invalidly-encoded values (Andrew)
database encoding to the named encoding </para>
</para>
</listitem>
<listitem> <para>
<para> In UTF8-encoded databases the argument of <function>chr()</function> is
<function>length(bytea, name)</function> returns now treated as a Unicode code point. In other multi-byte encodings
<type>integer</> &mdash; gives the length of the first <function>chr()</function>'s argument must designate a 7-bit ASCII
argument in characters in the named encoding character. Zero is no longer accepted.
</para> <function>ascii()</function> has been adjusted to match.
</listitem> </para>
</itemizedlist> </listitem>
</listitem>
<listitem> <listitem>
<para> <para>
Remove <literal>convert(argument USING conversion_name)</literal> Adjust <function>convert()</function> behavior to ensure encoding
(Andrew) validity (Andrew)
</para> </para>
<para> <para>
Its behavior did not match the SQL standard. The two argument form of <function>convert()</function> has been
</para> removed. The three argument form now takes a <type>bytea</type>
</listitem> first argument and returns a <type>bytea</type>. To cover the
loss of functionality, three new functions have been added:
</para>
<listitem> <itemizedlist>
<para> <listitem>
Make JOHAB encoding client-only (Tatsuo) <para>
</para> <function>convert_from(bytea, name)</function> returns
<type>text</> &mdash; converts the first argument from the named
encoding to the database encoding
</para>
</listitem>
<para> <listitem>
JOHAB is not safe as a server-side encoding. <para>
</para> <function>convert_to(text, name)</function> returns
</listitem> <type>bytea</> &mdash; converts the first argument from the
database encoding to the named encoding
</para>
</listitem>
</itemizedlist> <listitem>
<para>
<function>length(bytea, name)</function> returns
<type>integer</> &mdash; gives the length of the first
argument in characters in the named encoding
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Remove <literal>convert(argument USING conversion_name)</literal>
(Andrew)
</para>
<para>
Its behavior did not match the SQL standard.
</para>
</listitem>
<listitem>
<para>
Make JOHAB encoding client-only (Tatsuo)
</para>
<para>
JOHAB is not safe as a server-side encoding.
</para>
</listitem>
</itemizedlist>
</sect3>
</sect2> </sect2>
...@@ -888,6 +902,14 @@ current_date &lt; 2017-11-17 ...@@ -888,6 +902,14 @@ current_date &lt; 2017-11-17
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Change server startup log message from <quote>database system is
ready</quote> to <quote>database system is ready to accept
connections</quote>
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect3> </sect3>
...@@ -1034,6 +1056,13 @@ current_date &lt; 2017-11-17 ...@@ -1034,6 +1056,13 @@ current_date &lt; 2017-11-17
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Fix pgstats counting of live and dead tuples to recognize that
committed and aborted transactions have different effects (Tom)
</para>
</listitem>
</itemizedlist> </itemizedlist>
</sect3> </sect3>
...@@ -2128,17 +2157,9 @@ current_date &lt; 2017-11-17 ...@@ -2128,17 +2157,9 @@ current_date &lt; 2017-11-17
</sect3> </sect3>
<sect3> <sect3>
<title>Source Code</title> <title>Server Programming Interface (<acronym>SPI</>)</title>
<itemizedlist> <itemizedlist>
<listitem>
<para>
Rename macro <literal>DLLIMPORT</> to <literal>PGDLLIMPORT</> to
avoid conflicting with third party includes (like Tcl) that
define <literal>DLLIMPORT</> (Magnus)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Allow execution of cursor commands through Allow execution of cursor commands through
...@@ -2174,6 +2195,14 @@ current_date &lt; 2017-11-17 ...@@ -2174,6 +2195,14 @@ current_date &lt; 2017-11-17
</para> </para>
</listitem> </listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Build Options</title>
<itemizedlist>
<listitem> <listitem>
<para> <para>
Add <application>configure</> <literal>--enable-profiling</> Add <application>configure</> <literal>--enable-profiling</>
...@@ -2191,8 +2220,9 @@ current_date &lt; 2017-11-17 ...@@ -2191,8 +2220,9 @@ current_date &lt; 2017-11-17
<listitem> <listitem>
<para> <para>
Create <quote>operator families</quote> to improve planning of Fix <acronym>PGXS</> so extensions can be built against PostgreSQL
queries involving cross-data-type comparisons (Tom) installations whose <application>pg_config</> program does not
appear first in the <varname>PATH</> (Tom)
</para> </para>
</listitem> </listitem>
...@@ -2203,42 +2233,50 @@ current_date &lt; 2017-11-17 ...@@ -2203,42 +2233,50 @@ current_date &lt; 2017-11-17
</para> </para>
</listitem> </listitem>
</itemizedlist>
</sect3>
<sect3>
<title>Source Code</title>
<itemizedlist>
<listitem> <listitem>
<para> <para>
Update GIN <function>extractQuery()</> API to allow signalling Rename macro <literal>DLLIMPORT</> to <literal>PGDLLIMPORT</> to
that nothing can satisfy the query (Teodor) avoid conflicting with third party includes (like Tcl) that
define <literal>DLLIMPORT</> (Magnus)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Move <literal>NAMEDATALEN</> definition from Create <quote>operator families</quote> to improve planning of
<filename>postgres_ext.h</> to <filename>pg_config_manual.h</> queries involving cross-data-type comparisons (Tom)
(Peter)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Change server startup log message from <quote>database system is Update GIN <function>extractQuery()</> API to allow signalling
ready</quote> to <quote>database system is ready to accept that nothing can satisfy the query (Teodor)
connections</quote>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Provide <function>strlcpy()</function> and Move <literal>NAMEDATALEN</> definition from
<function>strlcat()</function> on all platforms, and replace <filename>postgres_ext.h</> to <filename>pg_config_manual.h</>
error-prone uses of <function>strncpy()</function>, (Peter)
<function>strncat()</function>, etc (Peter)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Fix pgstats counting of live and dead tuples to recognize that Provide <function>strlcpy()</function> and
committed and aborted transactions have different effects (Tom) <function>strlcat()</function> on all platforms, and replace
error-prone uses of <function>strncpy()</function>,
<function>strncat()</function>, etc (Peter)
</para> </para>
</listitem> </listitem>
...@@ -2266,20 +2304,12 @@ current_date &lt; 2017-11-17 ...@@ -2266,20 +2304,12 @@ current_date &lt; 2017-11-17
<listitem> <listitem>
<para> <para>
Have <function>quote_identifier()</function> and <function>quote_identifier()</function> and
<application>pg_dump</application> not quote keywords that are <application>pg_dump</application> no longer quote keywords that are
unreserved according to the grammar (Tom) unreserved according to the grammar (Tom)
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Fix <acronym>PGXS</> so extensions can be built against PostgreSQL
installations whose <application>pg_config</> program does not
appear first in the <varname>PATH</> (Tom)
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Change the on-disk representation of the <type>NUMERIC</type> Change the on-disk representation of the <type>NUMERIC</type>
......
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