TODO list for PostgreSQL ======================== Last updated: Thu May 31 10:48:15 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 ----------- * -SELECT pg_class FROM pg_class generates strange error (Bruce) * PL/PgSQL does not handle quoted mixed-case identifiers ENHANCEMENTS ------------ URGENT * Add replication of distributed databases [replication] o automatic failover 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 * Improve control over user privileges, including table creation and lock use [privileges] (Karel, others) * -Permission to DELETE table also allows UPDATE (Peter E) * Allow elog() to return error codes, module name, file name, line number, not just messages (Peter E) [elog] * Allow international error message support and add error codes [elog] * Remove unused files during database vacuum or postmaster startup * Add table name mapping for numeric file names * Overhaul pg_hba.conf host-based authentication * Encrpyt passwords in pg_shadow table using MD5 (Vince) * Incremental backups TYPES * Add domain capability * Add IPv6 capability to INET/CIDR types * Add conversion function from text to inet * Store binary-compatible type information in the system * Support construction of array result values in expressions * 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 * Make binary/file in/out interface for TOAST columns * 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] * Missing optimizer selectivities for date, r-tree, etc. [optimizer] * SELECT cash_out(2) crashes because of opaque * -Add SQL standard function bit_length() (Peter E) * Make oid use unsigned int more reliably, pg_atoi() * ARRAYS * Allow nulls in arrays * Allow arrays to be ORDER'ed * fix array handling in ECPG MULTILANGUAGE SUPPORT * Add NCHAR (as distinguished from ordinary varchar), * Allow LOCALE on a per-column basis, default to ASCII * 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 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] * UNIQUE INDEX on base column not honored on inserts from inherited table INSERT INTO inherit_table (unique_index_col) VALUES (dup) should fail [inheritance] * Prevent pg_attribute from having duplicate oids for indexes (Tom) * Add UNIQUE capability to non-btree indexes * Certain indexes will not shrink, e.g. oid indexes with many inserts (Vadim) * Have UPDATE/DELETE clean out indexes * Add btree index support for reltime, tinterval, regproc * Add rtree index support for line, lseg, path, point * Use indexes for 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 to 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 (Tom) * Add deleted bit to index tuples to reduce heap access * Prevent index uniqueness checks when UPDATE does not modifying column SYSTEM TABLES * Add unique indexes to pg_shadow.usename and pg_shadow.usesysid or switch to pg_shadow.oid as user id * Add unique indexes on pg_database * Check all system tables and add unique indexes as needed * Remove pg_listener index * -Remove unused pg_variable, pg_inheritproc, pg_ipl tables (Bruce) * Add pg_depend table to track object dependencies COMMANDS * Add SIMILAR TO to allow character classes, 'pg_[a-c]%' * Auto-destroy sequence on DROP of table with SERIAL, perhaps with a separate SERIAL type * Allow LOCK TABLE tab1, tab2, tab3 so all tables locked in unison [lock] * Allow RULE recompilation * Add BETWEEN ASYMMETRIC/SYMMETRIC * Change LIMIT val,val to offset,limit to match MySQL * Allow PL/PgSQL's RAISE function to take expressions * ALTER * ALTER TABLE ADD COLUMN does not honor DEFAULT and non-CHECK CONSTRAINT * 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 non-CHECK CONSTRAINT * -Add ALTER TABLE DROP CHECK CONSTRAINT (Christopher Kings) * CLUSTER * cluster all tables at once * prevent lose of indexes, permissions, inheritance * Automatically keep clustering on a table * -Keep statistics about clustering [optimizer] * COPY * Allow specification of column names * Allow dump/load of CSV format * CURSOR * Allow BINARY option to SELECT, like we do with DECLARE * MOVE 0 should not move to end of cursor * Allow cursors to be DECLAREd/OPENed/CLOSEed outside transactions * Allow DELETE WHERE CURRENT OF cursor * INSERT * Allow INSERT/UPDATE of system-generated oid value for a row * Allow INSERT INTO tab (col1, ..) VALUES (val1, ..), (val2, ..) * Allow INSERT INTO my_table VALUES (a, b, c, DEFAULT, x, y, z, ...) * Disallow missing columns in INSERT ... VALUES, per ANSI * Allow INSERT/UPDATE ... RETURNING new.col or old.col (Philip) * SHOW/SET * Add SHOW command to display locks * Add SHOW command to show all settings * Add a global RESET command for use with connection pooling * Add SET or BEGIN timeout parameter to cancel query if waiting too long * Add SET REAL_FORMAT and SET DOUBLE_PRECISION_FORMAT using printf args * Remove SET KSQO option now that OR processing is improved (Tom) * Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM ANALYZE, and CLUSTER * Add SHOW command to see locale CLIENTS * Make NULL's come out at the beginning or end depending on the ORDER BY direction * 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 foreign keys * allow psql \d to show temporary table structure * add XML interface capability * Remove <=6.3 version compatibility in ODBC? 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] * Make constraints clearer in dump file * Make foreign keys easier to identify * Change foreign key constraint for array -> element to mean element in array * Automatically drop constraints/functions when object is dropped TRANSACTIONS * Implement UNDO using transaction log, overwriting storage manager? [vacuum] (Vadim) * Allow autocommit so always in a transaction block * Overhaul bufmgr/lockmgr/transaction manager * Allow nested transactions (Vadim) * Handle transaction rollover [transactions] EXOTIC FEATURES * Add sql3 recursive unions * Add the concept of dataspaces/tablespaces [tablespaces] * Allow SQL92 schemas (Tom) * Allow queries across multiple databases * Add pre-parsing phase that converts non-ANSI features to supported features * SQL*Net listener that makes PostgreSQL appear as an Oracle database to clients 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 (Tom) * Populate backend status area and write program to dump status data (Jan) * -Put sort files in their own directory (Bruce) * Show location of syntax error in query [yacc] * 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() 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 (Tom) * -Allow ANALYZE to ESTIMATE based on certain random precentage of rows (Tom) * Add LAZY VACUUM (Vadim) MISCELLANEOUS * Allow compression of log and meta data * Do async I/O to do better read-ahead of data * Experiment with multi-threaded backend [thread] * 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 * -Improve statistics storage in pg_class [performance] (Tom) * Add connection pooling [pool] * Allow persistent backends [persistent] * Create a transaction processor to aid in persistent connections and connection pooling * Make blind writes go through the file descriptor cache * Allow logging of query durations * Add hash-based aggregates SOURCE CODE ----------- * Add use of 'const' for variables in source tree * Does Mariposa source contain any other bug fixes? * Convert remaining fprintf(stderr,...)/perror() to elog() * 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_* * Move some things from /contrib into main tree, like soundex * Allow plug-in modules to emulate features from other databases * Remove warnings created by -Wcast-align * Move platform-specific ps status display info from ps_status.c to ports * Allow ps status display to work on Solaris/SVr4-based systems * -Decide on spelling of indexes/indices (Peter E) * Add mention of VACUUM, log rotation to Administrator's Guide * Use BlockNumber rather than int where appropriate --------------------------------------------------------------------------- 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