diff --git a/doc/src/sgml/release-9.0.sgml b/doc/src/sgml/release-9.0.sgml index a9e0b1f97b..cb07f37fef 100644 --- a/doc/src/sgml/release-9.0.sgml +++ b/doc/src/sgml/release-9.0.sgml @@ -1,7 +1,7 @@ - + - Release 9.0alpha3 + Release 9.0alpha4 Overview @@ -69,62 +69,155 @@ - Remove previously deprecated configuration - parameter add_missing_from. The system now always behaves as - though add_missing_from were off. + Disallow comments on columns of relation types + other than tables, views, and composite types, that is, + sequences and TOAST tables. - Performance and behavioral improvements in UPDATE, + Adjust naming of indexes and their columns. Index + expression columns are now named after the FigureColname + result for their expressions, rather than always being + "pg_expression_N". Digits are appended to this name if + needed to make the column name unique within the index. + Default names for indexes and associated constraints now + include the column names of all their columns, not only the + first one as in previous practice. + + + + + Allow the index name to be omitted in CREATE INDEX, + causing the system to choose an index name the same as it + would do for an unnamed index constraint. A necessary + side-effect is to promote the word CONCURRENTLY to a more + reserved status; it can't be a table/column/index name + anymore unless quoted. + + + + + Improve the handling of SET CONSTRAINTS commands by + having them search pg_constraint before searching pg_trigger. + This allows saner handling of corner cases. + + + + + Typed table feature; this adds the CREATE TABLE + name OF type command. + + + + + Tighten integrity checks on ALTER TABLE ... RENAME + COLUMN in inheritance hierarchies. + + + + + Replace the pg_listener-based LISTEN/NOTIFY + mechanism with an in-memory queue. In addition, add support + for a "payload" string to be passed along with each notify + event. + + + This implementation should be significantly more + efficient than the old one, and is also more compatible with + Hot Standby usage. There is not yet any facility for HS + slaves to receive notifications generated on the master, + although such a thing is possible in future. + + + + + Have SELECT and CREATE TABLE AS queries return a + row count. While this is invisible in psql, other + interfaces, like libpq, make this value visible. + + + + + Extend the set of frame options supported for + window functions. This allows the frame to start from + CURRENT ROW (in either RANGE or ROWS mode), and it also adds + support for ROWS n PRECEDING and ROWS n FOLLOWING start and + end points. + + + + + Add DO statement to support execution of procedural language + code without having to create a function for it. + + + + + Support use of function argument names to identify which + actual arguments match which function parameters. The syntax + uses AS, for example funcname(value AS arg1, anothervalue AS + arg2). + + + + + Remove previously deprecated configuration + parameter add_missing_from. The system now always behaves as + though add_missing_from were off. + + + + + Performance and behavioral improvements in UPDATE, DELETE, and SELECT FOR UPDATE/SHARE queries with joins. Fix various corner cases that could have resulted in duplicated output rows. Set-returning functions are now prohibited in the target list of SELECT FOR UPDATE/SHARE. FOR UPDATE does not - propagate into a WITH query anymore. + propagate into a WITH query anymore. - Fix SELECT FOR UPDATE/SHARE in conjunction with LIMIT. - Previously, it could return fewer rows than the limit specified. + Fix SELECT FOR UPDATE/SHARE in conjunction with LIMIT. + Previously, it could return fewer rows than the limit specified. - Add a WHEN clause to CREATE TRIGGER, allowing a boolean expression - to be checked to determine whether the trigger should be fired. + Add a WHEN clause to CREATE TRIGGER, allowing a boolean expression + to be checked to determine whether the trigger should be fired. - For BEFORE triggers this is mostly a matter of spec compliance; but + For BEFORE triggers this is mostly a matter of spec compliance; but for AFTER triggers it can provide a noticeable performance improvement, since queuing of a deferred trigger event and re-fetching of the row(s) at end of statement can be - short-circuited if the trigger does not need to be fired. + short-circuited if the trigger does not need to be fired. - Add exclusion constraints, which generalize the concept of + Add exclusion constraints, which generalize the concept of uniqueness to support any indexable commutative operator, not just equality. Two rows violate the exclusion constraint if "row1.col OP row2.col" is TRUE for each of the columns in - the constraint. + the constraint. - Support ORDER BY within aggregate function calls, at long last + Support ORDER BY within aggregate function calls, at long last providing a non-kluge method for controlling the order in which values are fed to an aggregate function. At the same time eliminate the old implementation restriction that DISTINCT was only supported - for single-argument aggregates. + for single-argument aggregates. - Behavioral change: formerly, agg(DISTINCT x) dropped null values of + Behavioral change: formerly, agg(DISTINCT x) dropped null values of x unconditionally. Now, it does so only if the aggregate's transition function is strict; otherwise nulls are treated as DISTINCT - normally would, i.e., you get one copy. + normally would, i.e., you get one copy. @@ -214,13 +307,41 @@ - Allow rewriting forms of ALTER TABLE to skip WAL - logging. + Support "x IS NOT NULL" clauses as index-scan + conditions. - Speed up INFORMATION_SCHEMA's privilege views. + When estimating the selectivity of an inequality + "column > constant" or "column < constant", and the + comparison value is in the first or last histogram bin or + outside the histogram entirely, try to fetch the actual + column min or max value using an index scan (if there is an + index on the column). If successful, replace the lower or + upper histogram bound with that value before carrying on with + the estimate. This limits the estimation error caused by + moving min/max values when the comparison value is close to + the min or max. + + + + + Generic implementation of red-black binary tree. + For now, only GIN uses it during index creation. Using + self-balanced tree greatly speeds up index creation in corner + cases with preordered data. + + + + + Allow rewriting forms of ALTER TABLE to skip WAL + logging. + + + + + Speed up INFORMATION_SCHEMA's privilege views. @@ -306,47 +427,171 @@ - Allow read-only connections during recovery, also - known as Hot Standby. This provides a built-in master-slave - replication solution. + Add the ability to store inheritance-tree + statistics in pg_statistic, and teach ANALYZE to compute such + stats for tables that have subclasses. - Provide a parenthesized-options syntax for VACUUM, analogous to + Revise pgstat's tracking of tuple changes to + improve the reliability of decisions about when to + auto-analyze. The previous code depended on n_live_tuples + + n_dead_tuples - last_anl_tuples, where all three of these + numbers could be bad estimates from ANALYZE itself. Even + worse, in the presence of a steady flow of HOT updates and + matching HOT-tuple reclamations, auto-analyze might never + trigger at all, even if all three numbers are exactly right, + because n_dead_tuples could hold steady. + + + + + Support ALTER TABLESPACE name SET/RESET ( + tablespace_options ), currently supporting seq_page_cost and + random_page_cost as parameters. + + + + + New faster implementation of VACUUM FULL. The old + idiom of using CLUSTER instead of VACUUM FULL for speed is + now obsolete. + + + + + Add buffer access counters to + pg_stat_statements. + + + + + Add some simple support and documentation for using + process-specific oom_adj settings to prevent the postmaster + from being OOM-killed on Linux systems. + + + + + Place tablespace directories in their own + subdirectory so pg_migrator can upgrade clusters without + renaming the tablespace directories. + + + + + Introduce Streaming Replication. + + + + + Add pg_table_size() and pg_indexes_size() to + provide more user-friendly wrappers around the + pg_relation_size() function. + + + + + Add pg_stat_reset_shared('bgwriter') to reset the + cluster-wide shared statistics of the bgwriter. + + + + + Replace ALTER TABLE ... SET STATISTICS DISTINCT + with a more general mechanism. Attributes can now have + options, just as relations and tablespaces do, and the + reloptions code is used to parse, validate, and store + them. + + + + + Fix longstanding gripe that we check for + 0000000001.history at start of archive recovery, even when we + know it is never present. + + + + + Make standby server continuously retry restoring + the next WAL segment with restore_command, if the connection + to the primary server is lost. This ensures that the standby + can recover automatically, if the connection is lost for a + long time and standby falls behind so much that the required + WAL segments have been archived and deleted in the + master. + + + This also makes standby_mode useful without + streaming replication; the server will keep retrying + restore_command every few seconds until the trigger file is + found. That's the same basic functionality pg_standby + offers, but without the bells and whistles. + + + + + Add functions to reset the statistics counter for a + single table/index or a single function. + + + + + Augment EXPLAIN output with more details on Hash + nodes. + + + + + Reindexing shared system catalogs is now fully + transactional and crash-safe. + + + + + Allow read-only connections during recovery, also + known as Hot Standby. This provides a built-in master-slave + replication solution. + + + + + Provide a parenthesized-options syntax for VACUUM, analogous to that recently adopted for EXPLAIN. This will allow additional options to be implemented in future without having to make them fully-reserved keywords. The old syntax remains available for - existing options, however. + existing options, however. - Add support for an application_name parameter, which is displayed - in pg_stat_activity and recorded in log entries. + Add support for an application_name parameter, which is displayed + in pg_stat_activity and recorded in log entries. - Fix longstanding problems in VACUUM caused by untimely - interruptions. + Fix longstanding problems in VACUUM caused by untimely + interruptions. - Add YAML to list of EXPLAIN formats. + Add YAML to list of EXPLAIN formats. - Add an EXPLAIN (BUFFERS) option to show buffer-usage statistics. + Add an EXPLAIN (BUFFERS) option to show buffer-usage statistics. - Add a hook to let loadable modules get control at ProcessUtility + Add a hook to let loadable modules get control at ProcessUtility execution, and use it to extend contrib/pg_stat_statements to track - utility commands. + utility commands. @@ -403,35 +648,40 @@ - When querying a table with child tables, do not check permissions + Add support for RADIUS authentication. + + + + + When querying a table with child tables, do not check permissions on the child tables, only on the parent table. The old behavior was found to be useless and confusing in virtually all cases, and also - contrary to the SQL standard. + contrary to the SQL standard. - Add a hook to CREATE/ALTER ROLE to allow an external module to + Add a hook to CREATE/ALTER ROLE to allow an external module to check the strength of database passwords, and create a sample implementation of such a hook as a new contrib module - "passwordcheck". + "passwordcheck". - Add large object access control. + Add large object access control. - Allow LDAP authentication to operate in search+bind + Allow LDAP authentication to operate in search+bind mode, meaning it does a search for the user in the directory first, and then binds with the DN found for this user. This allows for LDAP logins in scenarios where the DN of the user cannot be determined simply by prefix and suffix, such as the case where different users are located in different containers. The old way of authentication can be - significantly faster, so it's kept as an option. + significantly faster, so it's kept as an option. @@ -467,17 +717,45 @@ - Remove configuration parameter regex_flavor. It is now always - "advanced". + Fix 3-parameter form of bit substring() to throw + error for negative length, as required by SQL + standard. - Teach the regular expression functions to do case-insensitive + Add get_bit/set_bit functions for bit strings, + paralleling those for bytea, and implement OVERLAY() for bit + strings and bytea. + + + + + Add string_agg aggregate functions. The + one-argument version concatenates the input values into a + string. The two-argument version also does the same thing, + but inserts delimiters between elements. + + + + + Honor to_char() "FM" specification in YYY, YY, and + Y; it was already honored by YYYY. + + + + + Remove configuration parameter regex_flavor. It is now always + "advanced". + + + + + Teach the regular expression functions to do case-insensitive matching and locale-dependent character classification properly when the database encoding is UTF8. This previously only worked correctly for single-byte encodings. It is still broken for other - multibyte encodings. + multibyte encodings. @@ -513,16 +791,22 @@ - When doing "ARRAY[...]::domain", where domain is a domain - over an array type, we need to check domain constraints. Regression - introduced in 8.4. + Allow enums to be created with zero labels, for use + during binary upgrade. - Fix integer-to-bit-string conversions to handle the first + When doing "ARRAY[...]::domain", where domain is a domain + over an array type, we need to check domain constraints. Regression + introduced in 8.4. + + + + + Fix integer-to-bit-string conversions to handle the first fractional byte correctly when the output bit width is wider than - the given integer by something other than a multiple of 8 bits. + the given integer by something other than a multiple of 8 bits. @@ -557,13 +841,13 @@ - initdb now selects the encoding SQL_ASCII when the locale specifies - US-ASCII. This case previously failed. + initdb now selects the encoding SQL_ASCII when the locale specifies + US-ASCII. This case previously failed. - Add init[db] option to pg_ctl. + Add init[db] option to pg_ctl. @@ -590,8 +874,30 @@ - Throw error when a specified connection service name is not - found in pg_service.conf, instead of ignoring it. + Add user-specific .pg_service.conf file. + + + + + Add new escaping functions PQescapeLiteral and + PQescapeIdentifier. + + + + + Introduce two new libpq connection functions, + PQconnectdbParams and PQconnectStartParams, which are + analogous to PQconnectdb and PQconnectStart respectively, but + accept two NULL-terminated arrays, keywords and values, + rather than conninfo strings. This avoids the need to build + the conninfo string in cases where it might be inconvenient + to do so. + + + + + Throw error when a specified connection service name is not + found in pg_service.conf, instead of ignoring it. @@ -607,28 +913,34 @@ - In psql, show view definition only with \d+, not with \d. + Allow psql variables to be interpolated with + literal or identifier escaping. - In psql, ignore UTF-8-encoded Unicode byte-order mark at the - beginning of a file if the client encoding is UTF-8. + In psql, show view definition only with \d+, not with \d. - Improve psql's tabular display of wrapped-around data by inserting + In psql, ignore UTF-8-encoded Unicode byte-order mark at the + beginning of a file if the client encoding is UTF-8. + + + + + Improve psql's tabular display of wrapped-around data by inserting markers in the formerly-always-blank columns just to left and right of the data. "pset linestyle old-ascii" is added to make - the previous behavior available if anyone really wants it. + the previous behavior available if anyone really wants it. - Simplify psql's new linestyle behavior to default to + Simplify psql's new linestyle behavior to default to linestyle=ascii all the time, rather than hoping we can tell - whether the terminal supports UTF-8 characters. + whether the terminal supports UTF-8 characters. @@ -657,91 +969,189 @@ + Procedural Languages + + PL/pgSQL - PL/pgSQL is installed by default. + Add "USING expressions" option to PL/pgSQL's OPEN + cursor FOR EXECUTE. - Remove PL/pgSQL's RENAME declaration, which has + PL/pgSQL is installed by default. + + + + + Remove PL/pgSQL's RENAME declaration, which has bizarre and mostly nonfunctional behavior, and is so little used that no one has been interested in fixing it. To ensure that possible uses are covered, remove the ALIAS declaration's arbitrary restriction that only $n identifiers can be - aliased. + aliased. - The PL/pgSQL parser and scanner were reworked to behave much more - sanely: + The PL/pgSQL parser and scanner were reworked to behave much more + sanely: - A variable reference will only be recognized where it can validly + A variable reference will only be recognized where it can validly go, ie, a place where a column value or parameter would be legal, instead of the former behavior that would replace any textual match including table names and column aliases (leading to syntax errors - later on). + later on). - When a name could refer either to a PL/pgSQL variable or a + When a name could refer either to a PL/pgSQL variable or a table column, PL/pgSQL formerly always assumed the variable was meant, sometimes resulting in surprising behavior. Now, PL/pgSQL can assume the variable is meant, or assume the table column is meant, or throw an error in ambiguous cases. For safety the default is to throw error. To configure this see the PL/pgSQL documentation. + linkend="plpgsql-var-subst">the PL/pgSQL documentation. - Error reporting is much nicer: it no longer shows edited + Error reporting is much nicer: it no longer shows edited versions of statements that look significantly different from what - you wrote. + you wrote. - Note that this change affects the set of keywords that are + Note that this change affects the set of keywords that are reserved in PL/pgSQL (i.e., cannot be the name of a PL/pgSQL variable). Now, all keywords shown as reserved in Appendix C are reserved for PL/pgSQL purposes as well. However, many PL/pgSQL-only keywords that were formerly treated as reserved no longer are. As in regular SQL, you can double-quote a variable's name if you want to use a - name that conflicts with a reserved keyword. + name that conflicts with a reserved keyword. - Add support for anonymous code blocks (DO blocks) to PL/Perl. + PL/pgSQL IN parameters now accept value assignments. - Support arrays as parameters and return values of PL/Python - functions. + Allow cursor commands MOVE FORWARD n, MOVE BACKWARD n, + MOVE FORWARD ALL, MOVE BACKWARD ALL in PL/pgSQL. + + + + + PL/pgSQL functions can now better cope with row types + containing dropped columns. + + + + + + + PL/Perl + + + + Add utility functions to PL/Perl: quote_literal, + quote_nullable, quote_ident, encode_bytea, decode_bytea, + looks_like_number, encode_array_literal, + encode_array_constructor. + + + + + Add plperl.on_plperl_init, plperl.on_plperlu_init, + and plperl.on_init settings for startup code. + + + + + Allow (ineffective) use of "require". If the + required module is not already loaded then it dies. So "use + strict;" now works in PL/Perl. + + + + + Pre-load the feature module if Perl >= 5.10. + So "use feature :5.10;" now works in PL/Perl. + + + + + Stored procedure subs are now given names. The + names are not visible in ordinary use, but they make tools + like Devel::NYTProf and Devel::Cover much more + useful. + + + + + Handle END blocks in PL/Perl. + + + + + Clean up package namespace use and use of Safe. - Add Python 3 support to PL/Python. It behaves more or less + Change log level of Perl warnings from NOTICE to + WARNING. + + + + + Add support for anonymous code blocks (DO blocks) to PL/Perl. + + + + + Improve error context reporting in PL/Perl, for + easier debugging. + + + + + Convert a Perl array to a PostgreSQL array when returned by + set-returning functions as well as non-SRFs. + + + + + + + PL/Python + + + + Improved printing of Python exceptions in + PL/Python. + + + + + Add PL/Python DO handler. + + + + + Support arrays as parameters and return values of PL/Python + functions. + + + + + Add Python 3 support to PL/Python. It behaves more or less unchanged compared to Python 2, but the new language variant is - called plpython3u. - - - - - Add DO statement to support execution of procedural language - code without having to create a function for it. - - - - - Support use of function argument names to identify which - actual arguments match which function parameters. The syntax - uses AS, for example funcname(value AS arg1, anothervalue AS - arg2). + called plpython3u. @@ -761,35 +1171,6 @@ server encoding as necessary. - - - Improve error context reporting in PL/Perl, for - easier debugging. - - - - - PL/pgSQL IN parameters now accept value assignments. - - - - - Convert a Perl array to a PostgreSQL array when returned by - set-returning functions as well as non-SRFs. - - - - - Allow cursor commands MOVE FORWARD n, MOVE BACKWARD n, - MOVE FORWARD ALL, MOVE BACKWARD ALL in PL/pgSQL. - - - - - PL/pgSQL functions can now better cope with row types - containing dropped columns. - - Improve error context reporting in PL/Python, for easier @@ -802,17 +1183,24 @@ + + Additional Supplied Modules - Add \shell and \setshell meta commands to pgbench. + Add query text to auto_explain output. + + + + + Add \shell and \setshell meta commands to pgbench. - \shell runs an external shell command. \setshell - does the same and assigns the result to a variable. + \shell runs an external shell command. \setshell + does the same and assigns the result to a variable. @@ -849,18 +1237,47 @@ - ecpg + ECPG - Refactor ECPG grammar so that it uses the core grammar's - unreserved_keyword list, minus a few specific words that have to be - treated specially. This de-reserves a number of words in ECPG. + Add sqlda support in both native and compatibility + mode. - Added dynamic cursor names to ECPG. + Fix SQL3 type return value: For non-SQL3 types ECPG + used to return -OID. This will break if there are enough OIDs + to fill the namespace. Therefore we play it safe and return + 0 if there is no OID->SQL3 type mapping available. + + + + + Make char the default sqlda type. + + + + + Add DESCRIBE [OUTPUT] statement. + + + + + Add out-of-scope cursor support to native mode. + + + + + Refactor ECPG grammar so that it uses the core grammar's + unreserved_keyword list, minus a few specific words that have to be + treated specially. This de-reserves a number of words in ECPG. + + + + + Added dynamic cursor names to ECPG. @@ -886,8 +1303,20 @@ - Disable triggering failover with a signal in pg_standby on Windows. - It never really worked before anyway. + Add basic build support for Visual Studio 2008, + without resorting to generating the build files for 2005 and + then converting them. + + + + + Added support for 64-bit Windows platforms. + + + + + Disable triggering failover with a signal in pg_standby on Windows. + It never really worked before anyway. @@ -931,8 +1360,59 @@ - configure --enable-thread-safety is now the default (but can still - be turned off). + Improve PGXS makefile system to allow the module's + makefile to specify where to install DATA and DOCS files. + This is mainly intended to allow versioned installation, eg, + install into contrib/fooM.N/ rather than directly into + contrib/. + + + + + Get rid of the need for manual maintenance of the + initial contents of pg_attribute, by having genbki.pl derive + the information from the various catalog header files. This + greatly simplifies modification of the "bootstrapped" + catalogs. This patch finally kills genbki.sh and + Gen_fmgrtab.sh; we now rely entirely on Perl scripts for + those build steps. To avoid creating a Perl build dependency + where there was not one before, they will be built and + shipped in tarballs. + + + + + Move the default configuration for the MSVC build + system to config_default.pl, and allow using config.pl to + override the defaults. + + + + + Make configure check the version of Perl we're + building with, and reject versions < 5.8. + + + + + Remove all support for working around on systems + that don't provide a working 64-bit integer type. + + + + + Add new make targets "world", "install-world" and + "installcheck-world" to build, install and check just about + everything. In addition to everything built installed and + tested by all, install and installcheck targets, these build + HTML documentation, build and test contrib, and test + procedural languages and ECPG. + + + + + configure --enable-thread-safety is now the default (but can still + be turned off).