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