Great TODO updates from Tom:

<   Currently SIGTERM of a backend can lead to lock table corruption.
>   Lock table corruption following SIGTERM of an individual backend
>   has been reported in 8.0.  A possible cause was fixed in 8.1, but
>   it is unknown whether other problems exist.  This item mostly
>   requires additional testing rather than of writing any new code.
< 	o Allow postgresql.conf values to be set so they can not be changed
< 	  by the user
166c167,171
< * %Remove Money type, add money formatting for decimal type
> * Improve the MONEY data type
>
>   Change the MONEY data type to use DECIMAL internally, with special
>   locale-aware output formatting.
>
225c230
< 	o %Allow MIN()/MAX() on arrays
> 	o -Allow MIN()/MAX() on arrays
228c233
< 	o Modify array literal representation to handle array index lower bound
> 	o -Modify array literal representation to handle array index lower bound
235a241
> 	o Auto-delete large objects when referencing row is deleted
< 	  Currently large objects entries do not have owners. Permissions can
< 	  only be set at the pg_largeobject table level.
>           /contrib/lo offers this functionality.
240d244
< 	o Auto-delete large objects when referencing row is deleted
< * %Have views on temporary tables exist in the temporary namespace
< * Allow temporary views on non-temporary tables
< * %Allow RULE recompilation
> * -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
340a345,347
>
>   This is like DELETE CASCADE, but truncates.
>
381c388
< * Make row-wise comparisons work per SQL spec
> * %Make row-wise comparisons work per SQL spec
< 	o Currently the system uses the operating system COPY command to
< 	  create a new database. Add ON COMMIT capability to CREATE TABLE AS
< 	  SELECT
> 	o Add ON COMMIT capability to CREATE TABLE AS ... SELECT
427c432
< 	o %Add ALTER DOMAIN TYPE
> 	o Add ALTER DOMAIN to modify the underlying data type
< 	o %Disallow dropping of an inherited constraint
< 	o -Allow objects to be moved to different schemas
> 	o Add missing object types for ALTER ... SET SCHEMA
< 	o %Prevent child tables from altering constraints like CHECK that were
< 	  inherited from the parent table
> 	o %Disallow dropping of an inherited constraint
> 	o %Prevent child tables from altering or dropping constraints
>           like CHECK that were inherited from the parent table
< 	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 Add table function support to pltcl, plperl, plpython?
< 	o Allow PL/pgSQL to name columns by ordinal position, e.g. rec.(3)
> 	o Add table function support to pltcl, plpython
549a548
> 	o Allow function argument names to be queries from PL/PgSQL
< 	o Pass arrays natively instead of as text between plperl and postgres
< 	o Add support for polymorphic arguments and return types to plperl
> 	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
> 	  than PL/PgSQL
< * Allow libpq to access SQLSTATE so pg_ctl can test for connection failure
<
<   This would be used for checking if the server is up.
<
565c563
< * Have initdb set DateStyle based on locale?
> * Have initdb set the input DateStyle (MDY or DMY) based on locale?
567d564
< * Add a schema option to createlang
< 	o Add pg_dumpall custom format dumps.
<
< 	  This is probably best done by combining pg_dump and pg_dumpall
< 	  into a single binary.
<
> 	o Add pg_dumpall custom format dumps?
612c605,606
< 	o Remove unnecessary abstractions in pg_dump source code
> 	o Remove unnecessary function pointer abstractions in pg_dump source
> 	  code
< * %Remove CREATE CONSTRAINT TRIGGER
<
<   This was used in older releases to dump referential integrity
<   constraints.
<
682a672,675
>   This is particularly important for references to temporary tables
>   in PL/PgSQL because PL/PgSQL caches query plans.  The only workaround
>   in PL/PgSQL is to use EXECUTE.
>
748c741
< * Fetch heap pages matching index entries in sequential order
> * -Fetch heap pages matching index entries in sequential order
797c790
< 	  Currently no only one hash bucket can be stored on a page. Ideally
> 	  Currently only one hash bucket can be stored on a page. Ideally
806a800,802
> 	o Add WAL logging for crash recovery
> 	o Allow multi-column hash indexes
>
812a809,812
>
>   Ideally this requires a separate test program that can be run
>   at initdb time or optionally later.
>
867c867
< * Improve the background writer
> * -Improve the background writer
<   For large table adjustements during vacuum, it is faster to reindex
<   rather than update the index.
>   For large table adjustements during VACUUM FULL, it is faster to
>   reindex rather than update the index.
< * Reduce lock time by moving tuples with read lock, then write
<   lock and truncate table
> * Reduce lock time during VACUUM FULL by moving tuples with read lock,
>   then write lock and truncate table
919c919,920
< 	o %Suggest VACUUM FULL if a table is nearly empty
> 	o %Issue log message to suggest VACUUM FULL if a table is nearly
> 	  empty?
995d995
< * Add WAL index reliability improvement to non-btree indexes
1045c1045
< * ANALYZE should record a pg_statistic entry for an all-NULL column
> * -ANALYZE should record a pg_statistic entry for an all-NULL column
1047a1048,1051
> * Allow constraint_elimination to be automatically performed
>
>   This requires additional code to reduce the performance loss caused by
>   constraint elimination.
1090c1094
< * Remove memory/file descriptor freeing before ereport(ERROR)
> * %Remove memory/file descriptor freeing before ereport(ERROR)
< * Promote debug_query_string into a server-side function current_query()
< * Allow the identifier length to be increased via a configure option
> * %Promote debug_query_string into a server-side function current_query()
> * %Allow the identifier length to be increased via a configure option
1113d1116
< * Fix cross-compiling of time zone database via 'zic'
1130c1133
< 	o Improve dlerror() reporting string
> 	o -Improve dlerror() reporting string
1132c1135
<         o Add support for Unicode
>         o %Add support for Unicode
This commit is contained in:
Bruce Momjian 2005-08-26 18:52:44 +00:00
parent a9118fc5a8
commit 9f60468797
2 changed files with 133 additions and 127 deletions

