TODO list for PostgreSQL
========================
-Last updated: Sun Nov 16 21:05:26 EST 2003
+Last updated: Wed Nov 19 12:33:55 EST 2003
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
Reporting
=========
-* -Allow elog() to return error codes, module name, file name, line
- number, not just messages (Tom)
-* -Add error codes (Tom)
-* -Make error messages more consistent
* Show location of syntax error in query [yacc]
-* -Add GUC log_statement_and_duration to print statement and >= min duration
Administration
or postmaster startup (Bruce)
* Remove behavior of postmaster -o after making postmaster/postgres
flags unique
-* -Allow easy display of usernames in a group
* Allow configuration files to be specified in a different directory
-* -Add start time to pg_stat_activity
* Allow limits on per-db/user connections
-* -Have standalone backend read postgresql.conf (Tom)
* Add group object ownership, so groups can rename/drop/grant on objects,
so we can implement roles
* Add the concept of dataspaces/tablespaces [tablespaces]
-* -Allow CIDR format to be used in pg_hba.conf
* Allow logging of only data definition(DDL), or DDL and modification statements
* Allow log lines to include session-level information, like database and user
* Allow server log information to be output as INSERT statements
Data Types
==========
-* -Add IPv6 capability to INET/CIDR types
* Remove Money type, add money formatting for decimal type
* Change factorial to return a numeric
-* -Change NUMERIC data type to use base 10,000 internally
* Change NUMERIC to enforce the maximum precision, and increase it
* Add function to return compressed length of TOAST data values (Tom)
* Allow INET subnet tests using non-constants to be indexed
* Add transaction_timestamp(), statement_timestamp(), clock_timestamp() functionality
-* -Add GUC variables to control floating number output digits (Pedro Ferreira)
* Have sequence dependency track use of DEFAULT sequences, seqname.nextval
* Disallow changing default expression of a SERIAL column
* Allow infinite dates just like infinite timestamps
* Allow better handling of numeric constants, type conversion [typeconv]
* Allow backend to output result sets in XML
* Prevent whole-row references from leaking memory, e.g. SELECT COUNT(tab.*)
-* -Allow current datestyle to restrict dates; prevent month/day swapping
- from making invalid dates valid
-* -Prevent month/day swapping of ISO dates to make invalid dates valid
* Have initdb set DateStyle based on locale?
* Add pg_get_acldef(), pg_get_typedefault(), and pg_get_attrdef()
* Add ALTER DOMAIN, AGGREGATE, CONVERSION, SEQUENCE ... OWNER TO
* ARRAYS
o Allow nulls in arrays
- o -Allow arrays to be ORDER'ed
o Allow MIN()/MAX() on arrays
- o -Support construction of array result values in expressions (Joe)
o Delay resolution of array expression type so assignment coercion
can be performed on empty array expressions (Joe)
* Make octet_length_client the same as octet_length() (?)
* Prevent mismatch of frontend/backend encodings from converting bytea
data from being interpreted as encoded strings
-* -Remove Cyrillic recode support
* Fix upper()/lower() to work for multibyte encodings
Indexes
=======
-* -Allow CREATE INDEX zman_index ON test (date_trunc( 'day', zman ) datetime_ops)
- fails index can't store constant parameters
* Order duplicate index entries by tid for faster heap lookups
* Allow inherited tables to inherit index, UNIQUE constraint, and primary
key, foreign key [inheritance]
INSERT INTO inherit_table (unique_index_col) VALUES (dup) should fail
[inheritance]
* Add UNIQUE capability to non-btree indexes
-* -Add btree index support for reltime, tinterval, regproc (Tom)
* Add rtree index support for line, lseg, path, point
-* -Certain indexes will not shrink, e.g. indexes on ever-increasing
columns and indexes with many duplicate keys
* Use indexes for min() and max() or convert to SELECT col FROM tab ORDER
BY col DESC LIMIT 1 if appropriate index exists and WHERE clause acceptible
-* -Allow LIKE indexing optimization for non-ASCII locales using special index
* Use index to restrict rows returned by multi-key index when used with
non-consecutive keys or OR clauses, so fewer heap accesses
* Be smarter about insertion of already-ordered data into btree index
float4, numeric/decimal too [optimizer]
* Add FILLFACTOR to btree index creation
* Add concurrency to GIST
-* -Improve concurrency of hash indexes (Tom)
* Allow a single index to index multiple tables (for inheritance and subtables)
========
* Add BETWEEN ASYMMETRIC/SYMMETRIC (Christopher)
-* -Allow LIMIT/OFFSET to use expressions (Tom)
* Change LIMIT/OFFSET to use int8
* CREATE TABLE AS can not determine column lengths from expressions [atttypmod]
* Allow UPDATE to handle complex aggregates [update]
* Allow command blocks to ignore certain types of errors
* Allow backslash handling in quoted strings to be disabled for portability
-* -Return proper effected tuple count from complex commands [return]
* Allow UPDATE, DELETE to handle table aliases for self-joins [delete]
* Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT
* Allow REINDEX to rebuild all indexes, remove /contrib/reindex
-* -Make a transaction-safe TRUNCATE (Rod)
* Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY
* Add schema option to createlang
* Allow savepoints / nested transactions [transactions] (Bruce)
* Allow UPDATE tab SET ROW (col, ...) = (...) for updating multiple columns
-* -Allow UPDATE to use SET col = DEFAULT
-* -Add config variable to prevent auto-adding missing FROM-clause tables
* Allow SET CONSTRAINTS to be qualified by schema/table
-* -Have SELECT '13 minutes'::interval display zero seconds in ISO datestyle
* Prevent COMMENT ON DATABASE from using a database name
* Add GUC variable to prevent waiting on locks
* Allow TRUNCATE ... CASCADE/RESTRICT
rows with DEFAULT value
o ALTER TABLE ADD COLUMN column SERIAL doesn't create sequence because
of the item above
- o -Add ALTER TABLE tab SET WITHOUT OIDS (Rod)
- o -Add ALTER SEQUENCE to modify min/max/increment/cache/cycle values
o Have ALTER TABLE rename SERIAL sequences
o Allow columns to be reordered using ALTER ... POSITION i col1 [,col2];
have SELECT * and INSERT honor such ordering
* CLUSTER
o Automatically maintain clustering on a table
- o -Allow CLUSTER to cluster all tables (Alvaro Herrera)
* COPY
o Allow dump/load of CSV format
o Have COPY return number of rows loaded/unloaded
* CURSOR
- o -MOVE 0 should not move to end of cursor (Bruce)
o Allow UPDATE/DELETE WHERE CURRENT OF cursor using per-cursor tid
stored in the backend (Gavin)
o Prevent DROP of table being referenced by our own open cursor
- o -Allow cursors outside transactions
* INSERT
o Allow INSERT/UPDATE of system-generated oid value for a row
o Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM
ANALYZE, and CLUSTER
o Add SET PATH for schemas
- o -Allow EXPLAIN EXECUTE to see prepared plans
- o -Allow SHOW of some non-modifiable variables, like pg_controldata
* SERVER-SIDE LANGUAGES
o Allow PL/PgSQL's RAISE function to take expressions
o Allow function parameters to be passed by name,
get_employee_salary(emp_id => 12345, tax_year => 2001)
o Add PL/PgSQL packages
- o -Allow array declarations and other data types in PL/PgSQL DECLARE
o Add table function support to pltcl, plperl, plpython
- o -Make PL/PgSQL %TYPE schema-aware
- o -Allow PL/PgSQL to support array element assignment (Joe)
o Add PL/PHP (Joe, Jan)
o Allow PL/pgSQL to name columns by ordinal position, e.g. rec.(3)
o Allow PL/pgSQL EXECUTE query_var INTO record_var;
Clients
=======
-* -Allow psql to show transaction status if backend protocol changes made
-* -Add schema, cast, and conversion backslash commands to psql (Christopher)
-* -Allow pg_dump to dump a specific schema (Neil Conway)
-* -Allow psql to do table completion for SELECT * FROM schema_part and
- table completion for SELECT * FROM schema_name.
* Add XML capability to pg_dump and COPY, when backend XML capability
-* -Allow SSL-enabled clients to turn off SSL transfers
-* -Modify pg_get_triggerdef() to take a boolean to pretty-print,
- and use that as part of pg_dump along with psql
* Allow psql \du to show groups, and add \dg for groups
* Allow clients to query WITH HOLD cursors and prepared statements
* Prevent unneeded quoting in psql \d output using fmtId()
o Solve cardinality > 1 for input descriptors / variables
o Improve error handling
o Add a semantic check level, e.g. check if a table really exists
- o -Add SQLSTATE
o fix handling of DB attributes that are arrays
o Use backend prepare/execute facility for ecpg where possible
- o -Make casts work in variable initializations
o Implement SQLDA
o Fix nested C comments
o sqlwarn[6] should be 'W' if the PRECISION or SCALE value specified
- o -Allow multi-threaded use of SQLCA
- o -Understand structure definitions outside a declare section
- o -Allow :var[:index] or :var[<integer>] as cvariable for an array var
* Python
o Allow users to register their own types with pg_
* Allow DEFERRABLE UNIQUE constraints
* Allow triggers to be disabled [trigger]
* With disabled triggers, allow pg_dump to use ALTER TABLE ADD FOREIGN KEY
-* -Support statement-level triggers (Neil)
* Allow statement-level triggers to access modified rows
* Support triggers on columns (Neil)
* Have AFTER triggers execute after the appropriate SQL statement in a
* Turn off after-change writes if fsync is disabled (?)
* Add WAL index reliability improvement to non-btree indexes
* Find proper defaults for postgresql.conf WAL entries
-* -Add checkpoint_min_warning postgresql.conf option to warn about checkpoints
- that are too frequent (Bruce)
* Allow xlog directory location to be specified during initdb, perhaps
using symlinks
* Allow WAL information to recover corrupted pg_controldata
Optimizer / Executor
====================
-* -Improve Subplan list handling
-* -Allow Subplans to use efficient joins(hash, merge) with upper variable
-* -Add hash for evaluating GROUP BY aggregates (Tom)
-* -Allow merge and hash joins on expressions not just simple variables (Tom)
-* -Make IN/NOT IN have similar performance to EXISTS/NOT EXISTS (Tom)
* Missing optimizer selectivities for date, r-tree, etc. [optimizer]
* Allow ORDER BY ... LIMIT to select top values without sort or index
using a sequential scan for highest/lowest values (Oleg)
-* -Inline simple SQL functions to avoid overhead (Tom)
* Precompile SQL functions to avoid overhead (Neil)
* Add utility to compute accurate random_page_cost value
* Improve ability to display optimizer analysis using OPTIMIZER_DEBUG
=============
* Do async I/O for faster random read-ahead of data
-* -Get faster regex() code from Henry Spencer <henry@zoo.utoronto.ca>
* Use mmap() rather than SYSV shared memory or to write WAL files (?) [mmap]
* Improve caching of attribute offsets when NULLs exist in the row
* Add a script to ask system configuration questions and tune postgresql.conf
* Move some things from /contrib into main tree
* Remove warnings created by -Wcast-align
* Move platform-specific ps status display info from ps_status.c to ports
-* -Modify regression tests to prevent failures do to minor numeric rounding
-* -Add OpenBSD's getpeereid() call for local socket authentication
* Improve access-permissions check on data directory in Cygwin (Tom)
* Add documentation for perl, including mention of DBI/DBD perl location
* Create improved PostgreSQL introductory documentation for the PHP
* Acquire lock on a relation before building a relcache entry for it
* Research interaction of setitimer() and sleep() used by statement_timeout
* Add checks for fclose() failure
-* Change CVS $Id: TODO,v 1.1169 2003/11/17 02:05:26 momjian Exp $ to $PostgreSQL: pgsql/doc/TODO,v 1.1169 2003/11/17 02:05:26 momjian Exp $
+* Change CVS $Id: TODO,v 1.1170 2003/11/19 17:34:01 momjian Exp $ to $PostgreSQL: pgsql/doc/TODO,v 1.1170 2003/11/19 17:34:01 momjian Exp $
* Exit postmaster if postgresql.conf can not be opened
* Rename /scripts directory because they are all C programs now
* Allow the regression tests to start postmaster with -i so the tests
* Wire Protocol Changes
- o -Show transaction status in psql
- o -Allow binding of query parameters, support for prepared queries
- o -Remove hard-coded limits on user/db/password names
- o -Remove unused elements of startup packet (unused, tty, passlength)
- o -Fix COPY/fastpath protocol
- o -Error codes
o Dynamic character set handling
- o -Special passing of binary values in platform-neutral format (bytea?)
o Add decoded type, length, precision
o Compression?
- o -Report server version number, database encoding, client encoding
o Update clients to use data types, typmod, schema.table.column names of
result sets using new query protocol