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
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
TODO list for PostgreSQL
========================
Last updated: Thu Sep 5 12:32:58 EDT 2002
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.3 release.
Bracketed items "[]" have more detailed.
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)
o allow replication over unreliable or non-persistent links
o http://gborg.postgresql.org/project/pgreplication/projdisplay.php
* Point-in-time data recovery using backup and write-ahead log
Reporting
=========
* Allow elog() to return error codes, module name, file name, line
number, not just messages (Peter E)
* Add error codes (Peter E)
* Make error messages more consistent [error]
* -Change DEBUG startup tag to LOG (Bruce)
* Show location of syntax error in query [yacc]
* -Add getpid() function to backend
* -Allow logging of query durations
Permissions
===========
* -Improve control over user privileges, including table creation
* -Allow user/group names to be specified directly in pg_hba.conf (Bruce)
* -Add PGPASSWORDFILE environment variable or ~/.pgpass to store
user/host/password combinations
* -Allow permissions for functions (Peter E)
* -Allow object creation to be disabled for specific users
Administration
==============
* Incremental backups
* -Make it easier to create a database owned by someone who can't createdb,
perhaps CREATE DATABASE dbname WITH OWNER = "user" (Gavin)
* -Make equals sign optional in CREATE DATABASE WITH param = 'val'
* Remove unreferenced table files and temp tables during database vacuum
or postmaster startup (Bruce)
* Remove behavior of postmaster -o after making postmaster/postgres
flags unique
* -Prevent SIGHUP and 'pg_ctl reload' from changing command line
specified parameters to postgresql.conf defaults (Peter E)
* Allow easy display of usernames in a group
* Allow configuration files to be specified in a different directory
* -Reserve last few process slots for super-user if max_connections reached
* -Add GUC parameter to print queries that generate errors
Data Types
==========
* -Add domain capability (Rod Taylor)
* Add IPv6 capability to INET/CIDR types
* Remove Money type, add money formatting for decimal type
* -SELECT cash_out(2) crashes because of opaque
* -Declare typein/out functions in pg_proc with a special "C string" data type
* -Functions returning sets do not totally work
* 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)
* -Add GUC parameter for DATESTYLE
* Allow INET subnet tests using non-constants
* -Allow bytea to handle LIKE with non-TEXT patterns
* to_char(0,'FM999.99') returns a period, to_char(1,'FM999.99') does not
* CONVERSION
o -Store binary-compatible type information in the system
o Allow better handling of numeric constants, type conversion
[typeconv]
* ARRAYS
o Allow nulls in arrays
o Allow arrays to be ORDER'ed
o -Ensure we have array-eq operators for every built-in array type
o Support construction of array result values in expressions
* BINARY DATA
o Improve vacuum of large objects, like /contrib/vacuumlo
o Add security checking for large objects
o Make file in/out interface for TOAST columns, similar to large object
interface (force out-of-line storage and no compression)
o Auto-delete large objects when referencing row is deleted
Multi-Language 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
* Improve Unicode combined character handling
* Optimize locale to have minimal performance impact when not used (Peter E)
* Add octet_length_server() and octet_length_client() (Thomas, Tatsuo)
* 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
Views / Rules
=============
* Automatically create rules on views so they are updateable, per SQL92 [view]
* Add the functionality for WITH CHECK OPTION clause of CREATE VIEW
* Allow NOTIFY in rules involving conditionals
* Have views on temporary tables exist in the temporary namespace
* Move psql backslash information into views
* Allow RULE recompilation
* -Remove brackets as multi-statement rule grouping, must use parens (Bruce)
* Prevent aggregates from being used in rule WHERE clauses
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]
* UNIQUE INDEX on base column not honored on inserts from inherited table
INSERT INTO inherit_table (unique_index_col) VALUES (dup) should fail
[inheritance]
* -Allow UPDATE/DELETE on inherited table
* Add UNIQUE capability to non-btree indexes
* Add btree index support for reltime, tinterval, regproc
* 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
* 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
* -Add deleted bit to index tuples to reduce heap access
* Prevent index uniqueness checks when UPDATE does not modifying column
* Use bitmaps to fetch heap pages in sequential order [performance]
* Use bitmaps to combine existing indexes [performance]
* Improve handling of index scans for NULL
* Allow SELECT * FROM tab WHERE int2col = 4 to use int2col index, int8,
float4, numeric/decimal too [optimizer]
* Add FILLFACTOR to btree index creation
* Improve concurrency in GIST
* Improve concurrency of hash indexes (Neil Conway)
* -Test hash index performance and discourage usage
Commands
========
* -Add SIMILAR TO to allow character classes, 'pg_[a-c]%'
* Add BETWEEN ASYMMETRIC/SYMMETRIC (Christopher)
* -Remove LIMIT #,# and force use LIMIT and OFFSET clauses in 7.3 (Bruce)
* Allow LIMIT/OFFSET to use expressions
* -Disallow TRUNCATE on tables that are involved in referential constraints
* -Add OR REPLACE clauses to non-FUNCTION object creation
* CREATE TABLE AS can not determine column lengths from expressions [atttypmod]
* Allow UPDATE to handle complex aggregates [update]
* -Prevent create/drop scripts from allowing extra args (Bruce)
* 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 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
* ALTER
o ALTER TABLE ADD COLUMN does not honor DEFAULT and non-CHECK CONSTRAINT
o -Add ALTER TABLE DROP COLUMN feature
o -Add ALTER TABLE DROP non-CHECK CONSTRAINT
o -ALTER TABLE ADD PRIMARY KEY (Tom)
o -ALTER TABLE ADD UNIQUE (Tom)
o -ALTER TABLE ALTER COLUMN SET/DROP NOT NULL (Christopher)
o ALTER TABLE ADD COLUMN column DEFAULT should fill existing
rows with DEFAULT value
o ALTER TABLE ADD COLUMN column SERIAL doesn't create sequence because
of the item above
o -Have ALTER TABLE OWNER change all dependant objects like indexes
o Add ALTER TABLE tab SET WITHOUT OIDS
* CLUSTER
o -Cluster all tables at once using pg_index.indisclustered set during
previous CLUSTER
o -Prevent loss of indexes, permissions, inheritance
o Automatically maintain clustering on a table
o Allow CLUSTER to cluster all tables, remove clusterdb
* COPY
o -Allow specification of column names
o Allow dump/load of CSV format
o -Change syntax to WITH DELIMITER, (keep old syntax around?)
o Allow COPY to report error lines and continue; optionally
allow error codes to be specified; requires savepoints or can
not be run in a multi-statement transaction
o -Generate failure on short COPY lines rather than pad NULLs
* CURSOR
o Allow BINARY option to SELECT, just like DECLARE
o MOVE 0 should not move to end of cursor
o Allow UPDATE/DELETE WHERE CURRENT OF cursor using per-cursor tid
stored in the backend
o Prevent DROP of table being referenced by our own open cursor
o Allow cursors outside transactions [cursor]
* INSERT
o Allow INSERT/UPDATE of system-generated oid value for a row
o Allow INSERT INTO tab (col1, ..) VALUES (val1, ..), (val2, ..)
o -Allow INSERT INTO my_table VALUES (a, b, c, DEFAULT, x, y, z, ...)
o -Disallow missing columns in INSERT ... (col) VALUES, per ANSI
o Allow INSERT/UPDATE ... RETURNING new.col or old.col; handle
RULE cases (Philip)
* SHOW/SET
o -Add command to display locks
o -Add SET or BEGIN timeout parameter to cancel query
o Add SET REAL_FORMAT and SET DOUBLE_PRECISION_FORMAT using printf args
o -Remove SET KSQO option now that OR processing is improved (Bruce)
o Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM
ANALYZE, and CLUSTER
o -Add SHOW command to see locale
o -Allow SHOW to output as a query result, like EXPLAIN
o -Abort all SET changes made in an aborted transaction
o Add SET SCHEMA
* SERVER-SIDE LANGUAGES
o Allow PL/PgSQL's RAISE function to take expressions
o -Fix PL/PgSQL to handle quoted mixed-case identifiers
o Change PL/PgSQL to use palloc() instead of malloc()
o Add untrusted version of plpython
o Allow Java server-side programming, http://pljava.sourceforge.net
[java]
o Fix problems with complex temporary table creation/destruction
without using PL/PgSQL EXECUTE, needs cache prevention/invalidation
o Fix PL/pgSQL RENAME to work on variables other than OLD/NEW
o Improve PL/PgSQL exception handling
o Allow parameters to be specified by name and type during
definition
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 PL/PgSQL PROCEDURES that can return multiple values
o Add table function support to pltcl, plperl, plpython
o Make PL/PgSQL %TYPE schema-aware
Clients
=======
* -Have pg_dump use LEFT OUTER JOIN in multi-table SELECTs
or multiple SELECTS to avoid bad system catalog entries
* -Have pg_dump -C dump database location and encoding information
* -Allow psql \d to show foreign keys
* -Allow psql \d to show temporary table structure (Tom)
* Allow psql to show transaction status if backend protocol changes made
* Add XML interface: psql, pg_dump, COPY, separate server (?)
* -Have pg_dump use ADD PRIMARY KEY after COPY, for performance (Neil Conway)
* JDBC
o Comprehensive test suite. This may be available already.
o -Updateable resultSet
o JDBC-standard BLOB support
o Error Codes (pending backend implementation)
o Support both 'make' and 'ant'
o Fix LargeObject API to handle OIDs as unsigned ints
o -Implement cancel() method on Statement
o Use cursors implicitly to avoid large results (see setCursorName())
o -Add support for CallableStatements
o Add LISTEN/NOTIFY support to the JDBC driver (Barry)
o -Compile under jdk 1.4
* ECPG
o Implement set descriptor, using descriptor
o Make casts work in variable initializations
o Implement SQLDA
o Allow multi-threaded use of SQLCA
o Solve cardinality > 1 for input descriptors / variables
o Understand structure definitions outside a declare section
o sqlwarn[6] should be 'W' if the PRECISION or SCALE value specified
o Improve error handling
o Allow :var[:index] or :var[<integer>] as cvariable for an array var
o Add a semantic check level, e.g. check if a table really exists
o Fix nested C comments
o Add SQLSTATE
o fix handling of DB attributes that are arrays
Referential Integrity
=====================
* Add MATCH PARTIAL referential integrity [foreign]
* 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
* -Allow user to control trigger firing order (Tom)
* -Add ALTER TRIGGER ... RENAME
* Change foreign key constraint for array -> element to mean element
in array
* -Fix foreign key constraints to not error on intermediate db states (Stephan)
* Allow DEFERRABLE UNIQUE constraints
* Allow triggers to be disabled [trigger]
Dependency Checking
===================
* -Add pg_depend table for dependency recording; use sysrelid, oid,
depend_sysrelid, depend_oid, name
* -Auto-destroy sequence on DROP of table with SERIAL; perhaps a separate
SERIAL type
* -Prevent column dropping if column is used by foreign key
* -Propagate column or table renaming to foreign key constraints
* -Automatically drop constraints/functions when object is dropped
* -Make foreign key constraints clearer in dump file
* -Make other constraints clearer in dump file
* -Make foreign keys easier to identify
* Flush cached query plans when their underlying catalog data changes
* Use dependency information to dump data in proper order
Transactions
============
* -Allow autocommit so always in a transaction block
* Overhaul bufmgr/lockmgr/transaction manager
* Allow savepoints / nested transactions [transactions]
Exotic Features
===============
* Add sql3 recursive unions
* Add the concept of dataspaces/tablespaces [tablespaces]
* -Add SQL92 schemas (Tom)
* Allow queries across multiple databases [crossdb]
* Add pre-parsing phase that converts non-ANSI features to supported features
* Allow plug-in modules to emulate features from other databases
* SQL*Net listener that makes PostgreSQL appear as an Oracle database
to clients
PERFORMANCE
===========
Fsync
=====
* Delay fsync() when other backends are about to commit too [fsync]
o Determine optimal commit_delay value
* Determine optimal fdatasync/fsync, O_SYNC/O_DSYNC options
o Allow multiple blocks to be written to WAL with one write()
Cache
=====
* -Cache most recent query plan(s) (Neil) [prepare]
* Shared catalog cache, reduce lseek()'s by caching table size in shared area
* Add free-behind capability for large sequential scans (Bruce)
* Allow binding query args over FE/BE protocol
* Consider use of open/fcntl(O_DIRECT) to minimize OS caching
* Make blind writes go through the file descriptor cache
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]
* Provide automatic running of vacuum in the background (Tom)
* Allow free space map to be auto-sized or warn when it is too small
Locking
=======
* Make locking of shared data structures more fine-grained
* Add code to detect an SMP machine and handle spinlocks accordingly
from distributted.net, http://www1.distributed.net/source,
in client/common/cpucheck.cpp
* Research use of sched_yield() for spinlock acquisition failure
Startup Time
============
* Experiment with multi-threaded backend [thread]
* Add connection pooling [pool]
* Allow persistent backends [persistent]
* Create a transaction processor to aid in persistent connections and
connection pooling
* Do listen() in postmaster and accept() in pre-forked backend
* Have pre-forked backend pre-connect to last requested database or pass
file descriptor to backend pre-forked for matching database
* -Cache system catalog information in per-database files (Tom)
Write-Ahead Log
===============
* Have after-change WAL write()'s write only modified data to kernel
* Reduce number of after-change WAL writes; they exist only to gaurd against
partial page writes [wal]
* Turn off after-change writes if fsync is disabled (?)
* Add WAL index reliability improvement to non-btree indexes
* -Reorder postgresql.conf WAL items in order of importance (Bruce)
* -Remove wal_files postgresql.conf option because WAL files are now recycled
* Find proper defaults for postgresql.conf WAL entries
* Add checkpoint_min_warning postgresql.conf option to warn about checkpoints
that are too frequent
* Allow xlog directory location to be specified during initdb, perhaps
using symlinks
Optimizer / Executor
====================
* 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)
* Add hash for evaluating GROUP BY aggregates
* -Nested FULL OUTER JOINs don't work (Tom)
* Allow merge and hash joins on expressions not just simple variables (Tom)
* -Add new pg_proc cachable settings to specify whether function can be
evaluated only once or once per query
* -Change FIXED_CHAR_SEL to 0.20 from 0.04 to give better selectivity (Bruce)
* Make IN/NOT IN have similar performance to EXISTS/NOT EXISTS [exists]
* 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 Conway)
* Add utility to compute accurate random_page_cost value
* Improve ability to display optimizer analysis using OPTIMIZER_DEBUG
* Use CHECK constraints to improve optimizer decisions
Miscellaneous
=============
* Do async I/O for faster random 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 or to write WAL files (?) [mmap]
* Improve caching of attribute offsets when NULLs exist in the row
* -Add Intimate Shared Memory(ISM) for Solaris
* Add documentation to lock shared memory into RAM for each OS, if possible
* -Use faster flex flags for performance improvement (Peter E)
* -Add BSD-licensed qsort() for Solaris
Source Code
===========
* Add use of 'const' for variables in source tree
* -Fix problems with libpq non-blocking/async code
* -Make sure all block numbers are unsigned to increase maximum table size
* -Merge LockMethodCtl and LockMethodTable into one shared structure (Bruce)
* -HOLDER/HOLDERTAB rename to PROCLOCK/PROCLOCKTAG (Bruce)
* -Remove LockMethodTable.prio field, not used (Bruce)
* Rename some /contrib modules from pg* to pg_*
* 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
* -Make one version of simple_prompt() in code (Bruce, Tom)
* -Compile in syslog functionaility by default (Tatsuo)
* Modify regression tests to prevent failures do to minor numeric rounding
* Add OpenBSD's getpeereid() call for local socket authentication (Bruce)
* Improve access-permissions check on data directory in Cygwin (Tom)
* -Report failure to find readline or zlib at end of configure run
* Add --port flag to regression tests
* -Increase identifier length (NAMEDATALEN) if small performance hit,
* -Increase maximum number of function parameters if little wasted space
* Add documentation for perl, including mention of DBI/DBD perl location
* Add optional CRC checksum to heap and index pages
* Change representation of whole-tuple parameters to functions
* Clarify use of 'application' and 'command' tags in SGML docs
* Better document ability to build only certain interfaces (Marc)
* Remove or relicense modules that are not under the BSD license, if possible
* Remove memory/file descriptor freeing befor elog(ERROR) (Bruce)
* Create native Win32 port [win32]
* Fix glibc's mktime() to handle pre-1970's dates
---------------------------------------------------------------------------
Developers who have claimed items are:
--------------------------------------
* Barry is Barry Lind <barry@xythos.com>
* Billy is Billy G. Allie <Bill.Allie@mug.org>
* Bruce is Bruce Momjian <pgman@candle.pha.pa.us>
* Christopher is Christopher Kings-Lynne <chriskl@familyhealth.com.au>
* D'Arcy is D'Arcy J.M. Cain <darcy@druid.net>
* Dave is Dave Cramer <dave@fastcrypt.com>
* Edmund is Edmund Mergl <E.Mergl@bawue.de>
* Gavin Sherry <swm@linuxworld.com.au>
* Hiroshi is Hiroshi Inoue <Inoue@tpf.co.jp>
* Karel is Karel Zak <zakkr@zf.jcu.cz>
* Jan is Jan Wieck <wieck@sapserv.debis.de>
* Liam is Liam Stewart <liams@redhat.com>
* Marc is Marc Fournier <scrappy@hub.org>
* Mark is Mark Hollomon <mhh@mindspring.com>
* Marko is Marko Kreen <marko@l-t.ee>
* Michael is Michael Meskes <meskes@postgresql.org>
* Neil is Neil Conway <nconway@klamath.dyndns.org>
* Oleg is Oleg Bartunov <oleg@sai.msu.su>
* Peter M 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>
* Rod is Rod Taylor <rbt@zort.ca>
* 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@fourpalms.org>
* 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>