summaryrefslogtreecommitdiff
path: root/doc/TODO
blob: 3939663ab2a94dd772b6a7bc35c7334a19071fc9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
TODO list for PostgreSQL
========================
Last updated:		Mon Jan 22 19:02:19 EST 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.1 release.

Names in brackets "[]" indicate more detailed information is available in
the directory pgsql/doc/TODO.detail/ under that name.


RELIABILITY
-----------

PARSER

* SELECT pg_class FROM pg_class generates strange error
* Alter TABLE ADD COLUMN does not honor DEFAULT, add CONSTRAINT
* -Creating index of TIMESTAMP & RELTIME fails, or rename to DATETIME (Thomas)
* -SELECT foo UNION SELECT foo is incorrectly simplified to SELECT foo
* Unique index on base column not honored on inserts from inherited table
  INSERT INTO inherit_table (unique_index_col) VALUES (dup) should fail
  [inherit] 
* -Be smarter about promoting types when UNION merges different data types
* -redesign INSERT ... SELECT to have two levels of target list
* -have INTERSECT/EXCEPT prevent duplicates unless ALL is specified (Tom)
* -SELECT col::DECIMAL(12,10); fails

VIEWS

* -Views containing aggregates sometimes fail (Jan)
* -Creating view and inheriting the view causes view* to show
  duplicates (inherit) 
* -Disallow LOCK on view (Mark Hollomon)

MISC

* Plpgsql does not handle quoted mixed-case identifiers
* -Buffer reference counting bugfixes (Tom)
* -Fix libpq bug that causes it to drop backend error message sent
  just before connection closure (ie, any FATAL error message)
* -SELECT ... UNION ... ORDER BY fails when sort expr not in result list
* -SELECT ... UNION ... GROUP BY fails if column types disagree, no type
  promotion occurs
* -Modification  of  pg_class  can  happen while table in use by
  another backend.  Might  lead  to  MVCC  inside  of  syscache
* Permission to DELETE table allows UPDATE also

ENHANCEMENTS
------------

URGENT

* -Add OUTER joins, left and right[outer] (Tom, Thomas)
* -Allow long tuples by chaining or auto-storing outside db (TOAST) (Jan)
* -Fix memory leak for expressions[memory] (Tom) 
* 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)
* -Test syslog functionality
* Convert remaining fprintf(stderr,...)/perror() to elog()
* Allow elog() to return error codes, module name, file name, line
  number, not just messages
* Allow international error message support and add error codes
* -Unify configuration into one configuration file (Peter E)
* -use setproctitle() if it exists for 'ps' display of status
* -Prevent initdb from running wrong version of postmaster/postgres (Peter E)
* Remove unused files during database vacuum or postmaster startup

TYPES

* 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
	o -Fix large object mapping scheme, own typeid or reltype (Peter)
	o -Not to stuff everything as files in a single directory, hash dirs
	o -Allow large object vacuuming
	o -Tables that start with xinv confused to be large objects
* Add IPv6 capability to INET/CIDR types
* -Fix improper masking of some inet/cidr types [cidr]
* Add conversion function from text to inet
* Make a separate SERIAL type?
* Store binary-compatible type information in the system
* -Add support for & operator (Peter E)
* 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 don't really work right[function]
* -Add hash for int8 (Tom)
* SELECT col FROM tab WHERE numeric_col = 10.1 fails
* -Get BIT type working
* 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
* -Update macaddr manufacturer numbers, or remove the function macaddr_manuf()
* 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()

VIEWS

* -Allow DISTINCT on views
* -Allow views of aggregate columns
* -Allow views with subselects
* Automatically create rules on views so they are updateable, per SQL92
* -Change elog for complex view ins|upd|del to "cannot {ins|upd|del}
* Add the functionality for "with check option" clause of create view

INDEXES

* Allow CREATE INDEX zman_index ON test (date_trunc( 'day', zman ) datetime_ops)
  fails index can't store constant parameters
* -Allow SQL function indexes
* Add FILLFACTOR to index creation
* Re-enable partial indexes
* Allow inherited tables to inherit index

COMMANDS

* ALTER TABLE ADD COLUMN to inherited table put column in wrong place [inherit]
* -Add ALTER TABLE ALTER COLUMN feature (Peter E)
* Add ALTER TABLE DROP COLUMN feature [drop]
* -Add ALTER TABLE command to change table ownership (Mark H)
* Add ALTER FUNCTION 
* Add ALTER TABLE ... DROP CONSTRAINT
* -Add ALTER USER command to change user db attributes (Peter E)
* 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 multi-level query trees for INSERT INTO ... SELECT
* -Allow ORDER BY...LIMIT in INSERT INTO ... SELECT (Tom)
* -Allow ESCAPE '\' at the end of LIKE for ANSI compliance (Thomas)
* -Rewrite the LIKE handling by rewriting the user string with the 
  supplied ESCAPE [like]
