PostgreSQL TODO list
ALINK="#0000FF">
Last updated: Tue Sep 28 00:34:21 EDT 1999
Current maintainer: Bruce Momjian ([email protected])
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 next release.
Names in brackets "[]" indicate more detailed information is available in
the directory pgsql/doc/TODO.detail/ under that name.
RESOURCES
- Elog() does not free all its memory(Jan)
- spinlock stuck problem when elog(FATAL) and elog(ERROR) inside bufmgr
- Recover or force failure when disk space is exhausted
PARSER
- Disallow inherited columns with the same name as new columns
- INSERT INTO ... SELECT with AS columns matching result columns problem
- SELECT pgclass FROM pgclass generates strange error
- Alter TABLE ADD COLUMN does not honor DEFAULT, add CONSTRAINT
- Do not allow bpchar column creation without length
- -Select a[1] FROM test fails, it needs test.a[1]
- -Array index references without table name cause problems [array]
- Update table SET table.value = 3 fails(SQL standard says this is OK)
- Creating index of TIMESTAMP & RELTIME fails, or rename to DATETIME(Thomas)
- SELECT foo UNION SELECT foo is incorrectly simplified to SELECT foo
- -INSERT ... SELECT ... GROUP BY groups by target columns not source columns
- -CREATE TABLE test (a char(5) DEFAULT text '', b int4) fails on INSERT
- UNION with LIMIT fails
- Unique index on base column not honored on inserts from inherited table
INSERT INTO inherit_table (uniqueindexcol) VALUES (dup) should fail
[inherit]
- CREATE TABLE x AS SELECT 1 UNION SELECT 2 fails
- CREATE TABLE test(col char(2) DEFAULT user) fails in length restriction
- mismatched types in CREATE TABLE ... DEFAULT causes problems [default]
- SELECT ... UNION ... ORDER BY fails when sort expr not in result list
- Be smarter about promoting types when UNION merges different data types
- SELECT ... UNION ... GROUP BY fails if column types disagree
- redesign INSERT ... SELECT to have two levels of target list
- -select * from pg_class where oid in (0,-1)
- have INTERSECT/EXCEPT prevent duplicates unless ALL is specified
- prevent primary key of nine columns [primary]
- SELECT COUNT('asdf') FROM pg_class WHERE oid=12 crashes
- SELECT DISTINCT ON col1 col1 col2 FROM tab1 is broken [distinct]
- -When using aggregates + GROUP BY, no rows in should yield no rows out
VIEWS
- Views containing aggregates sometimes fail(Jan)
- Views with spaces in view name fail when referenced
MISC
- User who can create databases can modify pg_database table
- Plpgsql does not handle quoted mixed-case identifiers
- Fix btree to give a useful elog when key > 1/2 (page - overhead)
- pg_dump should preserve primary key information
- plpgsql regression tests fail on BSD/OS
URGENT
- Add referential integrity(Jan?)[primary]
- Add OUTER joins, left and right[outer](Thomas, Bruce)
- Allow long tuples by chaining or auto-storing outside db (chaining,large objs)
- Eliminate limits on query length
- Fix memory leak for expressions?[memory](Tom?)
- -Fix memory leak for aggregates?
ADMIN
- Better interface for adding to pg_group
- More access control over who can create tables and access the database
- Test syslog functionality
- Allow elog() to return error codes, not just messages
- Allow international error message support and add error codes
- Generate postmaster pid file and remove flock/fcntl lock code [flock]
- Add ability to specifiy location of lock/socket files [flock]
TYPES
- Add BIT, BIT VARYING
- Nchar (as distinguished from ordinary varchar),
- Domain capability
- Add STDDEV/VARIANCE() function for standard deviation computation/variance
- Allow compression of large fields or a compressed field type
- Large objects
- Fix large object mapping scheme, own typeid or reltype(Peter)
- Allow large text type to use large objects(Peter)
- Not to stuff everything as files in a single directory, hash dirs
- Allow large object vacuuming
- Tables that start with xinv confused to be large objects
- Allow pg_descriptions when creating types, tables, columns, and functions
- Add IPv6 capability to INET/CIDR types
- Make a separate SERIAL type?
- Store binary-compatible type information in the system
- Allow user to define char1 column
- Add support for & operator
- Allow LOCALE on a per-column basis, default to ASCII
- Allow array on int8[]
- Allow nulls in arrays
- Allow arrays to be ORDER'ed
- 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
- Add index on NUMERIC/DECIMAL type
- Make Absolutetime/Relativetime int4 because time_t can be int8 on some ports
- Functions returning sets don't really work right[function]
VIEWS
- Allow DISTINCT on views
- Allow views of aggregate columns
- Allow views with subselects
INDEXES
- Allow CREATE INDEX zman_index ON test (date_trunc( 'day', zman ) datetime_ops)
fails index can't store constant parameters
- Allow creation of functional indexes to use default types
- Permissions on indexes - prevent them?
- Allow SQL function indexes
- Add FILLFACTOR to index creation
- Allow indexing of LIKE with localle character sets
- Allow indexing of more than eight columns
COMMANDS
CLIENTS
- Make NULL's come out at the beginning or end depending on the
ORDER BY direction
- Allow flag to control COPY input/output of NULLs
- Update reltuples from COPY command
- Allow psql \copy to allow delimiters
- Add a function to return the last inserted oid, for use in psql scripts
- Allow psql to print nulls as distinct from "" [null]
EXOTIC FEATURES
- Add sql3 recursive unions
- Add the concept of dataspaces
- Add replication of distributed databases
- Allow queries across multiple databases
MISC
- Increase identifier length(NAMEDATALEN) if small performance hit
- Allow row re-use without vacuum(Vadim)
- Create a background process for each database that runs while
database is idle, finding superceeded rows, gathering stats and vacuuming
- Add UNIQUE capability to non-btree indexes
- -Certain indexes will not shrink, i.e. oid indexes with many inserts
- Restore unused oid's on backend exit if no one else has gotten oids
- Have UPDATE/DELETE clean out indexes
- Allow WHERE restriction on ctid
- Allow cursors to be DECLAREd/OPENed/CLOSEed outside transactions
- Allow PQrequestCancel() to terminate when in waiting-for-lock state
- -Transaction log, so re-do log can be on a separate disk by
with after-row images(Vadim) [logging]
- Populate backend status area and write program to dump status data
- Make oid use unsigned int more reliably, pg_atoi()
- Allow subqueries in target list
- Put sort files, large objects in their own directory
- Do autocommit so always in a transaction block(?)
- Show location of syntax error in query [yacc]
- Redesign the function call interface to handle NULLs better [function]
- Document/trigger/rule so changes to pgshadow recreate pgpwd [pg_shadow]
- Missing optimizer selectivities for date, r-tree, etc. [optimizer]
- Overhaul mdmgr/smgr to fix double unlinking and double opens, cleanup
- Overhaul bufmgr/lockmgr/transaction manager
- Add PL/Perl(Mark Hollomon)
- Make postgres user have a password by default
- Add configure test to check for C++ need for *.h and namespaces
- Allow BLCKSZ <= 64k, not <= 32k
- redesign UNION structures to have separarate target lists
- Allow multi-level query trees for INSERT INTO ... SELECT
FSYNC
- -Allow transaction commits with rollback with no-fsync performance [fsync]
- -Prevent fsync in SELECT-only queries
INDEXES
- Use indexes in ORDER BY for restrictive data sets, min(), max()
- Pull requested data directly from indexes, bypassing heap data
- Use index to restrict rows returned by multi-key index when used with
non-consecutive keys or OR clauses, so fewer heap accesses
- -Convert function(constant) into a constant for index use
- Allow LIMIT ability on single-table queries that have no ORDER BY to use
a matching index [limit]
- Improve LIMIT processing by using index to limit rows processed [limit]
- Have optimizer take LIMIT into account when considering index scans [limit]
- Make index creation use psort code, because it is now faster(Vadim)
- Allow creation of sort temp tables > 1 Gig
- Create more system table indexes for faster cache lookups
- fix indexscan() so it does leak memory by not requiring caller to free
- Improve btbinsrch() to handle equal keys better, remove btfirsteq()(Tom)
- Allow SELECT * FROM tab WHERE int2col = 4 use int2col index, int8,
float4, numeric/decimal too [optimizer]
- -Allow optimizer to prefer plans that match ORDER BY
CACHE
- Cache most recent query plan(s) [prepare]
- Shared catalog cache, reduce lseek()'s by caching table size in shared area
- elog() flushes cache, try invalidating just entries from current xact,
perhaps using invalidation cache
MISC
- Allow compression of log and meta data
- Allow char() not to use variable-sized header to reduce disk size
- Do async I/O to do better read-ahead of data
- -Fix memory exhaustion when using many OR's [cnfify]
- Get faster regex() code from Henry Spencer <[email protected]>
when it is available
- Use mmap() rather than SYSV shared memory(?)
- -Process const = const parts of OR clause in separate pass
- Make oid use oidin/oidout not int4in/int4out in pg_type.h
- Improve Subplan list handling
- Allow Subplans to use efficient joins(hash, merge) with upper variable
[subquery]
- use fmgr_info()/fmgr_faddr() instead of fmgr() calls in high-traffic
places, like GROUP BY, UNIQUE, index processing, etc.
- improve dynamic memory allocation by introducing tuple-context memory
allocation [memory]
- fix memory leak in cache code when non-existant table is referenced
- In WHERE tab1.x=3 AND tab1.x=tab2.y, add tab2.y=3
- pass atttypmod through parser in more cases [atttypmod]
- remove duplicate type in/out functions for disk and net
- Allow persistent backends [persistent]
- Misc [performance]
- Add use of 'const' for varibles in source tree
- Fix C optimizer problem where fmgr_ptr calls return different types [alpha]
- -Add needed includes and removed unneeded include files(Bruce)
- Make configure --enable-debug add -g on compile line
- Does Mariposa source contain any other bug fixes?
- Remove SET KSQO option if OR processing is improved(Tom)
TODO list for PostgreSQL
========================
-Last updated: Mon Sep 27 13:02:57 EDT 1999
+Last updated: Tue Sep 28 00:34:21 EDT 1999
* Plpgsql does not handle quoted mixed-case identifiers
* Fix btree to give a useful elog when key > 1/2 (page - overhead)
* pg_dump should preserve primary key information
+* plpgsql regression tests fail on BSD/OS
ENHANCEMENTS
------------