135
doc/TODO
View File

@ -2,7 +2,7 @@
PostgreSQL TODO List
====================
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
Last updated: Wed Aug 24 21:24:51 EDT 2005
Last updated: Fri Aug 26 14:52:30 EDT 2005
The most recent version of this document can be viewed at
http://www.postgresql.org/docs/faqs.TODO.html.
@ -35,7 +35,10 @@ Administration
* Allow administrators to safely terminate individual sessions either
via an SQL function or SIGTERM
Currently SIGTERM of a backend can lead to lock table corruption.
Lock table corruption following SIGTERM of an individual backend
has been reported in 8.0. A possible cause was fixed in 8.1, but
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
@ -63,8 +66,6 @@ Administration
* Configuration files
o %Add "include file" functionality in postgresql.conf
o Allow postgresql.conf values to be set so they can not be changed
by the user
o %Allow commenting of variables in postgresql.conf to restore them
to defaults
@ -163,7 +164,11 @@ Monitoring
Data Types
==========
* %Remove Money type, add money formatting for decimal type
* Improve the MONEY data type
Change the MONEY data type to use DECIMAL internally, with special
locale-aware output formatting.
* Change NUMERIC to enforce the maximum precision, and increase it
* Add NUMERIC division operator that doesn't round?
@ -222,10 +227,10 @@ Data Types
* Arrays
o Allow NULLs in arrays
o %Allow MIN()/MAX() on 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
o -Modify array literal representation to handle array index lower bound
of other than one
@ -233,11 +238,10 @@ Data Types
o Improve vacuum of large objects, like /contrib/vacuumlo?
o Add security checking for large objects
Currently large objects entries do not have owners. Permissions can
only be set at the pg_largeobject table level.
o Auto-delete large objects when referencing row is deleted
/contrib/lo offers this functionality.
o Allow read/write into TOAST values like large objects
This requires the TOAST column to be stored EXTERNAL.
@ -314,9 +318,9 @@ 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 RULE recompilation
* -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
@ -338,6 +342,9 @@ SQL Commands
* Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY
* %Allow SET CONSTRAINTS to be qualified by schema/table name
* %Allow TRUNCATE ... CASCADE/RESTRICT
This is like DELETE CASCADE, but truncates.
* %Add a separate TRUNCATE permission
Currently only the owner can TRUNCATE a table because triggers are not
@ -378,7 +385,7 @@ SQL Commands
When enabled, this would allow errors in multi-statement transactions
to be automatically ignored.
* Make row-wise comparisons work per SQL spec
* %Make row-wise comparisons work per SQL spec
* Add RESET CONNECTION command to reset all session state
This would include resetting of all variables (RESET ALL), dropping of
@ -404,9 +411,7 @@ SQL Commands
o Use more reliable method for CREATE DATABASE to get a consistent
copy of db?
o Currently the system uses the operating system COPY command to
create a new database. Add ON COMMIT capability to CREATE TABLE AS
SELECT
o Add ON COMMIT capability to CREATE TABLE AS ... SELECT
* UPDATE
@ -424,11 +429,10 @@ SQL Commands
* ALTER
o %Have ALTER TABLE RENAME rename SERIAL sequence names
o %Add ALTER DOMAIN TYPE
o Add ALTER DOMAIN to modify the underlying data type
o %Allow ALTER TABLE ... ALTER CONSTRAINT ... RENAME
o %Allow ALTER TABLE to change constraint deferrability and actions
o %Disallow dropping of an inherited constraint
o -Allow objects to be moved to different schemas
o Add missing object types for ALTER ... SET SCHEMA
o Allow ALTER TABLESPACE to move to different directories
o Allow databases to be moved to different tablespaces
o Allow moving system tables to other tablespaces, where possible
@ -436,8 +440,9 @@ SQL Commands
Currently non-global system tables must be in the default database
tablespace. Global system tables can never be moved.
o %Prevent child tables from altering constraints like CHECK that were
inherited from the parent table
o %Disallow dropping of an inherited constraint
o %Prevent child tables from altering or dropping constraints
like CHECK that were inherited from the parent table
* CLUSTER
@ -532,24 +537,21 @@ SQL 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,
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 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, plperl, plpython?
o Allow PL/pgSQL to name columns by ordinal position, e.g. rec.(3)
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 plperl
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
than PL/PgSQL
Clients
@ -557,14 +559,9 @@ Clients
* 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
This would be used for checking if the server is up.
* Add PQescapeIdentifier() to libpq
* Have initdb set DateStyle based on locale?
* Have initdb set the input DateStyle (MDY or DMY) based on locale?
* Have pg_ctl look at PGHOST in case it is a socket directory?
* Add a schema option to createlang
* Allow pg_ctl to work properly with configuration files located outside
the PGDATA directory
@ -602,14 +599,11 @@ 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.
This is probably best done by combining pg_dump and pg_dumpall
into a single binary.
o Add pg_dumpall custom format dumps?
o %Add CSV output format
o Update pg_dump and psql to use the new COPY libpq API (Christopher)
o Remove unnecessary abstractions in pg_dump source code
o Remove unnecessary function pointer abstractions in pg_dump source
code
* ecpg
@ -660,11 +654,6 @@ Referential Integrity
* Allow statement-level triggers to access modified rows
* Support triggers on columns (Greg Sabino Mullane)
* %Remove CREATE CONSTRAINT TRIGGER
This was used in older releases to dump referential integrity
constraints.
* Enforce referential integrity for system tables
* Allow AFTER triggers on system tables
@ -680,6 +669,10 @@ Dependency Checking
* Flush cached query plans when the dependent objects change
* Track dependencies in function bodies and recompile/invalidate
This is particularly important for references to temporary tables
in PL/PgSQL because PL/PgSQL caches query plans. The only workaround
in PL/PgSQL is to use EXECUTE.
Exotic Features
===============
@ -745,7 +738,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
* -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
@ -794,7 +787,7 @@ Indexes
o Pack hash index buckets onto disk pages more efficiently
Currently no only one hash bucket can be stored on a page. Ideally
Currently only one hash bucket can be stored on a page. Ideally
several hash buckets could be stored on a single page and greater
granularity used for the hash algorithm.
@ -804,12 +797,19 @@ Indexes
o In hash indexes, consider storing the hash value with or instead
of the key itself
o Add WAL logging for crash recovery
o Allow multi-column hash indexes
Fsync
=====
* Improve commit_delay handling to reduce fsync()
* Determine optimal fdatasync/fsync, O_SYNC/O_DSYNC options
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
@ -864,7 +864,7 @@ Cache Usage
Larger local buffer cache sizes requires more efficient handling of
local cache lookups.
* Improve the background writer
* -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
@ -884,11 +884,11 @@ Vacuum
* Improve speed with indexes
For large table adjustements during vacuum, it is faster to reindex
rather than update the index.
For large table adjustements during VACUUM FULL, it is faster to
reindex rather than update the index.
* Reduce lock time by moving tuples with read lock, then write
lock and truncate table
* Reduce lock time during VACUUM FULL by moving tuples with read lock,
then write lock and truncate table
Moved tuples are invisible to other backends so they don't require a
write lock. However, the read lock promotion to write lock could lead
@ -916,7 +916,8 @@ Vacuum
o -Move into the backend code
o Use free-space map information to guide refilling
o %Suggest VACUUM FULL if a table is nearly empty
o %Issue log message to suggest VACUUM FULL if a table is nearly
empty?
o Improve xid wraparound detection by recording per-table rather
than per-database
@ -992,7 +993,6 @@ Write-Ahead Log
* Reduce WAL traffic so only modified values are written rather than
entire rows?
* 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
@ -1042,9 +1042,13 @@ Optimizer / Executor
This would be beneficial when there are few distinct values.
* ANALYZE should record a pg_statistic entry for an all-NULL column
* -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
This requires additional code to reduce the performance loss caused by
constraint elimination.
Miscellaneous Performance
@ -1087,10 +1091,10 @@ Source Code
* Add optional CRC checksum to heap and index pages
* 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)
* %Remove memory/file descriptor freeing before ereport(ERROR)
* Acquire lock on a relation before building a relcache entry for it
* Promote debug_query_string into a server-side function current_query()
* Allow the identifier length to be increased via a configure option
* %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
@ -1110,7 +1114,6 @@ Source Code
is already possible to install into a directory that doesn't contain
spaces and then copy the install to a directory with spaces.
* Fix cross-compiling of time zone database via 'zic'
* 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)
@ -1127,9 +1130,9 @@ 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 -Improve dlerror() reporting string
o Fix problem with shared memory on the Win32 Terminal Server
o Add support for Unicode
o %Add support for Unicode
To fix this, the data needs to be converted to/from UTF16/UTF8
so the Win32 wcscoll() can be used, and perhaps other functions

