TODO list for PostgreSQL ======================== Last updated: Sun Apr 29 22:35:31 EDT 2001 Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) The most recent version of this document can be viewed at the PostgreSQL web site, http://www.PostgreSQL.org. A dash (-) marks changes that will appear in the upcoming 7.2 release. Bracketed items "[]" have more detailed information at http://www.postgresql.org/docs/todo.html. RELIABILITY ----------- PARSER * SELECT pg_class FROM pg_class generates strange error * Alter TABLE ADD COLUMN does not honor DEFAULT, add CONSTRAINT * Unique index on base column not honored on inserts from inherited table INSERT INTO inherit_table (unique_index_col) VALUES (dup) should fail [inheritance] MISC * Plpgsql does not handle quoted mixed-case identifiers * Permission to DELETE table allows UPDATE also * SELECT cash_out(1) causes crash ENHANCEMENTS ------------ URGENT * Add replication of distributed databases [replication] o automatic fallover o load balancing o master/slave replication o multi-master replication o partition data across servers o sample implementation in contrib/rserv o queries across databases or servers (two-phase commit) * Point-in-time data recovery using backup and write-ahead log * Allow row re-use without vacuum (Vadim) ADMIN * More access control over who can create tables and use locks (Karel) * Allow elog() to return error codes, module name, file name, line number, not just messages [elog] * Allow international error message support and add error codes [elog] * Remove unused files during database vacuum or postmaster startup * Add tablename symlinks for numeric file names TYPES * Nchar (as distinguished from ordinary varchar), * Domain capability * Add IPv6 capability to INET/CIDR types * Add conversion function from text to inet * Make a separate SERIAL type? * Store binary-compatible type information in the system * Allow LOCALE on a per-column basis, default to ASCII * Add SHOW command to see locale * Allow nulls in arrays * Allow arrays to be ORDER'ed * Support construction of array result values in expressions * Change foreign key constraint for array -> element to mean element in array * Remove Money type, add money formatting for decimal type * Declare typein/out functions in pg_proc with a special "C string" data type * Add non-large-object binary field * Functions returning sets do not totally work * SELECT col FROM tab WHERE numeric_col = 10.1 fails * Allow better handling of numeric constants, type conversion [typeconv] * Support multiple simultaneous character sets, per SQL92 * Reject character sequences those are not valid in their charset * Make functions more multi-byte aware, i.e. trim() * Make n of CHAR(n)/VARCHAR(n) the number of letters, not bytes * Add btree index support for reltime, tinterval, regproc * Add rtree index support for line, lseg, path, point * Make binary/file in/out interface for TOAST columns * SELECT cash_out(2) crashes because of opaque * Add SQL standard function bit_length() * Make oid use unsigned int more reliably, pg_atoi() * Missing optimizer selectivities for date, r-tree, etc. [optimizer] VIEWS * Automatically create rules on views so they are updateable, per SQL92 * Add the functionality for "with check option" clause of create view * Allow NOTIFY in rules involving conditionals * Evaluate INSERT rules at end of query, rather than beginning INDEXES * Allow CREATE INDEX zman_index ON test (date_trunc( 'day', zman ) datetime_ops) fails index can't store constant parameters * Add FILLFACTOR to index creation * Re-enable partial indexes * Allow inherited tables to inherit index, UNIQUE constraint, and primary key [inheritance] * Prevent pg_attribute from having duplicate oids for indexes (Tom) * Add UNIQUE capability to non-btree indexes * Certain indexes will not shrink, i.e. oid indexes with many inserts (Vadim) * Have UPDATE/DELETE clean out indexes COMMANDS * ALTER TABLE ADD COLUMN to inherited table put column in wrong place [inheritance] * Add ALTER TABLE DROP COLUMN feature [drop] * Add ALTER FUNCTION * Add ALTER TABLE ... DROP CONSTRAINT * Automatically drop constraints/functions when object is dropped * CLUSTER * cluster all tables at once * prent lose of indexes, permissions, inheritance * Automatically keep clustering on a table * Keep statistics about clustering, perhaps during VACUUM ANALYZE [optimizer] * Add SIMILAR TO to allow character classes, 'pg_[a-c]%' * Auto-destroy sequence on DROP of table with SERIAL (Ryan) * Allow LOCK TABLE tab1, tab2, tab3 so all tables locked in unison [lock] * Allow INSERT/UPDATE of system-generated oid value for a row * Allow INSERT INTO my_table VALUES (a, b, c, DEFAULT, x, y, z, ...) * Allow INSERT INTO tab (col1, ..) VALUES (val1, ..), (val2, ..) * Allow RULE recompilation * Allow BINARY option to SELECT, like we do with DECLARE * MOVE 0 should not move to end of cursor * Overhaul ACL (access control) code * Add SHOW command to display locks * Bring INSERT ... VALUES up to full SQL92 spec, disallow missing columns, allow DEFAULT * Allow cursors to be DECLAREd/OPENed/CLOSEed outside transactions * Allow DELETE WHERE CURRENT OF cursor * Add BETWEEN ASYMMETRIC/SYMMETRIC * Add SET or BEGIN timeout parameter to cancel query if waiting too long CLIENTS * Make NULL's come out at the beginning or end depending on the ORDER BY direction * COPY * Update reltuples in COPY * Allow specification of column names * Allow dump/load of CSV format * fix array handling for ECPG * have pg_dump use LEFT OUTER JOIN in multi-table SELECTs or multiple SELECTS to avoid bad system catalog entries * allow psql \d to show primary and foreign keys * allow psql \d to show temporary table structure * add XML interface capability * Add a global RESET command for use with connection pooling * Remove <=6.3 version compatibility in ODBC? * Add SET REAL_FORMAT and SET DOUBLE_PRECISION_FORMAT using printf args REFERENTIAL INTEGRITY * Add MATCH PARTIAL referential integrity * Check that primary key exists at foreign key definition time * Prevent column dropping if column is used by foreign key * Propagate column or table renaming to foreign key constraints * Add deferred trigger queue file (Jan) * Allow oid to act as a foreign key * Implement dirty reads and use them in RI triggers * Enforce referential integrity for system tables * INSERT & UPDATE/DELETE in transaction of primary key fails with deferredTriggerGetPreviousEvent or "change violation" [foreign] * Add unique indexes to pg_shadow.usename and pg_shadow.usesysid * Add unique indexes on pg_database * Check all system tables and add unique indexes as needed EXOTIC FEATURES * Add sql3 recursive unions * Add the concept of dataspaces/tablespaces [tablespaces] * Allow queries across multiple databases * Allow nested transactions (Vadim) * Allow INSERT/UPDATE ... RETURNING new.col or old.col (Philip) * Add pre-parsing phase that convets non-ANSI features to supported features * SQL*Net listener that makes PostgreSQL appear as an Oracle database to clients * Incremental backups * Allow SQL92 schemas * Handle transaction rollover [transactions] MISCELLANEOUS * Increase identifier length(NAMEDATALEN) if small performance hit * Create a background process for each database that runs while database is idle, finding superceeded rows, gathering stats and vacuuming * Implement UNDO using transaction log * Populate backend status area and write program to dump status data * Put sort files in their own directory * Allow autocommit so always in a transaction block * Show location of syntax error in query [yacc] * Overhaul bufmgr/lockmgr/transaction manager * Encrpyt passwords in pg_shadow table using MD5 (Vince) * Allow Java server-side programming [java] * Add sed-like regular expression search/replace capability * Change representation of whole-tuple parameters to functions PERFORMANCE ----------- -FSYNC * Delay fsync() when other backends are about to commit too [fsync] * Determine optimal commit_delay value * Determine optimal fdatasync/fsync, O_SYNC/O_DSYNC options * Allow multiple blocks to be written to WAL with one write() INDEXES * Use indexes to find min() and max() * Use index to restrict rows returned by multi-key index when used with non-consecutive keys or OR clauses, so fewer heap accesses * Allow SELECT * FROM tab WHERE int2col = 4 use int2col index, int8, float4, numeric/decimal too [optimizer] * Use indexes with CIDR '<<' (contains) operator * Allow LIKE indexing optimization for non-ASCII locales * Be smarter about insertion of already-ordered data into btree index * Gather more accurate dispersion statistics using indexes * Add deleted bit to index tuples to reduce heap access * Prevent index uniqueness checks when UPDATE does not modify column CACHE * Cache most recent query plan(s) (Karel) [prepare] * Shared catalog cache, reduce lseek()'s by caching table size in shared area 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] * Make ANALYZE a separate command * Allow ANALYZE to ESTIMATE based on certain random precentage of rows * Add LAZY VACUUM (Vadim) MISCELLANEOUS * Allow compression of log and meta data * Do async I/O to do better read-ahead of data * Get faster regex() code from Henry Spencer when it is available * Use mmap() rather than SYSV shared memory(?) [mmap] * Improve Subplan list handling * Allow Subplans to use efficient joins(hash, merge) with upper variable * improve dynamic memory allocation by introducing tuple-context memory allocation (Tom) * allow configuration of maximum number of open files * Remove pg_listener index * Improve statistics storage in pg_class [performance] * Add connection pooling [pool] * Allow persistent backends [persistent] * Create a transaction processor to aid in persistent connections and connection pooling * Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM ANALYZE, and CLUSTER * Force transactions that commit at near the same time use a single fsync() * Make blind writes go through the file descriptor cache * Allow logging of query durations SOURCE CODE ----------- * Add use of 'const' for variables in source tree * Does Mariposa source contain any other bug fixes? * Remove SET KSQO option now that OR processing is improved (Tom) * Convert remaining fprintf(stderr,...)/perror() to elog() * Remove unused pg_variable, pg_inheritproc, pg_ipl tables * Experiment with multi-threaded backend [thread] * Fix problems with libpq non-blocking/async code [async] * Merge global and template BKI files (Peter E) * Fix username/password length limits in all areas * Remove compile-time upper limit on number of backends (MAXBACKENDS) (Tom) * Make sure all block numbers are unsigned to increase maximum table size * Merge LockMethodCtl and LockMethodTable into one shared structure (Bruce) * HOLDER/HOLDERTAB reanme to PROCLOCKLINK/PROCLOCKLINKTAG (Tom) * Add version file format stamp to heap and other table types * Make elog(LOG) in WAL its own output type, distinct from DEBUG * Rename some /contrib modules from pg* to pg_* * Remove warnings created by -Wcast-align * Move platform-specific ps status display info from ps_status.c to ports * Decide on spelling of indexes/indices * Allow ps status display to work on Solaris/SVr4-based systems --------------------------------------------------------------------------- Developers who have claimed items are: -------------------------------------- * Billy is Billy G. Allie * Bruce is Bruce Momjian * D'Arcy is D'Arcy J.M. Cain * Edmund is Edmund Mergl * Hiroshi is Hiroshi Inoue * Karel is Karel Zak * Jan is Jan Wieck * Marc is Marc Fournier * Mark is Mark Hollomon * Michael is Michael Meskes * Oleg is Oleg Bartunov * Peter M is Peter T Mount * Peter E is Peter Eisentraut * Philip is Philip Warner * Ross is Ross J. Reedstrom * Ryan is Ryan Bradetich * Stephan is Stephan Szabo * Tatsuo is Tatsuo Ishii * Thomas is Thomas Lockhart * Tom is Tom Lane * TomH is Tom I Helbekkmo * Vadim is Vadim B. Mikheev