diff --git a/HISTORY b/HISTORY index ebefc78cb8..710b4e994c 100644 --- a/HISTORY +++ b/HISTORY @@ -8,12 +8,11 @@ Major changes in this release: * IN/NOT IN subqueries are now much more efficient - - Note: In previous releases, IN/NOT IN subqueries were joined to the - upper query by sequentially scanning the subquery looking for a - join. The 7.4 code uses the same sophisticated techniques used by - ordinary joins and so is much faster, and is now faster than EXISTS - subqueries. + In previous releases, IN/NOT IN subqueries were joined to the + upper query by sequentially scanning the subquery looking for a + join. The 7.4 code uses the same sophisticated techniques used by + ordinary joins and so is much faster, and is now faster than + EXISTS subqueries. * Improved GROUP BY processing by using hash buckets Note: In previous releases, GROUP BY totals were accumulated by @@ -353,6 +352,8 @@ Query Changes * New SQL-standard information schema (Peter) + + Note: bjm * Add read-only transactions (Peter) * Add server variable regex_flavor to control regular expression processing (Tom) @@ -360,52 +361,121 @@ Tkach) * Allow users to see their own queries in pg_stat_activity (Kevin Brown) + + Note: In prior releases, only the super-user could see query + strings using pg_stat_activity. Now ordinary users can see their + own query strings. * Fix subquery aggregates of upper query columns to match SQL spec. (Tom) + + Note: bjm * Add option to prevent auto-addition of tables referenced in query (Nigel J. Andrews) + + Note: By default, tables mentioned in the query are automatically + added to the FROM clause if they are not already there. This option + disabled that behavior. * Allow UPDATE ... SET col = DEFAULT (Rod) + + Note: This allows UPDATE to set a column to its default value. * Allow expressions to be used in LIMIT/OFFSET (Tom) + + Note: In prior releases, LIMIT/OFFSET could only use constants, not + expressions. * Change EXECUTE INTO to CREATE TABLE AS EXECUTE (Peter) + + Note: bjm ? _________________________________________________________________ Object Manipulation Changes * Make CREATE SEQUENCE grammar more SQL1999 standards compliant (Neil) + + Note: bjm ? * Add FOR EACH STATEMENT statement-level triggers (Neil) + + Note: While this allows a trigger to fire at the end of a + statement, it does not allow the trigger to access all rows + modified by the query. This capability is planned for a future + release. * Add DOMAIN CHECK constraints (Rod) + + Note: This greatly increases the usefulness of domains by allowing + them to use CHECK constraints. * Add ALTER DOMAIN .. SET / DROP NOT NULL, SET / DROP DEFAULT, ADD / DROP CONSTRAINT (Rod) + + Note: This allows manipulation of existing domains. * Fix several zero-column table bugs (Tom) + + Note: PostgreSQL supports zero-column tables. This fixes various + bugs that occur when using such tables. * Have ALTER TABLE ... ADD PRIMARY KEY add NOT NULL constraint (Rod) + + Note: In prior releases, ALTER TABLE ADD PRIMARY would add a unique + index, but not a NOT NULL constraint. That is fixed in this + release. * Add ALTER DOMAIN OWNER (Rod) * Add ALTER TABLE ... WITHOUT OIDS (Rod) + + Note: This allows control over whether new and updated rows will + have an oid column. This is most useful for saving storage space. * Add ALTER SEQUENCE to modify min/max/increment/cache/cycle values (Rod) * Add ALTER TABLE ... CLUSTER ON (Alvaro Herrera) + + Note: This command is used by pg_dump to record the CLUSTER column + for each table previously clustered. This information is used by + database-wide cluster to cluster all previously clustered tables. * Improve DOMAIN automatic type casting (Rod, Tom) * Allow dollar signs in identifiers, except as first character (Tom) * Disallow dollar signs in operator names, so x=$1 works (Tom) * Allow SQL200X inheritance syntax LIKE *subtable*, INCLUDING DEFAULTS (Rod) * Add WITH GRANT OPTION clause to GRANT, per SQL spec (Peter) + + Note: Allow GRANT to give other users the ability to grant + permissions on a object. _________________________________________________________________ Utility Command Changes * Add ON COMMIT clause to CREATE TABLE for temp tables (Gavin) + + Note: This adds the ability for a table to be dropped or all rows + deleted on transaction commit. * Allow cursors outside transactions using WITH HOLD (Neil) + + Note: In previous releases, cursors were removed at the end of the + transaction. Using WITH HOLD, the current release allows + transaction to remain outside their own transaction. * MOVE/FETCH 0 now does nothing (Bruce) + + Note: In previous releases, MOVE 0 moved to the end of the cursor, + and FETCH 0 fetched all remaning rows. * Cause MOVE/FETCH to return the number of rows moved/fetched, or zero if at the beginning/end of cursor, per SQL spec (Bruce) + + Note: In prior releases, the row count returned by MOVE and FETCH + did not accurately reflect the number of rows processed. * Properly handle SCROLL with cursors, or report an error (Neil) + + Note: Certain cursors can not be fetched backwards optimally. By + specifying SCROLL, extra work will be performed to guarantee that + the cursor can be fetched in reverse or random order. * Implement SQL92-compatible FIRST, LAST, ABSOLUTE n, RELATIVE n options for FETCH and MOVE (Tom) * Allow EXPLAIN on DECLARE CURSOR (Tom) + + Note: Prior versions would not allow EXPLAIN on a DECLARE + statement. * Allow CLUSTER to use index marked as pre-clustered by default (Alvaro Herrera) * Allow CLUSTER to cluster all tables (Alvaro Herrera) + + Note: This allows all previously clustered tables in a database to + be reclustered with a single command. * Prevent CLUSTER on partial indexes (Tom) * Allow \r and \r\n termination for COPY files (Bruce) * Disallow literal carriage return as a data value, @@ -414,10 +484,15 @@ * Recover from COPY IN/OUT failure cleanly (Tom) * Prevent possible memory leaks in COPY (Tom) * Make TRUNCATE transaction-safe (Rod) - * Multiple pg_dump fixes, including tar format and large objects + + Note: Truncate can now be used inside a transaction, and rolled + back if the transaction aborts. + * Multiple pggla_dump fixes, including tar format and large objects * Allow pg_dump to dump specific schemas (Neil) * Allow pg_dump to preserve column storage characteristics (Christopher) + + Note: This preserves ALTER TABLE ... SET STORAGE information. * Allow pg_dump to preserve CLUSTER characteristics (Christopher) * Have pg_dumpall use GRANT/REVOKE to dump database-level permissions (Tom) @@ -435,30 +510,56 @@ * Allow pg_ctl to better handle non-standard ports (Greg) * Functional indexes have been generalized into expressional indexes (Tom) + + Note: In prior releases, only columns could be used in functional + indexes. This release allows any type of expression. * Syntax errors now reported as 'syntax error' rather than 'parse error' (Tom) * Have SHOW TRANSACTION_ISOLATION match input to SET TRANSACTION_ISOLATION (Tom) * Have COMMENT ON DATABASE on non-local database generate a warning (Rod) + + Note: Database comments are stored in database-local tables so + comments on a database have to be stored in each database. * Improve reliability of LISTEN/NOTIFY (Tom) * Allow REINDEX to reliably reindex non-shared system catalog indexes (Tom) + + Note: This allows system tables to be reindexed without the + requirement of a standalone backend, which was necessary in + previous releases. The only tables that now require a standalone + backend for reindex are the global system tables pg_database, + pg_shadow, and pg_group. * pg_dump --use-set-session-authorization and --no-reconnect now do nothing, all dumps use SET SESSION AUTHORIZATION + + Note: pg_dump now no longer reconnects to switch users, but instead + uses SET SESSION AUTHORIZATION. This should reduce password + prompting during restores. * Long options for pg_dump are now available on all platforms + + Note: We now include our own long option processing routines. _________________________________________________________________ Data Type and Function Changes * New extra_float_digits server parameter to control float precision display (Pedro Ferreira, Tom) + + Note: This controls precision output which was causing regression + testing problems. * Allow +1300 as a numeric timezone specifier, for FJST (Tom) * Remove rarely used oidrand(), oidsrand(), and userfntest() functions (Neil) * Add md5() function to main server, already in /contrib/pgcrypto (Joe) + + Note: An md5 function was frequently requested. For more complex + encryption capabilities, use /contrib/pgcrypto. * Increase date range of timestamp (John Cochran) + + Note: bjm ?? * Change EXTRACT(EPOCH FROM timestamp) so timestamp without time zone is assumed to be in local time, not GMT (Tom) * Trap division by zero in case the operating system doesn't prevent @@ -468,6 +569,9 @@ * Fixes for to_char() (Karel) * Allow functions that can take any argument data type and return any data type, using ANYELEMENT and ANYARRAY (Joe) + + Note: This allows the creation of functions that can work with any + data type. * Arrays may now be specified as ARRAY[1,2,3], ARRAY[['a','b'],['c','d']], or ARRAY[ARRAY[ARRAY[2]]] (Joe) * Allow proper comparisons for arrays (Joe) @@ -476,18 +580,31 @@ (Joe) * Allow WHERE qualification 'expr >oper< ANY/SOME/ALL (array-expr)' (Joe) + + Note: This allows arrays to behave like subqueries or a list of + values: SELECT * FROM tab WHERE col IN array_val * Allow polymorphic SQL functions (Joe) + + Note: bjm ?? * New array functions array_append(), array_cat(), array_lower(), array_prepend(), array_to_string(), array_upper(), string_to_array() (Joe) * Allow user defined aggregates to use polymorphic functions (Joe) + + Note: bjm ?? * Allow polymorphic user defined aggregates (Joe) * Allow assignments to empty arrays (Joe) * Allow 60 in seconds fields of timestamp, time, interval input values (Tom) + + Note: Sixty-second values are needed for leap seconds. * Allow CIDR data type to be cast to text (Tom) * Allow the creation of special LIKE indexes for non-C locales (Peter) + + Note: There is no way for non-ASCII locales to use indexes for LIKE + comparisons. However, this release adds a way to create a special + index for LIKE. bjm ?? * Disallow invalid timezone names (Tom) * Trim trailing spaces when CHAR() is cast to VARCHAR or TEXT (Tom) * Make FLOAT(p) measure the precision p in bits, not decimal digits @@ -501,10 +618,15 @@ convention for the sign of timezone offsets, ie, positive is east from UTC (Tom) * Fix date_trunc('quarter',...) (B?jthe Zolt?n) + + Note: Prior releases returned an incorrect value for this function + call. * Make initcap() more compatible with Oracle (Mike Nolan) + + Note: bjm ?? * Allow only DateStyle field order for date values not in ISO format (Greg) - * Add new DateStyle values MDY, DMY, and YMD, honor US and European + * Add new DateStyle values MDY, DMY, and YMD; honor US and European for backward compatibility (Tom) * 'now' will no longer work as a column default, use now() (change required for prepared statements) (Tom) @@ -519,7 +641,7 @@ Server-side Language Changes * Prevent PL/pgSQL crash when RETURN NEXT is used on a zero-row - record var. (Tom) + record variable (Tom) * Make PL/python's spi_execute interface handle NULLs properly (Andrew Bosma) * Allow PL/pgSQL to declare variables of composite types without @@ -527,6 +649,11 @@ * Fix PL/python _quote() function to handle big integers (?) * Make PL/python an untrusted language, now called plpythonu (Kevin Jacobs, Tom) + + Note: The Python language no longer supports a restricted execution + environment, so we removed the trusted version of PL/python. If + this situation changes, we will re-add a version of PL/python that + can be used by non-super users. * Allow polymorphic PL/pgSQL functions (Tom, Joe) * Improved compiled function caching mechanism in PL/pgSQL with full support for polymorphism (Joe) @@ -541,17 +668,32 @@ Psql Changes * Add "\pset pager always" to always use pager (Greg) + + Note: This forces the pager to be used even if the number of rows + is less than the screen height --- this is valuable for rows that + wrap across several screen rows. * Improve tab completion (Rod, Ross Reedstrom, Ian Barwick) * Reorder \? help into groupings (Harald Armin Massa, Bruce) * Add backslash commands for listing schemas, casts, and conversions (Christopher) - * \encoding now changes based on client_encoding server variable + * \encoding now changes based on the client_encoding server variable (Tom) + + Note: In previous versions, \encoding was not aware of encoding + changes made using SET CLIENT_ENCODING. * Save edit history into readline history (Ross) + + Note: When \e is used to edit a query, the result is saved in the + readline history for retrieval using the up arrow. * Improve \d display (Christopher) * Enhance HTML mode to be more standards-compliant (Greg) * New '\set AUTOCOMMIT off' capability (Tom) + + Note: This takes the place of the remove server variable + 'autocommit'. * New '\set VERBOSITY' to control error detail (Tom) + + Note: This controls the new error reporting details. * New %T prompt string to show transaction status (Tom) * Long options for psql are now available on all platforms _________________________________________________________________ @@ -561,7 +703,16 @@ * Allow PQcmdTuples() to return row counts for MOVE and FETCH (Neil) * Add PQfreemem() for freeing memory on Win32, suggest for NOTIFY (Bruce) + + Note: Win32 requires that memory allocated in a library be freed by + a function in the same library, hence free() doesn't work for + freeing memory allocated by libpq. PQfreemem() is the proper way to + free libpq memory, especially on Win32, and is recommended for + other platforms as well. * Document service capability, and add sample file (Bruce) + + Note: This allows clients to look up connection information in a + central file on the client machine. * Make PQsetdbLogin() have the same defaults as PQconnectdb() (Tom) * Allow libpq to cleanly fail when result sets are too large (Tom) * Improve performance of PGunescapeBytea() (Ben Lamb) @@ -570,10 +721,14 @@ * Allow pqInternalNotice() to accept a format string and args instead of just a preformatted message (Tom, Sean Chittenden) * Allow control SSL negotiation with sslmode values "disable", - "allow", "Prefer", and "require" (Jon Jensen) + "allow", "prefer", and "require" (Jon Jensen) * Allow new error codes and levels of text (Tom) * Allow access to the underlying table and column of a query result (Tom) + + Note: This is helpful for query-builder applications that want to + know the underlying table and column names associated with a + specific result set. * Allow access to the current transaction status (Tom) * Add ability to pass binary data directly to the backend (Tom) * Add PQexecPrepared() and PQsendQueryPrepared() functions which @@ -594,9 +749,15 @@ * Prevent possible memory leak or core dump during libpgtcl shutdown (Tom) * Add ecpg Informix compatibility (Michael) + + Note: This allows ecpg to process embedded C programs that were + written using certain Informix extensions. * Add ecpg DECIMAL type that is fixed length, for Informix (Michael) * Allow thread-safe ecpg with --enable-thread-safety (Lee Kindness, Bruce) + + Note: This allows multiple ecpg threads to access the database at + the same time. * Move python client interface to http://www.pygresql.org (Marc) _________________________________________________________________ @@ -625,7 +786,13 @@ * Improve Linux startup scripts (Slawomir Sudnik, Darko Prenosil) * Add support for AMD Opteron and Itanium (Jeffrey W. Baker, Bruce) * Remove --enable-recode option to configure + + Note: This was no longer needed now that we have CREATE CONVERSION. * Generate a compile error if spinlock code is not found (Bruce) + + Note: Platforms without spinlock code will now fail to compile, + rather than silently using semaphores. This failure can be disabled + with a new configure option. _________________________________________________________________ Contrib Changes @@ -663,7 +830,7 @@ field order * Input date order must now be YYYY-MM-DD (with 4-digit year) or match DATESTYLE - * Pattern matching operations can use indexes regardless of locale + * Pattern matching operations can use indexes regardless of locale? _________________________________________________________________ Release 7.3.4