View File

@ -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: Wed Aug 24 21:24:51 EDT 2005
Last updated: Fri Aug 26 14:52:30 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>.
@ -38,7 +38,10 @@ first.
in-progress when the server terminated abruptly
</li><li>Allow administrators to safely terminate individual sessions either
via an SQL function or SIGTERM
<p> Currently SIGTERM of a backend can lead to lock table corruption.
<p> Lock table corruption following SIGTERM of an individual backend
has been reported in 8.0. A possible cause was fixed in 8.1, but
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
@ -61,8 +64,6 @@ first.
</li><li>Configuration files
<ul>
<li>%Add "include file" functionality in postgresql.conf
</li><li>Allow postgresql.conf values to be set so they can not be changed
by the user
</li><li>%Allow commenting of variables in postgresql.conf to restore them
to defaults
<p> Currently, if a variable is commented out, it keeps the
@ -150,7 +151,10 @@ first.
<h1><a name="section_4">Data Types</a></h1>
<ul>
<li>%Remove Money type, add money formatting for decimal type
<li>Improve the MONEY data type
<p> Change the MONEY data type to use DECIMAL internally, with special
locale-aware output formatting.
</p>
</li><li>Change NUMERIC to enforce the maximum precision, and increase it
</li><li>Add NUMERIC division operator that doesn't round?
<p> Currently NUMERIC _rounds_ the result to the specified precision.
@ -208,20 +212,19 @@ first.
</li><li>Arrays
<ul>
<li>Allow NULLs in arrays
</li><li>%Allow MIN()/MAX() on 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>Modify array literal representation to handle array index lower bound
</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>
<li>Improve vacuum of large objects, like /contrib/vacuumlo?
</li><li>Add security checking for large objects
<p> Currently large objects entries do not have owners. Permissions can
only be set at the pg_largeobject table level.
</p>
</li><li>Auto-delete large objects when referencing row is deleted
<p> /contrib/lo offers this functionality.
</p>
</li><li>Allow read/write into TOAST values like large objects
<p> This requires the TOAST column to be stored EXTERNAL.
</p>
@ -291,9 +294,9 @@ 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>%Have views on temporary tables exist in the temporary namespace
</li><li>Allow temporary views on non-temporary tables
</li><li>%Allow RULE recompilation
</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>
@ -312,6 +315,8 @@ first.
</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
<p> This is like DELETE CASCADE, but truncates.
</p>
</li><li>%Add a separate TRUNCATE permission
<p> Currently only the owner can TRUNCATE a table because triggers are not
called, and the table is locked in exclusive mode.
@ -347,7 +352,7 @@ first.
<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>%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
temporary tables, removing any NOTIFYs, cursors, open transactions,
@ -368,9 +373,7 @@ first.
expressions like SELECT col1 || col2
</li><li>Use more reliable method for CREATE DATABASE to get a consistent
copy of db?
</li><li>Currently the system uses the operating system COPY command to
create a new database. Add ON COMMIT capability to CREATE TABLE AS
SELECT
</li><li>Add ON COMMIT capability to CREATE TABLE AS ... SELECT
</li></ul>
</li><li>UPDATE
<ul>
@ -386,19 +389,19 @@ first.
</li><li>ALTER
<ul>
<li>%Have ALTER TABLE RENAME rename SERIAL sequence names
</li><li>%Add ALTER DOMAIN TYPE
</li><li>Add ALTER DOMAIN to modify the underlying data type
</li><li>%Allow ALTER TABLE ... ALTER CONSTRAINT ... RENAME
</li><li>%Allow ALTER TABLE to change constraint deferrability and actions
</li><li>%Disallow dropping of an inherited constraint
</li><li>-<em>Allow objects to be moved to different schemas</em>
</li><li>Add missing object types for ALTER ... SET SCHEMA
</li><li>Allow ALTER TABLESPACE to move to different directories
</li><li>Allow databases to be moved to different tablespaces
</li><li>Allow moving system tables to other tablespaces, where possible
<p> Currently non-global system tables must be in the default database
tablespace. Global system tables can never be moved.
</p>
</li><li>%Prevent child tables from altering constraints like CHECK that were
inherited from the parent table
</li><li>%Disallow dropping of an inherited constraint
</li><li>%Prevent child tables from altering or dropping constraints
like CHECK that were inherited from the parent table
</li></ul>
</li><li>CLUSTER
<ul>
@ -482,23 +485,21 @@ first.
<p> Currently only constants are supported.
</p>
</li><li>-<em>Change PL/PgSQL to use palloc() instead of malloc()</em>
</li><li>Handle references to temporary tables that are created, destroyed,
then recreated during a session, and EXECUTE is not used
<p> This requires the cached PL/PgSQL byte code to be invalidated when
an object referenced in the function is changed.
</p>
</li><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 =&gt; 12345, tax_year =&gt; 2001)
</li><li>Add Oracle-style packages
</li><li>Add table function support to pltcl, plperl, plpython?
</li><li>Allow PL/pgSQL to name columns by ordinal position, e.g. rec.(3)
</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>Pass arrays natively instead of as text between plperl and postgres
</li><li>Add support for polymorphic arguments and return types to plperl
</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
than PL/PgSQL
</li></ul>
</li></ul>
<h1><a name="section_9">Clients</a></h1>
@ -506,13 +507,9 @@ first.
<ul>
<li>Add a libpq function to support Parse/DescribeStatement capability
</li><li>Prevent libpq's PQfnumber() from lowercasing the column name?
</li><li>Allow libpq to access SQLSTATE so pg_ctl can test for connection failure
<p> This would be used for checking if the server is up.
</p>
</li><li>Add PQescapeIdentifier() to libpq
</li><li>Have initdb set DateStyle based on locale?
</li><li>Have initdb set the input DateStyle (MDY or DMY) based on locale?
</li><li>Have pg_ctl look at PGHOST in case it is a socket directory?
</li><li>Add a schema option to createlang
</li><li>Allow pg_ctl to work properly with configuration files located outside
the PGDATA directory
<p> pg_ctl can not read the pid file because it isn't located in the
@ -546,13 +543,11 @@ first.
</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 '='.
</li><li>Add pg_dumpall custom format dumps.
<p> This is probably best done by combining pg_dump and pg_dumpall
into a single binary.
</p>
</li><li>Add pg_dumpall custom format dumps?
</li><li>%Add CSV output format
</li><li>Update pg_dump and psql to use the new COPY libpq API (Christopher)
</li><li>Remove unnecessary abstractions in pg_dump source code
</li><li>Remove unnecessary function pointer abstractions in pg_dump source
code
</li></ul>
</li><li>ecpg
<ul>
@ -598,10 +593,6 @@ first.
</p>
</li><li>Allow statement-level triggers to access modified rows
</li><li>Support triggers on columns (Greg Sabino Mullane)
</li><li>%Remove CREATE CONSTRAINT TRIGGER
<p> This was used in older releases to dump referential integrity
constraints.
</p>
</li><li>Enforce referential integrity for system tables
</li><li>Allow AFTER triggers on system tables
<p> System tables are modified in many places in the backend without going
@ -615,6 +606,10 @@ first.
<ul>
<li>Flush cached query plans when the dependent objects change
</li><li>Track dependencies in function bodies and recompile/invalidate
<p> This is particularly important for references to temporary tables
in PL/PgSQL because PL/PgSQL caches query plans. The only workaround
in PL/PgSQL is to use EXECUTE.
</p>
</li></ul>
<h1><a name="section_12">Exotic Features</a></h1>
@ -672,7 +667,7 @@ first.
<p> Uniqueness (index) checks are done when updating a column even if the
column is not modified by the UPDATE.
</p>
</li><li>Fetch heap pages matching index entries in sequential order
</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
@ -714,7 +709,7 @@ first.
</li><li>Hash
<ul>
<li>Pack hash index buckets onto disk pages more efficiently
<p> Currently no only one hash bucket can be stored on a page. Ideally
<p> Currently only one hash bucket can be stored on a page. Ideally
several hash buckets could be stored on a single page and greater
granularity used for the hash algorithm.
</p>
@ -722,6 +717,8 @@ first.
binary search, rather than a linear scan
</li><li>In hash indexes, consider storing the hash value with or instead
of the key itself
</li><li>Add WAL logging for crash recovery
</li><li>Allow multi-column hash indexes
</li></ul>
</li></ul>
<h1><a name="section_14">Fsync</a></h1>
@ -729,6 +726,9 @@ first.
<ul>
<li>Improve commit_delay handling to reduce fsync()
</li><li>Determine optimal fdatasync/fsync, O_SYNC/O_DSYNC options
<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
@ -776,7 +776,7 @@ first.
<p> Larger local buffer cache sizes requires more efficient handling of
local cache lookups.
</p>
</li><li>Improve the background writer
</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
@ -793,11 +793,11 @@ first.
<ul>
<li>Improve speed with indexes
<p> For large table adjustements during vacuum, it is faster to reindex
rather than update the index.
<p> For large table adjustements during VACUUM FULL, it is faster to
reindex rather than update the index.
</p>
</li><li>Reduce lock time by moving tuples with read lock, then write
lock and truncate table
</li><li>Reduce lock time during VACUUM FULL by moving tuples with read lock,
then write lock and truncate table
<p> Moved tuples are invisible to other backends so they don't require a
write lock. However, the read lock promotion to write lock could lead
to deadlock situations.
@ -820,7 +820,8 @@ first.
<ul>
<li>-<em>Move into the backend code</em>
</li><li>Use free-space map information to guide refilling
</li><li>%Suggest VACUUM FULL if a table is nearly empty
</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
than per-database
</li></ul>
@ -889,7 +890,6 @@ first.
</li></ul>
</li><li>Reduce WAL traffic so only modified values are written rather than
entire rows?
</li><li>Add WAL index reliability improvement to non-btree indexes
</li><li>Allow the pg_xlog directory location to be specified during initdb
with a symlink back to the /data location
</li><li>Allow WAL information to recover corrupted pg_controldata
@ -933,9 +933,13 @@ first.
</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>ANALYZE should record a pg_statistic entry for an all-NULL column
</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
<p> This requires additional code to reduce the performance loss caused by
constraint elimination.
</p>
</li></ul>
<h1><a name="section_21">Miscellaneous Performance</a></h1>
@ -974,10 +978,10 @@ first.
</li><li>Add optional CRC checksum to heap and index pages
</li><li>Improve documentation to build only interfaces (Marc)
</li><li>Remove or relicense modules that are not under the BSD license, if possible
</li><li>Remove memory/file descriptor freeing before ereport(ERROR)
</li><li>%Remove memory/file descriptor freeing before ereport(ERROR)
</li><li>Acquire lock on a relation before building a relcache entry for it
</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>%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
@ -995,7 +999,6 @@ first.
is already possible to install into a directory that doesn't contain
spaces and then copy the install to a directory with spaces.
</p>
</li><li>Fix cross-compiling of time zone database via 'zic'
</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)
@ -1010,9 +1013,9 @@ first.
backslashes
</li><li>Re-enable timezone output on log_line_prefix '%t' when a
shorter timezone string is available
</li><li>Improve dlerror() reporting string
</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
</li><li>%Add support for Unicode
<p> To fix this, the data needs to be converted to/from UTF16/UTF8
so the Win32 wcscoll() can be used, and perhaps other functions
like towupper(). However, UTF8 already works with normal