TODO list for PostgreSQL
========================
-Last updated: Fri Feb 1 11:59:54 EST 2002
+Last updated: Sun Feb 3 14:23:58 EST 2002
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
Bracketed items "[]" have more detailed.
-ENHANCEMENTS
-------------
-
URGENT
+------
* Add replication of distributed databases [replication]
o automatic failover
* Point-in-time data recovery using backup and write-ahead log
* Allow row re-use without vacuum (Tom)
+
REPORTING
+---------
* Allow elog() to return error codes, module name, file name, line
number, not just messages (Peter E)
only if client exists (Bruce)
* Show location of syntax error in query [yacc]
+
PERMISSIONS
+-----------
* Improve control over user privileges, including table creation and
lock use [privileges] (Karel, others)
* Make single-user local access permissions the default (Peter E)
* Use thread-safe crypt() in libpq, if available
+
ADMIN
+-----
* Incremental backups
* Make it easier to create a database owned by someone who can't createdb,
* Prevent SIGHUP and 'pg_ctl reload' from changing command line
specified parameters to postgresql.conf defaults
+
DATA TYPES
+----------
* Add domain capability [domain]
* Add IPv6 capability to INET/CIDR types
interface (force out-of-line storage and no compression)
o Auto-delete large objects when referencing row is deleted
+
MULTI-LANGUAGE SUPPORT
+----------------------
* Add NCHAR (as distinguished from ordinary varchar),
* Allow LOCALE on a per-column basis, default to ASCII
* Add octet_length_server() and octet_length_client() (Thomas, Tatsuo)
* Make octet_length_client the same as octet_length() (?)
+
VIEWS / RULES
+-------------
* Automatically create rules on views so they are updateable, per SQL92 [view]
* Add the functionality for WITH CHECK OPTION clause of CREATE VIEW
* Allow RULE recompilation
* Remove brackets as multi-statement rule grouping, must use parens
+
INDEXES
+-------
* Allow CREATE INDEX zman_index ON test (date_trunc( 'day', zman ) datetime_ops)
fails index can't store constant parameters
* Improve concurrency in GIST
* Add FILLFACTOR to index creation
+
COMMANDS
+--------
* Add SIMILAR TO to allow character classes, 'pg_[a-c]%'
* Add BETWEEN ASYMMETRIC/SYMMETRIC
o Add plsh server-side shell language (Peter E)
o Allow Java server-side programming (?) [java]
+
CLIENTS
+-------
* Have pg_dump use LEFT OUTER JOIN in multi-table SELECTs
or multiple SELECTS to avoid bad system catalog entries
o Add SQLSTATE
o fix handling of DB attributes that are arrays
+
REFERENTIAL INTEGRITY
+---------------------
* Add MATCH PARTIAL referential integrity [foreign]
* Add deferred trigger queue file (Jan)
in array
* Fix foreign key constraints to not error on intermediate db states (Stephan)
+
DEPENDENCY CHECKING
+-------------------
* Add pg_depend table for dependency recording; use sysrelid, oid,
depend_sysrelid, depend_oid, name
* Make constraints clearer in dump file
* Make foreign keys easier to identify
+
TRANSACTIONS
+------------
* Allow autocommit so always in a transaction block
* Overhaul bufmgr/lockmgr/transaction manager
* Allow savepoints / nested transactions [transactions]
+
EXOTIC FEATURES
+---------------
* Add sql3 recursive unions
* Add the concept of dataspaces/tablespaces [tablespaces]
PERFORMANCE
------------
+===========
+
FSYNC
+-----
* Delay fsync() when other backends are about to commit too [fsync]
o Determine optimal commit_delay value
* Determine optimal fdatasync/fsync, O_SYNC/O_DSYNC options
o Allow multiple blocks to be written to WAL with one write()
-CACHE
+CACHE
+-----
* Cache most recent query plan(s) (Karel) [prepare]
* Shared catalog cache, reduce lseek()'s by caching table size in shared area
* Add free-behind capability for large sequential scans (Bruce)
* Consider use of open/fcntl(O_DIRECT) to minimize OS caching
* Make blind writes go through the file descriptor cache
+
VACUUM
+------
* Improve speed with indexes (perhaps recreate index instead) [vacuum]
* Reduce lock time by moving tuples with read lock, then write
lock and truncate table [vacuum]
* Add LAZY VACUUM (Vadim) [performance]
+
LOCKING
+-------
* Make locking of shared data structures more fine-grained
* Add code to detect an SMP machine and handle spinlocks accordingly
in client/common/cpucheck.cpp
* Research use of sched_yield() for spinlock acquisition failure
+
STARTUP TIME
+------------
* Experiment with multi-threaded backend [thread]
* Add connection pooling [pool]
* Do listen() in postmaster and accept() in pre-forked backend
* Have pre-forked backend pre-connect to last requested database or pass
file descriptor to backend pre-forked for matching database
+* Cache system catalog information in per-database files (Tom)
+
WRITE-AHEAD LOG
+---------------
* Have after-change WAL write()'s write only modified data to kernel
* Reduce number of after-change WAL writes; they exist only to gaurd against
* Add checkpoint_min_warning postgresql.conf option to warn about checkpoints
that are too frequent
-OPTIMIZER/EXECUTOR
+
+OPTIMIZER / EXECUTOR
+--------------------
* Improve Subplan list handling
* Allow Subplans to use efficient joins(hash, merge) with upper variable
* Missing optimizer selectivities for date, r-tree, etc. [optimizer]
* Allow ORDER BY ... LIMIT to select top values without sort or index
+
MISCELLANEOUS
+-------------
* Do async I/O for faster random read-ahead of data
* Get faster regex() code from Henry Spencer <henry@zoo.utoronto.ca>
SOURCE CODE
------------
+===========
+
* Add use of 'const' for variables in source tree
* Fix problems with libpq non-blocking/async code [async]
* Make sure all block numbers are unsigned to increase maximum table size