From 6cd67c931a5cdd1a058031c0d02fc3199fafe2a9 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 11 Nov 2004 03:59:14 +0000 Subject: [PATCH] Cleaups: < * Allow GRANT/REVOKE permissions to be given to all schema objects with one > * Allow GRANT/REVOKE permissions to be applied to all schema objects with one 60c60 < specifications. This is because new databases are created by copying > specifications. This is because new databases are created by copying 63c63 < directory would create a new database with tables that had incorrect > directory would create a new database with tables that had incorrect 72c72 < > 85c85 < By not showing commented-out variables, we discourage people from > By not showing commented-out variables, we discourage people from 91c91 < * Allow point-in-time recovery to archive partially filled write-ahead > * Allow point-in-time recovery to archive partially filled write-ahead 102c102 < Currently all schemas are owned by the super-user because they are > Currently all schemas are owned by the super-user because they are 128c128 < * Allow INET subnet tests with non-constants to be indexed > * Allow INET subnet tests using non-constants to be indexed 143,144c143,144 < * Allow to_char to print localized month names < * Allow functions to have a search path specified at creation time > * Allow to_char() to print localized month names > * Allow functions to have a schema search path specified at creation time 146c146 < * Add GUC variable to allow output of interval values in ISO8601 format > * Add a GUC variable to allow output of interval values in ISO8601 format 154,155c154,155 < * Prevent inet cast to cidr if the unmasked bits are not zero, or < zero bits > * Prevent INET cast to CIDR if the unmasked bits are not zero, or > zero the bits 158c158 < o Allow nulls in arrays > o Allow NULLs in arrays 160,161c160,161 < o Delay resolution of array expression type so assignment coercion < can be performed on empty array expressions > o Delay resolution of array expression's data type so assignment > coercion can be performed on empty array expressions 218,219c218,219 < key, foreign key [inheritance] < * UNIQUE INDEX on base column not honored on inserts/updates from > key, foreign key > * UNIQUE INDEX on base column not honored on INSERTs/UPDATEs from 221c221 < (dup) should fail [inheritance] > (dup) should fail 246c246 < * Fetch heap pages matching index entries in sequential order [performance] > * Fetch heap pages matching index entries in sequential order 307c307 < functionality in DELETE. It's been agreed that the keyword should > functionality in DELETE. It's been agreed that the keyword should 318c318 < * Allow PREPARE to automatically determine parameter types based on the SQL > * Allow PREPARE to automatically determine parameter types based on the SQL 340,342d339 < * Allow CREATE TABLE foo (f1 INT CHECK (f1 > 0) CHECK (f1 < 10)) to work < by searching for non-conflicting constraint names, and prefix with < table name? 347c344 < new database. > a new database. 350,351d346 < * Ignore temporary tables from other sessions when processing < inheritance? 354,355c349,351 < * Add a session mode to warn about non-standard SQL usage in queries < * Add MERGE command that does UPDATE/DELETE, or on failure, INSERT (rules, triggers?) > * Add a GUC variable to warn about non-standard SQL usage in queries > * Add MERGE command that does UPDATE/DELETE, or on failure, INSERT (rules, > triggers?) 357,359c353,356 < * Add NOVICE output level for helpful messages like automatic sequence/index creation < * Add COMMENT ON for all cluster global objects (users, groups, < databases and tablespaces) > * Add NOVICE output level for helpful messages like automatic sequence/index > creation > * Add COMMENT ON for all cluster global objects (users, groups, databases > and tablespaces) 363c360 < When enabled, this would allow errors in multi-statement transactions > When enabled, this would allow errors in multi-statement transactions 417c414 < o Allow COPY to optionally include column headings as the first line > o Allow COPY to optionally include column headings in the first line 450c447 < > 462c459 < o Handle references to temporary tables that are created, destroyed, > o Handle references to temporary tables that are created, destroyed, 464c461 < > 469d465 < o Improve PL/PgSQL exception handling using savepoints 488c484 < > 503d498 < 518c513 < o Add pg_dumpall custom format dumps. > o Add pg_dumpall custom format dumps. 520c515 < This is probably best done by combining pg_dump and pg_dumpall > This is probably best done by combining pg_dump and pg_dumpall 532d526 < o Improve error handling (?) 555c549 < Adding shared locks requires recording the table/rows numbers in a > Adding shared locks requires recording the table/rows numbers in a 643c637 < Posix_fadvise() can control both sequential/random file caching and > Posix_fadvise() can control both sequential/random file caching and 703c697 < from distributted.net, http://www1.distributed.net/source, > from distributted.net, http://www1.distributed.net/source, 729c723 < * Add connection pooling [pool] > * Add connection pooling 755d748 < 759c752 < > 768c761 < so an abrupt operating system restart might lose a few seconds of > so an abrupt operating system restart might lose a few seconds of 785c778 < * Add utility to compute accurate random_page_cost value > * Create utility to compute accurate random_page_cost value 787,789d779 < * Allow sorting, temp files, temp tables to use multiple work directories < < This allows the I/O load to be spread across multiple disk drives. 795a786 > 808,809c799,800 < < * Use mmap() rather than SYSV shared memory or to write WAL files (?) [mmap] > > * Use mmap() rather than SYSV shared memory or to write WAL files (?) 812,813c803,804 < portability issues. Anonymous mmap (or mmap to /dev/zero) is required < to prevent I/O overhead. > portability issues. Anonymous mmap (or mmap to /dev/zero) is required > to prevent I/O overhead. 817,819c808,810 < Doing I/O to large tables would consume a lot of address space or < require frequent mapping/unmapping. Extending the file also causes < mapping problems that might require mapping only individual pages, > Doing I/O to large tables would consume a lot of address space or > require frequent mapping/unmapping. Extending the file also causes > mapping problems that might require mapping only individual pages, 821c812 < way to _prevent_ I/O to disk from the dirty shared buffers so changes > way to _prevent_ I/O to disk from the dirty shared buffers so changes 826c817 < tuple overhead > per-tuple overhead 829,831c820,822 < This would involve using multiple threads or processes to do optimization, < sorting, or execution of single query. The major advantage of such a < feature would be to allow multiple CPUs to work together to process a > This would involve using multiple threads or processes to do optimization, > sorting, or execution of single query. The major advantage of such a > feature would be to allow multiple CPUs to work together to process a 834c825 < * Research the use of larger pages sizes > * Research the use of larger page sizes 842a834 > * Move some /contrib modules out to their own project sites 845d836 < * Improve access-permissions check on data directory in Cygwin (Tom) 847,848c838 < * Clarify use of 'application' and 'command' tags in SGML docs < * Better document ability to build only certain interfaces (Marc) > * Improve documentation to build only interfaces (Marc) 852,853d841 < * Research interaction of setitimer() and sleep() used by statement_timeout < * Rename /scripts directory because they are all C programs now 856,857d843 < * Allow binaries to be statically linked so they are more easily relocated < * Move some /contrib modules out to their own project sites 862c848 < o Remove per-backend parameter file and move into shared memory? > o Remove per-backend parameter file and move into shared memory 877,878c863,864 < o Update clients to use data types, typmod, schema.table.column names of < result sets using new query protocol > o Update clients to use data types, typmod, schema.table.column names > of result sets using new query protocol 900d885 < * Kris is Kris Jurka 910c895 < * Simon is Simon Riggs > * Simon is Simon Riggs 913d897 < * Teodor is --- doc/TODO | 148 ++++++++++++++++++++++++++++----------------------------------- 1 file changed, 66 insertions(+), 82 deletions(-) diff --git a/doc/TODO b/doc/TODO index 1c9798bfb5..d8004575b9 100644 --- a/doc/TODO +++ b/doc/TODO @@ -6,7 +6,7 @@ TODO list for PostgreSQL Bracketed items "[]" have more detail. Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) -Last updated: Wed Nov 10 00:47:03 EST 2004 +Last updated: Wed Nov 10 22:59:04 EST 2004 The most recent version of this document can be viewed at the PostgreSQL web site, http://www.PostgreSQL.org. @@ -40,7 +40,7 @@ Administration * Allow major upgrades without dump/reload, perhaps using pg_upgrade * Have SHOW ALL and pg_settings show descriptions for server-side variables -* Allow GRANT/REVOKE permissions to be given to all schema objects with one +* Allow GRANT/REVOKE permissions to be applied to all schema objects with one command * Remove unreferenced table files created by transactions that were in-progress when the server terminated abruptly @@ -57,10 +57,10 @@ Administration tablespace t2 All objects in the default database tablespace must have default tablespace - specifications. This is because new databases are created by copying + specifications. This is because new databases are created by copying directories. If you mix default tablespace tables and tablespace-specified tables in the same directory, creating a new database from such a mixed - directory would create a new database with tables that had incorrect + directory would create a new database with tables that had incorrect explicit tablespaces. To fix this would require modifying pg_class in the newly copied database, which we don't currently do. @@ -69,7 +69,7 @@ Administration It could start with a random tablespace from a supplied list and cycle through the list. - + * Add "include file" functionality in postgresql.conf * Add session start time and last statement time to pg_stat_activity * Allow server logs to be remotely read using SQL commands @@ -82,13 +82,13 @@ Administration * Un-comment all variables in postgresql.conf - By not showing commented-out variables, we discourage people from + By not showing commented-out variables, we discourage people from thinking that re-commenting a variable returns it to its default. This has to address environment variables that are then overridden by config file values. Another option is to allow commented values to return to their default values. -* Allow point-in-time recovery to archive partially filled write-ahead +* Allow point-in-time recovery to archive partially filled write-ahead logs Currently only full WAL files are archived. This means that the most @@ -99,7 +99,7 @@ Administration transaction id for point-in-time recovery * Set proper permissions on non-system schemas during db creation - Currently all schemas are owned by the super-user because they are + Currently all schemas are owned by the super-user because they are copied from the template1 database. * Add a function that returns the 'uptime' of the postmaster @@ -125,7 +125,7 @@ Data Types * Remove Money type, add money formatting for decimal type * Change NUMERIC to enforce the maximum precision, and increase it * Add function to return compressed length of TOAST data values -* Allow INET subnet tests with non-constants to be indexed +* Allow INET subnet tests using non-constants to be indexed * Add transaction_timestamp(), statement_timestamp(), clock_timestamp() functionality @@ -140,10 +140,10 @@ Data Types * Allow infinite dates just like infinite timestamps * Have initdb set DateStyle based on locale? * Add pg_get_acldef(), pg_get_typedefault(), and pg_get_attrdef() -* Allow to_char to print localized month names -* Allow functions to have a search path specified at creation time +* Allow to_char() to print localized month names +* Allow functions to have a schema search path specified at creation time * Allow substring/replace() to get/set bit values -* Add GUC variable to allow output of interval values in ISO8601 format +* Add a GUC variable to allow output of interval values in ISO8601 format * Fix data types where equality comparison isn't intuitive, e.g. box * Merge hardwired timezone names with the TZ database; allow either kind everywhere a TZ name is currently taken @@ -151,14 +151,14 @@ Data Types present australian_timezones hack) * Allow TIMESTAMP WITH TIME ZONE to store the original timezone information, either by name or offset from UTC -* Prevent inet cast to cidr if the unmasked bits are not zero, or - zero bits +* Prevent INET cast to CIDR if the unmasked bits are not zero, or + zero the bits * ARRAYS - o Allow nulls in arrays + o Allow NULLs in arrays o Allow MIN()/MAX() on arrays - o Delay resolution of array expression type so assignment coercion - can be performed on empty array expressions + o Delay resolution of array expression's data type so assignment + coercion can be performed on empty array expressions o Modify array literal representation to handle array index lower bound of other than one @@ -215,10 +215,10 @@ Indexes ======= * Allow inherited tables to inherit index, UNIQUE constraint, and primary - key, foreign key [inheritance] -* UNIQUE INDEX on base column not honored on inserts/updates from + key, foreign key +* UNIQUE INDEX on base column not honored on INSERTs/UPDATEs from inherited table: INSERT INTO inherit_table (unique_index_col) VALUES - (dup) should fail [inheritance] + (dup) should fail The main difficulty with this item is the problem of creating an index that can span more than one table. @@ -243,7 +243,7 @@ Indexes Uniqueness (index) checks are done when updating a column even if the column is not modified by the UPDATE. -* Fetch heap pages matching index entries in sequential order [performance] +* Fetch heap pages matching index entries in sequential order Rather than randomly accessing heap pages based on index entries, mark heap pages needing access in a bitmap and do the lookups in sequential @@ -304,7 +304,7 @@ Commands * Allow additional tables to be specified in DELETE for joins UPDATE already allows this (UPDATE...FROM) but we need similar - functionality in DELETE. It's been agreed that the keyword should + functionality in DELETE. It's been agreed that the keyword should be USING, to avoid anything as confusing as DELETE FROM a FROM b. * Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT @@ -315,7 +315,7 @@ Commands * Allow SET CONSTRAINTS to be qualified by schema/table name * Allow TRUNCATE ... CASCADE/RESTRICT * Allow PREPARE of cursors -* Allow PREPARE to automatically determine parameter types based on the SQL +* Allow PREPARE to automatically determine parameter types based on the SQL statement * Allow finer control over the caching of prepared query plans @@ -337,30 +337,27 @@ Commands message, perhaps indicating the row modified or other custom information. -* Allow CREATE TABLE foo (f1 INT CHECK (f1 > 0) CHECK (f1 < 10)) to work - by searching for non-conflicting constraint names, and prefix with - table name? * Use more reliable method for CREATE DATABASE to get a consistent copy of db? Currently the system uses the operating system COPY command to create - new database. + a new database. * Add C code to copy directories for use in creating new databases -* Ignore temporary tables from other sessions when processing - inheritance? * Have pg_ctl look at PGHOST in case it is a socket directory? * Allow column-level GRANT/REVOKE privileges -* Add a session mode to warn about non-standard SQL usage in queries -* Add MERGE command that does UPDATE/DELETE, or on failure, INSERT (rules, triggers?) +* Add a GUC variable to warn about non-standard SQL usage in queries +* Add MERGE command that does UPDATE/DELETE, or on failure, INSERT (rules, + triggers?) * Add ON COMMIT capability to CREATE TABLE AS SELECT -* Add NOVICE output level for helpful messages like automatic sequence/index creation -* Add COMMENT ON for all cluster global objects (users, groups, - databases and tablespaces) +* Add NOVICE output level for helpful messages like automatic sequence/index + creation +* Add COMMENT ON for all cluster global objects (users, groups, databases + and tablespaces) * Add an option to automatically use savepoints for each statement in a multi-statement transaction. - When enabled, this would allow errors in multi-statement transactions + When enabled, this would allow errors in multi-statement transactions to be automatically ignored. * Make row-wise comparisons work per SQL spec @@ -414,7 +411,7 @@ Commands o Allow COPY to understand \x as a hex byte o Have COPY return the number of rows loaded/unloaded (?) - o Allow COPY to optionally include column headings as the first line + o Allow COPY to optionally include column headings in the first line * CURSOR o Allow UPDATE/DELETE WHERE CURRENT OF cursor @@ -447,7 +444,7 @@ Commands o Add SET PATH for schemas (?) This is basically the same as SET search_path. - + o Prevent conflicting SET options from being set This requires a checking function to be called after the server @@ -459,14 +456,13 @@ Commands Currently only constants are supported. o Change PL/PgSQL to use palloc() instead of malloc() - o Handle references to temporary tables that are created, destroyed, + o Handle references to temporary tables that are created, destroyed, then recreated during a session, and EXECUTE is not used - + This requires the cached PL/PgSQL byte code to be invalidated when an object referenced in the function is changed. o Fix PL/pgSQL RENAME to work on variables other than OLD/NEW - o Improve PL/PgSQL exception handling using savepoints o Allow function parameters to be passed by name, get_employee_salary(emp_id => 12345, tax_year => 2001) o Add Oracle-style packages @@ -485,7 +481,7 @@ Clients We already allow XML to be stored in the database, and XPath queries can be used on that data using /contrib/xml2. It also supports XSLT transformations. - + * Add a libpq function to support Parse/DescribeStatement capability * Prevent libpq's PQfnumber() from lowercasing the column name (?) * Allow libpq to access SQLSTATE so pg_ctl can test for connection failure @@ -500,7 +496,6 @@ Clients the database as psql. * Consistently display privilege information for all objects in psql - * pg_dump o Have pg_dump use multi-statement transactions for INSERT dumps o Allow pg_dump to use multiple -t and -n switches @@ -515,9 +510,9 @@ Clients o Stop dumping CASCADE on DROP TYPE commands in clean mode o Add full object name to the tag field. eg. for operators we need '=(integer, integer)', instead of just '='. - o Add pg_dumpall custom format dumps. + o Add pg_dumpall custom format dumps. - This is probably best done by combining pg_dump and pg_dumpall + This is probably best done by combining pg_dump and pg_dumpall into a single binary. o Add CSV output format @@ -529,7 +524,6 @@ Clients information about the Informix-compatibility module. o Solve cardinality > 1 for input descriptors / variables (?) - o Improve error handling (?) o Add a semantic check level, e.g. check if a table really exists o fix handling of DB attributes that are arrays o Use backend PREPARE/EXECUTE facility for ecpg where possible @@ -552,7 +546,7 @@ Referential Integrity * Implement dirty reads or shared row locks and use them in RI triggers - Adding shared locks requires recording the table/rows numbers in a + Adding shared locks requires recording the table/rows numbers in a shared area, and this could potentially be a large amount of data. One idea is to store the table/row numbers in a separate table and set a bit on the row indicating looking in this new table is required to @@ -640,7 +634,7 @@ Cache * Allow free-behind capability for large sequential scans, perhaps using posix_fadvise() - Posix_fadvise() can control both sequential/random file caching and + Posix_fadvise() can control both sequential/random file caching and free-behind behavior, but it is unclear how the setting affects other backends that also have the file open, and the feature is not supported on all operating systems. @@ -700,7 +694,7 @@ Locking contention, improving concurrency. * Add code to detect an SMP machine and handle spinlocks accordingly - from distributted.net, http://www1.distributed.net/source, + from distributted.net, http://www1.distributed.net/source, in client/common/cpucheck.cpp On SMP machines, it is possible that locks might be released shortly, @@ -726,7 +720,7 @@ Startup Time database startup overhead, but a few operating systems (WIn32, Solaris) might benefit from threading. -* Add connection pooling [pool] +* Add connection pooling It is unclear if this should be done inside the backend code or done by something external like pgpool. The passing of file descriptors to @@ -752,11 +746,10 @@ Write-Ahead Log * Add WAL index reliability improvement to non-btree indexes * Allow the pg_xlog directory location to be specified during initdb with a symlink back to the /data location - * Allow WAL information to recover corrupted pg_controldata * Find a way to reduce rotational delay when repeatedly writing last WAL page - + Currently fsync of WAL requires the disk platter to perform a full rotation to fsync again. One idea is to write the WAL to different offsets that might reduce the rotational delay. @@ -765,7 +758,7 @@ Write-Ahead Log Instead of guaranteeing recovery of all committed transactions, this would provide improved performance by delaying WAL writes and fsync - so an abrupt operating system restart might lose a few seconds of + so an abrupt operating system restart might lose a few seconds of committed transactions but still be consistent. We could perhaps remove the 'fsync' parameter (which results in an an inconsistent database) in favor of this capability. @@ -782,17 +775,15 @@ Optimizer / Executor table. Instead a sequential scan could get the matching value. * Precompile SQL functions to avoid overhead -* Add utility to compute accurate random_page_cost value +* Create utility to compute accurate random_page_cost value * Improve ability to display optimizer analysis using OPTIMIZER_DEBUG -* Allow sorting, temp files, temp tables to use multiple work directories - - This allows the I/O load to be spread across multiple disk drives. * Have EXPLAIN ANALYZE highlight poor optimizer estimates * Use CHECK constraints to influence optimizer decisions CHECK constraints contain information about the distribution of values within the table. This is also useful for implementing subtables where a tables content is distributed across several subtables. + * Consider using hash buckets to do DISTINCT, rather than sorting This would be beneficial when there are few distinct values. @@ -805,33 +796,33 @@ Miscellaneous Async I/O allows multiple I/O requests to be sent to the disk with results coming back asynchronously. - -* Use mmap() rather than SYSV shared memory or to write WAL files (?) [mmap] + +* Use mmap() rather than SYSV shared memory or to write WAL files (?) This would remove the requirement for SYSV SHM but would introduce - portability issues. Anonymous mmap (or mmap to /dev/zero) is required - to prevent I/O overhead. + portability issues. Anonymous mmap (or mmap to /dev/zero) is required + to prevent I/O overhead. * Consider mmap()'ing files into a backend? - Doing I/O to large tables would consume a lot of address space or - require frequent mapping/unmapping. Extending the file also causes - mapping problems that might require mapping only individual pages, + Doing I/O to large tables would consume a lot of address space or + require frequent mapping/unmapping. Extending the file also causes + mapping problems that might require mapping only individual pages, leading to thousands of mappings. Another problem is that there is no - way to _prevent_ I/O to disk from the dirty shared buffers so changes + way to _prevent_ I/O to disk from the dirty shared buffers so changes could hit disk before WAL is written. * Add a script to ask system configuration questions and tune postgresql.conf * Use a phantom command counter for nested subtransactions to reduce - tuple overhead + per-tuple overhead * Consider parallel processing a single query - This would involve using multiple threads or processes to do optimization, - sorting, or execution of single query. The major advantage of such a - feature would be to allow multiple CPUs to work together to process a + This would involve using multiple threads or processes to do optimization, + sorting, or execution of single query. The major advantage of such a + feature would be to allow multiple CPUs to work together to process a single query. -* Research the use of larger pages sizes +* Research the use of larger page sizes Source Code @@ -840,26 +831,21 @@ Source Code * Add use of 'const' for variables in source tree * Rename some /contrib modules from pg* to pg_* * Move some things from /contrib into main tree +* Move some /contrib modules out to their own project sites * Remove warnings created by -Wcast-align * Move platform-specific ps status display info from ps_status.c to ports -* Improve access-permissions check on data directory in Cygwin (Tom) * Add optional CRC checksum to heap and index pages -* Clarify use of 'application' and 'command' tags in SGML docs -* Better document ability to build only certain interfaces (Marc) +* Improve documentation to build only interfaces (Marc) * Remove or relicense modules that are not under the BSD license, if possible * Remove memory/file descriptor freeing before ereport(ERROR) * Acquire lock on a relation before building a relcache entry for it -* Research interaction of setitimer() and sleep() used by statement_timeout -* Rename /scripts directory because they are all C programs now * Promote debug_query_string into a server-side function current_query() * Allow the identifier length to be increased via a configure option -* Allow binaries to be statically linked so they are more easily relocated -* Move some /contrib modules out to their own project sites * Remove Win32 rename/unlink looping if unnecessary * Remove kerberos4 from source tree? * Win32 - o Remove per-backend parameter file and move into shared memory? + o Remove per-backend parameter file and move into shared memory o Remove configure.in check for link failure when cause is found o Remove readdir() errno patch when runtime/mingwex/dirent.c rev 1.4 is released @@ -874,8 +860,8 @@ Source Code o Allow dynamic character set handling o Add decoded type, length, precision o Use compression? - o Update clients to use data types, typmod, schema.table.column names of - result sets using new query protocol + o Update clients to use data types, typmod, schema.table.column names + of result sets using new query protocol --------------------------------------------------------------------------- @@ -897,7 +883,6 @@ Developers who have claimed items are: * Jan is Jan Wieck of Afilias, Inc. * Joe is Joe Conway * Karel is Karel Zak -* Kris is Kris Jurka * Magnus is Magnus Hagander * Marc is Marc Fournier of PostgreSQL, Inc. * Matthew T. O'Connor @@ -907,8 +892,7 @@ Developers who have claimed items are: * Peter is Peter Eisentraut * Philip is Philip Warner of Albatross Consulting Pty. Ltd. * Rod is Rod Taylor -* Simon is Simon Riggs +* Simon is Simon Riggs * Stephan is Stephan Szabo * Tatsuo is Tatsuo Ishii of Software Research Assoc. -* Teodor is * Tom is Tom Lane of Red Hat -- 2.11.0