* Allow RULE recompilation
* -Support UNION/INTERSECT/EXCEPT in sub-selects
* -Allow DELETE and UPDATE to use inheritance
* 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

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
* -add pg_dump option to dump type names as standard ANSI types
* -make pg_dump dump in oid order, so dependencies are resolved (Philip)
* allow psql \d to show primary and foreign keys
* allow psql \d to show temporary table structure
* add XML interface capability
* -Allow dumping of users/groups separately

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
* -Emit a warning at foreign key creation time if no UNIQUE index
  exists on referenced primary key attributes
* 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

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)
* 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
* Add UNIQUE capability to non-btree indexes
* Certain indexes will not shrink, i.e. oid indexes with many inserts (Vadim)
* Move OID retrieval into shared memory to prevent lose of unused oids
* Have UPDATE/DELETE clean out indexes
* Allow cursors to be DECLAREd/OPENed/CLOSEed outside transactions
* Allow DELETE WHERE CURRENT OF cursor
* -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()
* Put sort files in their own directory
* Allow 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] (Tom)
* Missing optimizer selectivities for date, r-tree, etc. [optimizer]
* Overhaul bufmgr/lockmgr/transaction manager
* -redesign UNION structures to have separarate target lists
* -Use IPC_EXCL when creating shared memory and semaphores (Tom)
* Encrpyt passwords in pg_shadow table using MD5 (Vince)
* -Use flock() to prevent multiple postmasters on the same port (Tom)
* Allow Java server-side programming

PERFORMANCE
-----------

-FSYNC

* -Allow transaction commits with rollback with no-fsync performance
  (Vadim)

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]
* -Include heap CTID in btree index keys, remove equal-key cruft from
  btree (Tom)
* Use indexes with CIDR '<<' (contains) operator
* Allow LIKE indexing optimization for non-ASCII locales

CACHE

* Cache most recent query plan(s) (Karel) [prepare]
* Shared catalog cache, reduce lseek()'s by caching table size in shared area

MISC

* 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 <henry@zoo.utoronto.ca>
  when it is available
* Use mmap() rather than SYSV shared memory(?)
* -Make oid use oidin/oidout not int4in/int4out in pg_type.h (Tom)
* 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 (Tom)
* -In WHERE tab1.x=3 AND tab1.x=tab2.y, add tab2.y=3
* allow configuration of maximum number of open files
* Remove pg_listener index
* Gather more accurate dispersion statistics using indexes
* Improve statistics storage in pg_class [performance]
* 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]
	* -Redesign ANALYZE in VACUUM so it can be run separately without locks
	* Make ANALYZE a separate command
* 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

SOURCE CODE
-----------
* Add use of 'const' for variables in source tree
* -Fix C optimizer problem where fmgr_ptr calls return different types (Tom)
* Does Mariposa source contain any other bug fixes?
* Remove SET KSQO option now that OR processing is improved (Tom)
* -Use macros to define NT open() file parameters, remove NT-specific defines
* -Change CURRENT to OLD internally for rules (Bruce)
* Replace the use of fprint(stderr, ...) with elog() in backend code
* -Allow libedit to be used in place of libreadline
* -BSD/OS does not support locale because there is no LC_MESSAGES (Bruce)

---------------------------------------------------------------------------


Developers who have claimed items are:
--------------------------------------
	* Billy is Billy G. Allie <Bill.Allie@mug.org>
	* Brook is Brook Milligan <brook@trillium.NMSU.Edu>
	* Bruce is Bruce Momjian<pgman@candle.pha.pa.us>
	* D'Arcy is D'Arcy J.M. Cain <darcy@druid.net>
	* Edmund is Edmund Mergl <E.Mergl@bawue.de>
	* Goran is Goran Thyni <goran@kyla.kiruna.se>
	* Hiroshi is Hiroshi Inoue <Inoue@tpf.co.jp>
	* Karel is Karel Zak <zakkr@zf.jcu.cz>
	* Jan is Jan Wieck <wieck@sapserv.debis.de>
 	* Marc is Marc Fournier <scrappy@hub.org>
	* Mark is Mark Hollomon <mhh@mindspring.com>
	* Massimo is Massimo Dal Zotto <dz@cs.unitn.it>
	* Michael is Michael Meskes <meskes@postgresql.org>
	* Oleg is Oleg Bartunov <oleg@sai.msu.su>
	* Peter is Peter T Mount <peter@retep.org.uk>
	* Peter E is Peter Eisentraut<peter_e@gmx.net>
	* Philip is Philip Warner <pjw@rhyme.com.au>
	* Ross is Ross J. Reedstrom <reedstrm@wallace.ece.rice.edu>
	* Ryan is Ryan Bradetich <rbrad@hpb50023.boi.hp.com>
 	* Stephan is Stephan Szabo <sszabo@megazone23.bigpanda.com>
	* Tatsuo is Tatsuo Ishii <t-ishii@sra.co.jp>
	* Thomas is Thomas Lockhart <lockhart@alumni.caltech.edu>
	* Tom is Tom Lane <tgl@sss.pgh.pa.us>
	* TomH is Tom I Helbekkmo <tih@Hamartun.Priv.NO>
	* Vadim is Vadim B. Mikheev <vadim4o@email.com>