diff --git a/doc/TODO b/doc/TODO index 4ca5718f7c2a2af7eb688b57f53e685f5cb46c68..992545485e3b301eb9b07e1eb17ab8f3d1ac9fcd 100644 --- a/doc/TODO +++ b/doc/TODO @@ -2,7 +2,7 @@ PostgreSQL TODO List ==================== Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) -Last updated: Fri Aug 26 14:52:30 EDT 2005 +Last updated: Fri Aug 26 14:59:39 EDT 2005 The most recent version of this document can be viewed at http://www.postgresql.org/docs/faqs.TODO.html. @@ -22,7 +22,6 @@ Administration * %Remove behavior of postmaster -o after making postmaster/postgres flags unique -* -Allow limits on per-db/role connections * %Allow pooled connections to list all prepared queries This would allow an application inheriting a pooled connection to know @@ -40,13 +39,11 @@ Administration it is unknown whether other problems exist. This item mostly requires additional testing rather than of writing any new code. -* -Prevent dropping user that still owns objects, or auto-drop the objects * %Set proper permissions on non-system schemas during db creation Currently all schemas are owned by the super-user because they are copied from the template1 database. -* -Add the client IP address and port to pg_stat_activity * Support table partitioning that allows a single table to be stored in subtables that are partitioned based on the primary key or a WHERE clause @@ -156,8 +153,6 @@ Monitoring a database for analysis. * %Add ability to monitor the use of temporary sort files -* -Add session start time and last statement time to pg_stat_activity -* -Add a function that returns the start time of the postmaster * Allow server logs to be remotely read and removed using SQL commands @@ -227,11 +222,8 @@ Data Types * Arrays o Allow NULLs in arrays - o -Allow MIN()/MAX() on arrays 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 * Binary Data @@ -250,7 +242,6 @@ Data Types Functions ========= -* -Add function to return compressed length of TOAST data values * Allow INET subnet tests using non-constants to be indexed * Add transaction_timestamp(), statement_timestamp(), clock_timestamp() functionality @@ -277,12 +268,6 @@ Functions o to_char(INTERVAL '43 hours 20 minutes', 'WK:DD:HR:MI') => 0:1:19:20 o to_char(INTERVAL '3 years 5 months','MM') => 41 -* -Prevent to_char() on interval from returning meaningless values - - For example, to_char('1 month', 'mon') is meaningless. Basically, - most date-related parameters to to_char() are meaningless for - intervals because interval is not anchored to a date. - * Add sleep() function, remove from regress.c @@ -318,27 +303,14 @@ Views / Rules * Add the functionality for WITH CHECK OPTION clause of CREATE VIEW * Allow NOTIFY in rules involving conditionals -* -Have views on temporary tables exist in the temporary namespace -* -Allow temporary views on non-temporary tables * Allow VIEW/RULE recompilation when the underlying tables change SQL Commands ============ -* -Add BETWEEN SYMMETRIC/ASYMMETRIC * Change LIMIT/OFFSET and FETCH/MOVE to use int8 -* -Add E'' escape string marker so eventually ordinary strings can treat - backslashes literally, for portability - -* -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 - be USING, to avoid anything as confusing as DELETE FROM a FROM b. - * Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT -* -Allow REINDEX to rebuild all database indexes * Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY * %Allow SET CONSTRAINTS to be qualified by schema/table name * %Allow TRUNCATE ... CASCADE/RESTRICT @@ -379,12 +351,6 @@ SQL Commands creation * %Add COMMENT ON for all cluster global objects (roles, 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 - to be automatically ignored. - * %Make row-wise comparisons work per SQL spec * Add RESET CONNECTION command to reset all session state @@ -423,7 +389,6 @@ SQL Commands o Allow UPDATE tab SET ROW (col, ...) = (...) for updating multiple columns - o -Allow FOR UPDATE queries to do NOWAIT locks * ALTER @@ -470,11 +435,7 @@ SQL Commands This requires the use of a savepoint before each COPY line is processed, with ROLLBACK on COPY failure. - 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 in the first line - o -Allow COPY FROM ... CSV to interpret newlines and carriage - returns in data * GRANT/REVOKE @@ -522,7 +483,6 @@ SQL Commands * SHOW/SET - o -Have SHOW ALL show descriptions for server-side variables o Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM ANALYZE, and CLUSTER o Add SET PATH for schemas? @@ -532,22 +492,15 @@ SQL Commands * Server-Side Languages - o -Allow PL/PgSQL's RAISE function to take expressions - - Currently only constants are supported. - - o -Change PL/PgSQL to use palloc() instead of malloc() o Fix PL/pgSQL RENAME to work on variables other than OLD/NEW o Allow function parameters to be passed by name, get_employee_salary(emp_id => 12345, tax_year => 2001) o Add Oracle-style packages o Add table function support to pltcl, plpython - o -Allow PL/pgSQL EXECUTE query_var INTO record_var; o Add capability to create and call PROCEDURES o Allow PL/pgSQL to handle %TYPE arrays, e.g. tab.col%TYPE[] o Allow function argument names to be queries from PL/PgSQL o Add MOVE to PL/pgSQL - o -Pass arrays natively instead of as text between plperl and postgres o Add support for polymorphic arguments and return types to languages other than PL/PgSQL o Add support for OUT and INOUT parameters to languages other @@ -595,7 +548,6 @@ Clients o %Add dumping of comments on index columns o %Replace crude DELETE FROM method of pg_dumpall --clean for cleaning of roles with separate DROP commands - o -Add dumping and restoring of LOB comments 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 '='. @@ -635,11 +587,9 @@ Referential Integrity memory. This could exhaust memory for very large trigger queues. This item involves dumping large queues into files. -* -Implement shared row locks and use them in RI triggers * Change foreign key constraint for array -> element to mean element in array? * Allow DEFERRABLE UNIQUE constraints? -* -Allow triggers to be disabled * Allow triggers to be disabled in only the current session. This is currently possible by starting a multi-statement transaction, @@ -693,9 +643,6 @@ Exotic Features This can be done using dblink and two-phase commit. -* -Add two-phase commit - - * Add the features of packages o Make private objects accessable only to objects in the same schema @@ -717,44 +664,12 @@ Indexes that can span more than one table. * Allow SELECT ... FOR UPDATE on inherited tables -* -Prevent inherited tables from expanding temporary subtables of other - sessions * Add UNIQUE capability to non-btree indexes -* -Use indexes for MIN() and MAX() - - MIN/MAX queries can already be rewritten as SELECT col FROM tab ORDER - BY col {DESC} LIMIT 1. Completing this item involves doing this - transformation automatically. - -* -Use index to restrict rows returned by multi-key index when used with - non-consecutive keys to reduce heap accesses - - For an index on col1,col2,col3, and a WHERE clause of col1 = 5 and - col3 = 9, spin though the index checking for col1 and col3 matches, - rather than just col1; also called skip-scanning. - * Prevent index uniqueness checks when UPDATE does not modify the column 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 - - Rather than randomly accessing heap pages based on index entries, mark - heap pages needing access in a bitmap and do the lookups in sequential - order. Another method would be to sort heap ctids matching the index - before accessing the heap rows. - -* -Allow non-bitmap indexes to be combined by creating bitmaps in memory - - This feature allows separate indexes to be ANDed or ORed together. This - is particularly useful for data warehousing applications that need to - query the database in an many permutations. This feature scans an index - and creates an in-memory bitmap, and allows that bitmap to be combined - with other bitmap created in a similar way. The bitmap can either index - all TIDs, or be lossy, meaning it records just page numbers and each - page tuple has to be checked for validity in a separate pass. - * Allow the creation of on-disk bitmap indexes which can be quickly combined with other bitmap indexes @@ -770,8 +685,6 @@ Indexes one column or expression indexes, perhaps using per-index statistics * Add fillfactor to control reserved free space during index creation * Allow the creation of indexes with mixed ascending/descending specifiers -* -Fix incorrect rtree results due to wrong assumptions about "over" - operator semantics * Allow constraint_exclusion to work for UNIONs like it does for inheritance, and allow it to work for UPDATE and DELETE queries @@ -779,7 +692,6 @@ Indexes * GIST o Add more GIST index support for geometric data types - o -Add concurrency to GIST o Allow GIST indexes to create certain complex index types, like digital trees (see Aoki) @@ -810,7 +722,6 @@ Fsync Ideally this requires a separate test program that can be run at initdb time or optionally later. -* -Allow multiple blocks to be written to WAL with one write() * %Add an option to sync() before fsync()'ing checkpoint files * Add program to test if fsync has a delay compared to non-fsync @@ -826,13 +737,6 @@ Cache Usage backends that also have the file open, and the feature is not supported on all operating systems. -* -Consider use of open/fcntl(O_DIRECT) to minimize OS caching, - for WAL writes - - O_DIRECT doesn't have the same media write guarantees as fsync, so it - is in addition to the fsync method, not in place of it. - -* -Cache last known per-tuple offsets to speed long tuple access * Speed up COUNT(*) We could use a fixed row count and a +/- count to follow MVCC @@ -858,18 +762,6 @@ Cache Usage o Query execute plan o Query results -* -Allow the size of the buffer cache used by temporary objects to be - specified as a GUC variable - - Larger local buffer cache sizes requires more efficient handling of - local cache lookups. - -* -Improve the background writer - - Allow the background writer to more efficiently write dirty buffers - from the end of the LRU cache and use a clock sweep algorithm to - write other dirty buffers to reduced checkpoint I/O - * Allow sequential scans to take advantage of other concurrent sequentiqal scans, also called "Synchronised Scanning" @@ -894,7 +786,6 @@ Vacuum write lock. However, the read lock promotion to write lock could lead to deadlock situations. -* -Add a warning when the free space map is too small * Maintain a map of recently-expired rows This allows vacuum to target specific pages for possible free space @@ -914,7 +805,6 @@ Vacuum * Auto-vacuum - o -Move into the backend code o Use free-space map information to guide refilling o %Issue log message to suggest VACUUM FULL if a table is nearly empty? @@ -925,11 +815,6 @@ Vacuum Locking ======= -* -Make locking of shared data structures more fine-grained - - This requires that more locks be acquired but this would reduce lock - contention, improving concurrency. - * Add code to detect an SMP machine and handle spinlocks accordingly from distributted.net, http://www1.distributed.net/source, in client/common/cpucheck.cpp @@ -938,12 +823,6 @@ Locking while on non-SMP machines, the backend should sleep so the process holding the lock can complete and release it. -* -Improve SMP performance on i386 machines - - i386-based SMP machines can generate excessive context switching - caused by lock failure in high concurrency situations. This may be - caused by CPU cache line invalidation inefficiencies. - * Research use of sched_yield() for spinlock acquisition failure * Fix priority ordering of read and write light-weight locks (Neil) @@ -976,7 +855,6 @@ Write-Ahead Log partial page writes during recovery. These pages can also be eliminated from point-in-time archive files. - o -Add ability to turn off full page writes o When off, write CRC to WAL and check file system blocks on recovery @@ -1012,9 +890,6 @@ Write-Ahead Log remove the 'fsync' parameter (which results in an an inconsistent database) in favor of this capability. -* -Eliminate WAL logging for CREATE TABLE AS when not doing WAL archiving -* -Change WAL to use 32-bit CRC, for performance reasons - Optimizer / Executor ==================== @@ -1032,17 +907,10 @@ Optimizer / Executor * Create utility to compute accurate random_page_cost value * Improve ability to display optimizer analysis using OPTIMIZER_DEBUG * 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. -* -ANALYZE should record a pg_statistic entry for an all-NULL column * Log queries where the optimizer row estimates were dramatically different from the number of rows actually found? * Allow constraint_elimination to be automatically performed @@ -1096,11 +964,9 @@ Source Code * %Promote debug_query_string into a server-side function current_query() * %Allow the identifier length to be increased via a configure option * Remove Win32 rename/unlink looping if unnecessary -* -Remove kerberos4 from source tree * Allow cross-compiling by generating the zic database on the target system * Improve NLS maintenace of libpgport messages linked onto applications * Allow ecpg to work with MSVC and BCC -* -Make src/port/snprintf.c thread-safe * Add xpath_array() to /contrib/xml2 to return results as an array * Allow building in directories containing spaces @@ -1115,7 +981,6 @@ Source Code spaces and then copy the install to a directory with spaces. * Fix sgmltools so PDFs can be generated with bookmarks -* -Add C code on Unix to copy directories for use in creating new databases * %Clean up compiler warnings (especially with gcc version 4) @@ -1130,7 +995,6 @@ Source Code backslashes o Re-enable timezone output on log_line_prefix '%t' when a shorter timezone string is available - o -Improve dlerror() reporting string o Fix problem with shared memory on the Win32 Terminal Server o %Add support for Unicode diff --git a/doc/src/FAQ/TODO.html b/doc/src/FAQ/TODO.html index 641c33962f0f7abfbdbf0e0f09fec00bbc16d38e..f96793750162c05a93df1842cd38a095bb99b09c 100644 --- a/doc/src/FAQ/TODO.html +++ b/doc/src/FAQ/TODO.html @@ -8,7 +8,7 @@ <body bgcolor="#FFFFFF" text="#000000" link="#FF0000" vlink="#A00000" alink="#0000FF"> <h1><a name="section_1">PostgreSQL TODO List</a></h1> <p>Current maintainer: Bruce Momjian (<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br/> -Last updated: Fri Aug 26 14:52:30 EDT 2005 +Last updated: Fri Aug 26 14:59:39 EDT 2005 </p> <p>The most recent version of this document can be viewed at<br/> <a href="http://www.postgresql.org/docs/faqs.TODO.html">http://www.postgresql.org/docs/faqs.TODO.html</a>. @@ -27,7 +27,6 @@ first. <ul> <li>%Remove behavior of postmaster -o after making postmaster/postgres flags unique - </li><li>-<em>Allow limits on per-db/role connections</em> </li><li>%Allow pooled connections to list all prepared queries <p> This would allow an application inheriting a pooled connection to know the queries prepared in the current session. @@ -43,12 +42,10 @@ first. it is unknown whether other problems exist. This item mostly requires additional testing rather than of writing any new code. </p> - </li><li>-<em>Prevent dropping user that still owns objects, or auto-drop the objects</em> </li><li>%Set proper permissions on non-system schemas during db creation <p> Currently all schemas are owned by the super-user because they are copied from the template1 database. </p> - </li><li>-<em>Add the client IP address and port to pg_stat_activity</em> </li><li>Support table partitioning that allows a single table to be stored in subtables that are partitioned based on the primary key or a WHERE clause @@ -144,8 +141,6 @@ first. a database for analysis. </p> </li><li>%Add ability to monitor the use of temporary sort files - </li><li>-<em>Add session start time and last statement time to pg_stat_activity</em> - </li><li>-<em>Add a function that returns the start time of the postmaster</em> </li><li>Allow server logs to be remotely read and removed using SQL commands </li></ul> <h1><a name="section_4">Data Types</a></h1> @@ -212,11 +207,8 @@ first. </li><li>Arrays <ul> <li>Allow NULLs in arrays - </li><li>-<em>Allow MIN()/MAX() on arrays</em> </li><li>Delay resolution of array expression's data type so assignment coercion can be performed on empty array expressions - </li><li>-<em>Modify array literal representation to handle array index lower bound</em> - of other than one </li></ul> </li><li>Binary Data <ul> @@ -233,8 +225,7 @@ first. <h1><a name="section_5">Functions</a></h1> <ul> - <li>-<em>Add function to return compressed length of TOAST data values</em> - </li><li>Allow INET subnet tests using non-constants to be indexed + <li>Allow INET subnet tests using non-constants to be indexed </li><li>Add transaction_timestamp(), statement_timestamp(), clock_timestamp() functionality <p> Current CURRENT_TIMESTAMP returns the start time of the current @@ -259,11 +250,6 @@ first. </li><li>to_char(INTERVAL '43 hours 20 minutes', 'WK:DD:HR:MI') => 0:1:19:20 </li><li>to_char(INTERVAL '3 years 5 months','MM') => 41 </li></ul> - </li><li>-<em>Prevent to_char() on interval from returning meaningless values</em> -<p> For example, to_char('1 month', 'mon') is meaningless. Basically, - most date-related parameters to to_char() are meaningless for - intervals because interval is not anchored to a date. -</p> </li><li>Add sleep() function, remove from regress.c </li></ul> <h1><a name="section_6">Multi-Language Support</a></h1> @@ -294,24 +280,13 @@ first. </p> </li><li>Add the functionality for WITH CHECK OPTION clause of CREATE VIEW </li><li>Allow NOTIFY in rules involving conditionals - </li><li>-<em>Have views on temporary tables exist in the temporary namespace</em> - </li><li>-<em>Allow temporary views on non-temporary tables</em> </li><li>Allow VIEW/RULE recompilation when the underlying tables change </li></ul> <h1><a name="section_8">SQL Commands</a></h1> <ul> - <li>-<em>Add BETWEEN SYMMETRIC/ASYMMETRIC</em> - </li><li>Change LIMIT/OFFSET and FETCH/MOVE to use int8 - </li><li>-<em>Add E'' escape string marker so eventually ordinary strings can treat</em> - backslashes literally, for portability - </li><li>-<em>Allow additional tables to be specified in DELETE for joins</em> -<p> UPDATE already allows this (UPDATE...FROM) but we need similar - functionality in DELETE. It's been agreed that the keyword should - be USING, to avoid anything as confusing as DELETE FROM a FROM b. -</p> + <li>Change LIMIT/OFFSET and FETCH/MOVE to use int8 </li><li>Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT - </li><li>-<em>Allow REINDEX to rebuild all database indexes</em> </li><li>Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY </li><li>%Allow SET CONSTRAINTS to be qualified by schema/table name </li><li>%Allow TRUNCATE ... CASCADE/RESTRICT @@ -347,11 +322,6 @@ first. creation </li><li>%Add COMMENT ON for all cluster global objects (roles, databases and tablespaces) - </li><li>-<em>Add an option to automatically use savepoints for each statement in a</em> - multi-statement transaction. -<p> When enabled, this would allow errors in multi-statement transactions - to be automatically ignored. -</p> </li><li>%Make row-wise comparisons work per SQL spec </li><li>Add RESET CONNECTION command to reset all session state <p> This would include resetting of all variables (RESET ALL), dropping of @@ -384,7 +354,6 @@ first. </p> </li><li>Allow UPDATE tab SET ROW (col, ...) = (...) for updating multiple columns - </li><li>-<em>Allow FOR UPDATE queries to do NOWAIT locks</em> </li></ul> </li><li>ALTER <ul> @@ -425,11 +394,7 @@ first. <p> This requires the use of a savepoint before each COPY line is processed, with ROLLBACK on COPY failure. </p> - </li><li>-<em>Allow COPY to understand \x as a hex byte</em> </li><li>%Have COPY return the number of rows loaded/unloaded? - </li><li>-<em>Allow COPY to optionally include column headings in the first line</em> - </li><li>-<em>Allow COPY FROM ... CSV to interpret newlines and carriage</em> - returns in data </li></ul> </li><li>GRANT/REVOKE <ul> @@ -472,8 +437,7 @@ first. </li></ul> </li><li>SHOW/SET <ul> - <li>-<em>Have SHOW ALL show descriptions for server-side variables</em> - </li><li>Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM + <li>Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM ANALYZE, and CLUSTER </li><li>Add SET PATH for schemas? <p> This is basically the same as SET search_path. @@ -481,21 +445,15 @@ first. </li></ul> </li><li>Server-Side Languages <ul> - <li>-<em>Allow PL/PgSQL's RAISE function to take expressions</em> -<p> Currently only constants are supported. -</p> - </li><li>-<em>Change PL/PgSQL to use palloc() instead of malloc()</em> - </li><li>Fix PL/pgSQL RENAME to work on variables other than OLD/NEW + <li>Fix PL/pgSQL RENAME to work on variables other than OLD/NEW </li><li>Allow function parameters to be passed by name, get_employee_salary(emp_id => 12345, tax_year => 2001) </li><li>Add Oracle-style packages </li><li>Add table function support to pltcl, plpython - </li><li>-<em>Allow PL/pgSQL EXECUTE query_var INTO record_var;</em> </li><li>Add capability to create and call PROCEDURES </li><li>Allow PL/pgSQL to handle %TYPE arrays, e.g. tab.col%TYPE[<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?"></a>] </li><li>Allow function argument names to be queries from PL/PgSQL </li><li>Add MOVE to PL/pgSQL - </li><li>-<em>Pass arrays natively instead of as text between plperl and postgres</em> </li><li>Add support for polymorphic arguments and return types to languages other than PL/PgSQL </li><li>Add support for OUT and INOUT parameters to languages other @@ -539,7 +497,6 @@ first. </li><li>%Add dumping of comments on index columns </li><li>%Replace crude DELETE FROM method of pg_dumpall --clean for cleaning of roles with separate DROP commands - </li><li>-<em>Add dumping and restoring of LOB comments</em> </li><li>Stop dumping CASCADE on DROP TYPE commands in clean mode </li><li>%Add full object name to the tag field. eg. for operators we need '=(integer, integer)', instead of just '='. @@ -576,11 +533,9 @@ first. memory. This could exhaust memory for very large trigger queues. This item involves dumping large queues into files. </p> - </li><li>-<em>Implement shared row locks and use them in RI triggers</em> </li><li>Change foreign key constraint for array -> element to mean element in array? </li><li>Allow DEFERRABLE UNIQUE constraints? - </li><li>-<em>Allow triggers to be disabled</em> </li><li>Allow triggers to be disabled in only the current session. <p> This is currently possible by starting a multi-statement transaction, modifying the system tables, performing the desired SQL, restoring the @@ -628,7 +583,6 @@ first. semantics <p> This can be done using dblink and two-phase commit. </p> - </li><li>-<em>Add two-phase commit</em> </li><li>Add the features of packages <ul> <li>Make private objects accessable only to objects in the same schema @@ -649,38 +603,10 @@ first. that can span more than one table. </p> </li><li>Allow SELECT ... FOR UPDATE on inherited tables - </li><li>-<em>Prevent inherited tables from expanding temporary subtables of other</em> - sessions </li><li>Add UNIQUE capability to non-btree indexes - </li><li>-<em>Use indexes for MIN() and MAX()</em> -<p> MIN/MAX queries can already be rewritten as SELECT col FROM tab ORDER - BY col {DESC} LIMIT 1. Completing this item involves doing this - transformation automatically. -</p> - </li><li>-<em>Use index to restrict rows returned by multi-key index when used with</em> - non-consecutive keys to reduce heap accesses -<p> For an index on col1,col2,col3, and a WHERE clause of col1 = 5 and - col3 = 9, spin though the index checking for col1 and col3 matches, - rather than just col1; also called skip-scanning. -</p> </li><li>Prevent index uniqueness checks when UPDATE does not modify the column <p> Uniqueness (index) checks are done when updating a column even if the column is not modified by the UPDATE. -</p> - </li><li>-<em>Fetch heap pages matching index entries in sequential order</em> -<p> Rather than randomly accessing heap pages based on index entries, mark - heap pages needing access in a bitmap and do the lookups in sequential - order. Another method would be to sort heap ctids matching the index - before accessing the heap rows. -</p> - </li><li>-<em>Allow non-bitmap indexes to be combined by creating bitmaps in memory</em> -<p> This feature allows separate indexes to be ANDed or ORed together. This - is particularly useful for data warehousing applications that need to - query the database in an many permutations. This feature scans an index - and creates an in-memory bitmap, and allows that bitmap to be combined - with other bitmap created in a similar way. The bitmap can either index - all TIDs, or be lossy, meaning it records just page numbers and each - page tuple has to be checked for validity in a separate pass. </p> </li><li>Allow the creation of on-disk bitmap indexes which can be quickly combined with other bitmap indexes @@ -695,14 +621,11 @@ first. one column or expression indexes, perhaps using per-index statistics </li><li>Add fillfactor to control reserved free space during index creation </li><li>Allow the creation of indexes with mixed ascending/descending specifiers - </li><li>-<em>Fix incorrect rtree results due to wrong assumptions about "over"</em> - operator semantics </li><li>Allow constraint_exclusion to work for UNIONs like it does for inheritance, and allow it to work for UPDATE and DELETE queries </li><li>GIST <ul> <li>Add more GIST index support for geometric data types - </li><li>-<em>Add concurrency to GIST</em> </li><li>Allow GIST indexes to create certain complex index types, like digital trees (see Aoki) </li></ul> @@ -729,7 +652,6 @@ first. <p> Ideally this requires a separate test program that can be run at initdb time or optionally later. </p> - </li><li>-<em>Allow multiple blocks to be written to WAL with one write()</em> </li><li>%Add an option to sync() before fsync()'ing checkpoint files </li><li>Add program to test if fsync has a delay compared to non-fsync </li></ul> @@ -743,12 +665,6 @@ first. backends that also have the file open, and the feature is not supported on all operating systems. </p> - </li><li>-<em>Consider use of open/fcntl(O_DIRECT) to minimize OS caching,</em> - for WAL writes -<p> O_DIRECT doesn't have the same media write guarantees as fsync, so it - is in addition to the fsync method, not in place of it. -</p> - </li><li>-<em>Cache last known per-tuple offsets to speed long tuple access</em> </li><li>Speed up COUNT(*) <p> We could use a fixed row count and a +/- count to follow MVCC visibility rules, or a single cached value could be used and @@ -771,16 +687,6 @@ first. </li><li>Query execute plan </li><li>Query results </li></ul> - </li><li>-<em>Allow the size of the buffer cache used by temporary objects to be</em> - specified as a GUC variable -<p> Larger local buffer cache sizes requires more efficient handling of - local cache lookups. -</p> - </li><li>-<em>Improve the background writer</em> -<p> Allow the background writer to more efficiently write dirty buffers - from the end of the LRU cache and use a clock sweep algorithm to - write other dirty buffers to reduced checkpoint I/O -</p> </li><li>Allow sequential scans to take advantage of other concurrent sequentiqal scans, also called "Synchronised Scanning" <p> One possible implementation is to start sequential scans from the lowest @@ -802,7 +708,6 @@ first. write lock. However, the read lock promotion to write lock could lead to deadlock situations. </p> - </li><li>-<em>Add a warning when the free space map is too small</em> </li><li>Maintain a map of recently-expired rows <p> This allows vacuum to target specific pages for possible free space without requiring a sequential scan. @@ -818,8 +723,7 @@ first. </li><li>%Add system view to show free space map contents </li><li>Auto-vacuum <ul> - <li>-<em>Move into the backend code</em> - </li><li>Use free-space map information to guide refilling + <li>Use free-space map information to guide refilling </li><li>%Issue log message to suggest VACUUM FULL if a table is nearly empty? </li><li>Improve xid wraparound detection by recording per-table rather @@ -829,21 +733,12 @@ first. <h1><a name="section_17">Locking</a></h1> <ul> - <li>-<em>Make locking of shared data structures more fine-grained</em> -<p> This requires that more locks be acquired but this would reduce lock - contention, improving concurrency. -</p> - </li><li>Add code to detect an SMP machine and handle spinlocks accordingly + <li>Add code to detect an SMP machine and handle spinlocks accordingly from distributted.net, <a href="http://www1.distributed.net/source">http://www1.distributed.net/source</a>, in client/common/cpucheck.cpp <p> On SMP machines, it is possible that locks might be released shortly, while on non-SMP machines, the backend should sleep so the process holding the lock can complete and release it. -</p> - </li><li>-<em>Improve SMP performance on i386 machines</em> -<p> i386-based SMP machines can generate excessive context switching - caused by lock failure in high concurrency situations. This may be - caused by CPU cache line invalidation inefficiencies. </p> </li><li>Research use of sched_yield() for spinlock acquisition failure </li><li>Fix priority ordering of read and write light-weight locks (Neil) @@ -874,8 +769,7 @@ first. eliminated from point-in-time archive files. </p> <ul> - <li>-Add ability to turn off full page writes - </li><li>When off, write CRC to WAL and check file system blocks + <li>When off, write CRC to WAL and check file system blocks on recovery <p> If CRC check fails during recovery, remember the page in case a later CRC for that page properly matches. @@ -907,8 +801,6 @@ first. remove the 'fsync' parameter (which results in an an inconsistent database) in favor of this capability. </p> - </li><li>-<em>Eliminate WAL logging for CREATE TABLE AS when not doing WAL archiving</em> - </li><li>-<em>Change WAL to use 32-bit CRC, for performance reasons</em> </li></ul> <h1><a name="section_20">Optimizer / Executor</a></h1> @@ -925,15 +817,9 @@ first. </li><li>Create utility to compute accurate random_page_cost value </li><li>Improve ability to display optimizer analysis using OPTIMIZER_DEBUG </li><li>Have EXPLAIN ANALYZE highlight poor optimizer estimates - </li><li>-<em>Use CHECK constraints to influence optimizer decisions</em> -<p> 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. -</p> </li><li>Consider using hash buckets to do DISTINCT, rather than sorting <p> This would be beneficial when there are few distinct values. </p> - </li><li>-<em>ANALYZE should record a pg_statistic entry for an all-NULL column</em> </li><li>Log queries where the optimizer row estimates were dramatically different from the number of rows actually found? </li><li>Allow constraint_elimination to be automatically performed @@ -983,11 +869,9 @@ first. </li><li>%Promote debug_query_string into a server-side function current_query() </li><li>%Allow the identifier length to be increased via a configure option </li><li>Remove Win32 rename/unlink looping if unnecessary - </li><li>-<em>Remove kerberos4 from source tree</em> </li><li>Allow cross-compiling by generating the zic database on the target system </li><li>Improve NLS maintenace of libpgport messages linked onto applications </li><li>Allow ecpg to work with MSVC and BCC - </li><li>-<em>Make src/port/snprintf.c thread-safe</em> </li><li>Add xpath_array() to /contrib/xml2 to return results as an array </li><li>Allow building in directories containing spaces <p> This is probably not possible because 'gmake' and other compiler tools @@ -1000,7 +884,6 @@ first. spaces and then copy the install to a directory with spaces. </p> </li><li>Fix sgmltools so PDFs can be generated with bookmarks - </li><li>-<em>Add C code on Unix to copy directories for use in creating new databases</em> </li><li>%Clean up compiler warnings (especially with gcc version 4) </li><li>Win32 <ul> @@ -1013,7 +896,6 @@ first. backslashes </li><li>Re-enable timezone output on log_line_prefix '%t' when a shorter timezone string is available - </li><li>-<em>Improve dlerror() reporting string</em> </li><li>Fix problem with shared memory on the Win32 Terminal Server </li><li>%Add support for Unicode <p> To fix this, the data needs to be converted to/from UTF16/UTF8