Remove completed items:
< * -Allow limits on per-db/role connections 43d41 < * -Prevent dropping user that still owns objects, or auto-drop the objects 49d46 < * -Add the client IP address and port to pg_stat_activity < * -Add session start time and last statement time to pg_stat_activity < * -Add a function that returns the start time of the postmaster 230d224 < o -Allow MIN()/MAX() on arrays < o -Modify array literal representation to handle array index lower bound < of other than one 253d244 < * -Add function to return compressed length of TOAST data values < * -Prevent to_char() on interval from returning meaningless values < < For example, to_char('1 month', 'mon') is meaningless. Basically, < most date-related parameters to to_char() are meaningless for < intervals because interval is not anchored to a date. < < * -Have views on temporary tables exist in the temporary namespace < * -Allow temporary views on non-temporary tables 329d311 < * -Add BETWEEN SYMMETRIC/ASYMMETRIC < * -Add E'' escape string marker so eventually ordinary strings can treat < backslashes literally, for portability < < * -Allow additional tables to be specified in DELETE for joins < < UPDATE already allows this (UPDATE...FROM) but we need similar < functionality in DELETE. It's been agreed that the keyword should < be USING, to avoid anything as confusing as DELETE FROM a FROM b. < 341d313 < * -Allow REINDEX to rebuild all database indexes < * -Add an option to automatically use savepoints for each statement in a < multi-statement transaction. < < When enabled, this would allow errors in multi-statement transactions < to be automatically ignored. < 426d391 < o -Allow FOR UPDATE queries to do NOWAIT locks 473d437 < o -Allow COPY to understand \x as a hex byte < o -Allow COPY to optionally include column headings in the first line < o -Allow COPY FROM ... CSV to interpret newlines and carriage < returns in data 525d485 < o -Have SHOW ALL show descriptions for server-side variables < o -Allow PL/PgSQL's RAISE function to take expressions < < Currently only constants are supported. < < o -Change PL/PgSQL to use palloc() instead of malloc() 545d499 < o -Allow PL/pgSQL EXECUTE query_var INTO record_var; 550d503 < o -Pass arrays natively instead of as text between plperl and postgres 598d550 < o -Add dumping and restoring of LOB comments 638d589 < * -Implement shared row locks and use them in RI triggers 642d592 < * -Allow triggers to be disabled < * -Add two-phase commit < < < * -Prevent inherited tables from expanding temporary subtables of other < sessions < * -Use indexes for MIN() and MAX() < < MIN/MAX queries can already be rewritten as SELECT col FROM tab ORDER < BY col {DESC} LIMIT 1. Completing this item involves doing this < transformation automatically. < < * -Use index to restrict rows returned by multi-key index when used with < non-consecutive keys to reduce heap accesses < < For an index on col1,col2,col3, and a WHERE clause of col1 = 5 and < col3 = 9, spin though the index checking for col1 and col3 matches, < rather than just col1; also called skip-scanning. < < * -Fetch heap pages matching index entries in sequential order < < Rather than randomly accessing heap pages based on index entries, mark < heap pages needing access in a bitmap and do the lookups in sequential < order. Another method would be to sort heap ctids matching the index < before accessing the heap rows. < < * -Allow non-bitmap indexes to be combined by creating bitmaps in memory < < This feature allows separate indexes to be ANDed or ORed together. This < is particularly useful for data warehousing applications that need to < query the database in an many permutations. This feature scans an index < and creates an in-memory bitmap, and allows that bitmap to be combined < with other bitmap created in a similar way. The bitmap can either index < all TIDs, or be lossy, meaning it records just page numbers and each < page tuple has to be checked for validity in a separate pass. < < * -Fix incorrect rtree results due to wrong assumptions about "over" < operator semantics 782d694 < o -Add concurrency to GIST 813d724 < * -Allow multiple blocks to be written to WAL with one write() < * -Consider use of open/fcntl(O_DIRECT) to minimize OS caching, < for WAL writes < < O_DIRECT doesn't have the same media write guarantees as fsync, so it < is in addition to the fsync method, not in place of it. < < * -Cache last known per-tuple offsets to speed long tuple access < * -Allow the size of the buffer cache used by temporary objects to be < specified as a GUC variable < < Larger local buffer cache sizes requires more efficient handling of < local cache lookups. < < * -Improve the background writer < < Allow the background writer to more efficiently write dirty buffers < from the end of the LRU cache and use a clock sweep algorithm to < write other dirty buffers to reduced checkpoint I/O < 897d788 < * -Add a warning when the free space map is too small 917d807 < o -Move into the backend code < * -Make locking of shared data structures more fine-grained < < This requires that more locks be acquired but this would reduce lock < contention, improving concurrency. < < * -Improve SMP performance on i386 machines < < i386-based SMP machines can generate excessive context switching < caused by lock failure in high concurrency situations. This may be < caused by CPU cache line invalidation inefficiencies. < 979d857 < o -Add ability to turn off full page writes < * -Eliminate WAL logging for CREATE TABLE AS when not doing WAL archiving < * -Change WAL to use 32-bit CRC, for performance reasons < < * -Use CHECK constraints to influence optimizer decisions < < CHECK constraints contain information about the distribution of values < within the table. This is also useful for implementing subtables where < a tables content is distributed across several subtables. < 1045d913 < * -ANALYZE should record a pg_statistic entry for an all-NULL column 1099d966 < * -Remove kerberos4 from source tree 1103d969 < * -Make src/port/snprintf.c thread-safe 1118d983 < * -Add C code on Unix to copy directories for use in creating new databases 1133d997 < o -Improve dlerror() reporting string
This commit is contained in:
parent
9f60468797
commit
88d7b711a0
138
doc/TODO
138
doc/TODO
@ -2,7 +2,7 @@
|
||||
PostgreSQL TODO List
|
||||
====================
|
||||
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
||||
Last updated: Fri Aug 26 14:52:30 EDT 2005
|
||||
Last updated: Fri Aug 26 14:59:39 EDT 2005
|
||||
|
||||
The most recent version of this document can be viewed at
|
||||
http://www.postgresql.org/docs/faqs.TODO.html.
|
||||
@ -22,7 +22,6 @@ Administration
|
||||
|
||||
* %Remove behavior of postmaster -o after making postmaster/postgres
|
||||
flags unique
|
||||
* -Allow limits on per-db/role connections
|
||||
* %Allow pooled connections to list all prepared queries
|
||||
|
||||
This would allow an application inheriting a pooled connection to know
|
||||
@ -40,13 +39,11 @@ Administration
|
||||
it is unknown whether other problems exist. This item mostly
|
||||
requires additional testing rather than of writing any new code.
|
||||
|
||||
* -Prevent dropping user that still owns objects, or auto-drop the objects
|
||||
* %Set proper permissions on non-system schemas during db creation
|
||||
|
||||
Currently all schemas are owned by the super-user because they are
|
||||
copied from the template1 database.
|
||||
|
||||
* -Add the client IP address and port to pg_stat_activity
|
||||
* Support table partitioning that allows a single table to be stored
|
||||
in subtables that are partitioned based on the primary key or a WHERE
|
||||
clause
|
||||
@ -156,8 +153,6 @@ Monitoring
|
||||
a database for analysis.
|
||||
|
||||
* %Add ability to monitor the use of temporary sort files
|
||||
* -Add session start time and last statement time to pg_stat_activity
|
||||
* -Add a function that returns the start time of the postmaster
|
||||
* Allow server logs to be remotely read and removed using SQL commands
|
||||
|
||||
|
||||
@ -227,11 +222,8 @@ Data Types
|
||||
* Arrays
|
||||
|
||||
o Allow NULLs in arrays
|
||||
o -Allow MIN()/MAX() on arrays
|
||||
o Delay resolution of array expression's data type so assignment
|
||||
coercion can be performed on empty array expressions
|
||||
o -Modify array literal representation to handle array index lower bound
|
||||
of other than one
|
||||
|
||||
|
||||
* Binary Data
|
||||
@ -250,7 +242,6 @@ Data Types
|
||||
Functions
|
||||
=========
|
||||
|
||||
* -Add function to return compressed length of TOAST data values
|
||||
* Allow INET subnet tests using non-constants to be indexed
|
||||
* Add transaction_timestamp(), statement_timestamp(), clock_timestamp()
|
||||
functionality
|
||||
@ -277,12 +268,6 @@ Functions
|
||||
o to_char(INTERVAL '43 hours 20 minutes', 'WK:DD:HR:MI') => 0:1:19:20
|
||||
o to_char(INTERVAL '3 years 5 months','MM') => 41
|
||||
|
||||
* -Prevent to_char() on interval from returning meaningless values
|
||||
|
||||
For example, to_char('1 month', 'mon') is meaningless. Basically,
|
||||
most date-related parameters to to_char() are meaningless for
|
||||
intervals because interval is not anchored to a date.
|
||||
|
||||
* Add sleep() function, remove from regress.c
|
||||
|
||||
|
||||
@ -318,27 +303,14 @@ Views / Rules
|
||||
|
||||
* 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
|
||||
* -Allow temporary views on non-temporary tables
|
||||
* Allow VIEW/RULE recompilation when the underlying tables change
|
||||
|
||||
|
||||
SQL Commands
|
||||
============
|
||||
|
||||
* -Add BETWEEN SYMMETRIC/ASYMMETRIC
|
||||
* Change LIMIT/OFFSET and FETCH/MOVE to use int8
|
||||
* -Add E'' escape string marker so eventually ordinary strings can treat
|
||||
backslashes literally, for portability
|
||||
|
||||
* -Allow additional tables to be specified in DELETE for joins
|
||||
|
||||
UPDATE already allows this (UPDATE...FROM) but we need similar
|
||||
functionality in DELETE. It's been agreed that the keyword should
|
||||
be USING, to avoid anything as confusing as DELETE FROM a FROM b.
|
||||
|
||||
* Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT
|
||||
* -Allow REINDEX to rebuild all database indexes
|
||||
* Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY
|
||||
* %Allow SET CONSTRAINTS to be qualified by schema/table name
|
||||
* %Allow TRUNCATE ... CASCADE/RESTRICT
|
||||
@ -379,12 +351,6 @@ SQL Commands
|
||||
creation
|
||||
* %Add COMMENT ON for all cluster global objects (roles, databases
|
||||
and tablespaces)
|
||||
* -Add an option to automatically use savepoints for each statement in a
|
||||
multi-statement transaction.
|
||||
|
||||
When enabled, this would allow errors in multi-statement transactions
|
||||
to be automatically ignored.
|
||||
|
||||
* %Make row-wise comparisons work per SQL spec
|
||||
* Add RESET CONNECTION command to reset all session state
|
||||
|
||||
@ -423,7 +389,6 @@ SQL Commands
|
||||
|
||||
o Allow UPDATE tab SET ROW (col, ...) = (...) for updating multiple
|
||||
columns
|
||||
o -Allow FOR UPDATE queries to do NOWAIT locks
|
||||
|
||||
|
||||
* ALTER
|
||||
@ -470,11 +435,7 @@ SQL Commands
|
||||
This requires the use of a savepoint before each COPY line is
|
||||
processed, with ROLLBACK on COPY failure.
|
||||
|
||||
o -Allow COPY to understand \x as a hex byte
|
||||
o %Have COPY return the number of rows loaded/unloaded?
|
||||
o -Allow COPY to optionally include column headings in the first line
|
||||
o -Allow COPY FROM ... CSV to interpret newlines and carriage
|
||||
returns in data
|
||||
|
||||
|
||||
* GRANT/REVOKE
|
||||
@ -522,7 +483,6 @@ SQL Commands
|
||||
|
||||
* SHOW/SET
|
||||
|
||||
o -Have SHOW ALL show descriptions for server-side variables
|
||||
o Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM
|
||||
ANALYZE, and CLUSTER
|
||||
o Add SET PATH for schemas?
|
||||
@ -532,22 +492,15 @@ SQL Commands
|
||||
|
||||
* Server-Side Languages
|
||||
|
||||
o -Allow PL/PgSQL's RAISE function to take expressions
|
||||
|
||||
Currently only constants are supported.
|
||||
|
||||
o -Change PL/PgSQL to use palloc() instead of malloc()
|
||||
o Fix PL/pgSQL RENAME to work on variables other than OLD/NEW
|
||||
o Allow function parameters to be passed by name,
|
||||
get_employee_salary(emp_id => 12345, tax_year => 2001)
|
||||
o Add Oracle-style packages
|
||||
o Add table function support to pltcl, plpython
|
||||
o -Allow PL/pgSQL EXECUTE query_var INTO record_var;
|
||||
o Add capability to create and call PROCEDURES
|
||||
o Allow PL/pgSQL to handle %TYPE arrays, e.g. tab.col%TYPE[]
|
||||
o Allow function argument names to be queries from PL/PgSQL
|
||||
o Add MOVE to PL/pgSQL
|
||||
o -Pass arrays natively instead of as text between plperl and postgres
|
||||
o Add support for polymorphic arguments and return types to
|
||||
languages other than PL/PgSQL
|
||||
o Add support for OUT and INOUT parameters to languages other
|
||||
@ -595,7 +548,6 @@ Clients
|
||||
o %Add dumping of comments on index columns
|
||||
o %Replace crude DELETE FROM method of pg_dumpall --clean for
|
||||
cleaning of roles with separate DROP commands
|
||||
o -Add dumping and restoring of LOB comments
|
||||
o Stop dumping CASCADE on DROP TYPE commands in clean mode
|
||||
o %Add full object name to the tag field. eg. for operators we need
|
||||
'=(integer, integer)', instead of just '='.
|
||||
@ -635,11 +587,9 @@ Referential Integrity
|
||||
memory. This could exhaust memory for very large trigger queues.
|
||||
This item involves dumping large queues into files.
|
||||
|
||||
* -Implement shared row locks and use them in RI triggers
|
||||
* Change foreign key constraint for array -> element to mean element
|
||||
in array?
|
||||
* Allow DEFERRABLE UNIQUE constraints?
|
||||
* -Allow triggers to be disabled
|
||||
* Allow triggers to be disabled in only the current session.
|
||||
|
||||
This is currently possible by starting a multi-statement transaction,
|
||||
@ -693,9 +643,6 @@ Exotic Features
|
||||
|
||||
This can be done using dblink and two-phase commit.
|
||||
|
||||
* -Add two-phase commit
|
||||
|
||||
|
||||
* Add the features of packages
|
||||
|
||||
o Make private objects accessable only to objects in the same schema
|
||||
@ -717,44 +664,12 @@ Indexes
|
||||
that can span more than one table.
|
||||
|
||||
* Allow SELECT ... FOR UPDATE on inherited tables
|
||||
* -Prevent inherited tables from expanding temporary subtables of other
|
||||
sessions
|
||||
* Add UNIQUE capability to non-btree indexes
|
||||
* -Use indexes for MIN() and MAX()
|
||||
|
||||
MIN/MAX queries can already be rewritten as SELECT col FROM tab ORDER
|
||||
BY col {DESC} LIMIT 1. Completing this item involves doing this
|
||||
transformation automatically.
|
||||
|
||||
* -Use index to restrict rows returned by multi-key index when used with
|
||||
non-consecutive keys to reduce heap accesses
|
||||
|
||||
For an index on col1,col2,col3, and a WHERE clause of col1 = 5 and
|
||||
col3 = 9, spin though the index checking for col1 and col3 matches,
|
||||
rather than just col1; also called skip-scanning.
|
||||
|
||||
* Prevent index uniqueness checks when UPDATE does not modify the column
|
||||
|
||||
Uniqueness (index) checks are done when updating a column even if the
|
||||
column is not modified by the UPDATE.
|
||||
|
||||
* -Fetch heap pages matching index entries in sequential order
|
||||
|
||||
Rather than randomly accessing heap pages based on index entries, mark
|
||||
heap pages needing access in a bitmap and do the lookups in sequential
|
||||
order. Another method would be to sort heap ctids matching the index
|
||||
before accessing the heap rows.
|
||||
|
||||
* -Allow non-bitmap indexes to be combined by creating bitmaps in memory
|
||||
|
||||
This feature allows separate indexes to be ANDed or ORed together. This
|
||||
is particularly useful for data warehousing applications that need to
|
||||
query the database in an many permutations. This feature scans an index
|
||||
and creates an in-memory bitmap, and allows that bitmap to be combined
|
||||
with other bitmap created in a similar way. The bitmap can either index
|
||||
all TIDs, or be lossy, meaning it records just page numbers and each
|
||||
page tuple has to be checked for validity in a separate pass.
|
||||
|
||||
* Allow the creation of on-disk bitmap indexes which can be quickly
|
||||
combined with other bitmap indexes
|
||||
|
||||
@ -770,8 +685,6 @@ Indexes
|
||||
one column or expression indexes, perhaps using per-index statistics
|
||||
* Add fillfactor to control reserved free space during index creation
|
||||
* Allow the creation of indexes with mixed ascending/descending specifiers
|
||||
* -Fix incorrect rtree results due to wrong assumptions about "over"
|
||||
operator semantics
|
||||
* Allow constraint_exclusion to work for UNIONs like it does for
|
||||
inheritance, and allow it to work for UPDATE and DELETE queries
|
||||
|
||||
@ -779,7 +692,6 @@ Indexes
|
||||
* GIST
|
||||
|
||||
o Add more GIST index support for geometric data types
|
||||
o -Add concurrency to GIST
|
||||
o Allow GIST indexes to create certain complex index types, like
|
||||
digital trees (see Aoki)
|
||||
|
||||
@ -810,7 +722,6 @@ Fsync
|
||||
Ideally this requires a separate test program that can be run
|
||||
at initdb time or optionally later.
|
||||
|
||||
* -Allow multiple blocks to be written to WAL with one write()
|
||||
* %Add an option to sync() before fsync()'ing checkpoint files
|
||||
* Add program to test if fsync has a delay compared to non-fsync
|
||||
|
||||
@ -826,13 +737,6 @@ Cache Usage
|
||||
backends that also have the file open, and the feature is not supported
|
||||
on all operating systems.
|
||||
|
||||
* -Consider use of open/fcntl(O_DIRECT) to minimize OS caching,
|
||||
for WAL writes
|
||||
|
||||
O_DIRECT doesn't have the same media write guarantees as fsync, so it
|
||||
is in addition to the fsync method, not in place of it.
|
||||
|
||||
* -Cache last known per-tuple offsets to speed long tuple access
|
||||
* Speed up COUNT(*)
|
||||
|
||||
We could use a fixed row count and a +/- count to follow MVCC
|
||||
@ -858,18 +762,6 @@ Cache Usage
|
||||
o Query execute plan
|
||||
o Query results
|
||||
|
||||
* -Allow the size of the buffer cache used by temporary objects to be
|
||||
specified as a GUC variable
|
||||
|
||||
Larger local buffer cache sizes requires more efficient handling of
|
||||
local cache lookups.
|
||||
|
||||
* -Improve the background writer
|
||||
|
||||
Allow the background writer to more efficiently write dirty buffers
|
||||
from the end of the LRU cache and use a clock sweep algorithm to
|
||||
write other dirty buffers to reduced checkpoint I/O
|
||||
|
||||
* Allow sequential scans to take advantage of other concurrent
|
||||
sequentiqal scans, also called "Synchronised Scanning"
|
||||
|
||||
@ -894,7 +786,6 @@ Vacuum
|
||||
write lock. However, the read lock promotion to write lock could lead
|
||||
to deadlock situations.
|
||||
|
||||
* -Add a warning when the free space map is too small
|
||||
* Maintain a map of recently-expired rows
|
||||
|
||||
This allows vacuum to target specific pages for possible free space
|
||||
@ -914,7 +805,6 @@ Vacuum
|
||||
|
||||
* Auto-vacuum
|
||||
|
||||
o -Move into the backend code
|
||||
o Use free-space map information to guide refilling
|
||||
o %Issue log message to suggest VACUUM FULL if a table is nearly
|
||||
empty?
|
||||
@ -925,11 +815,6 @@ Vacuum
|
||||
Locking
|
||||
=======
|
||||
|
||||
* -Make locking of shared data structures more fine-grained
|
||||
|
||||
This requires that more locks be acquired but this would reduce lock
|
||||
contention, improving concurrency.
|
||||
|
||||
* Add code to detect an SMP machine and handle spinlocks accordingly
|
||||
from distributted.net, http://www1.distributed.net/source,
|
||||
in client/common/cpucheck.cpp
|
||||
@ -938,12 +823,6 @@ Locking
|
||||
while on non-SMP machines, the backend should sleep so the process
|
||||
holding the lock can complete and release it.
|
||||
|
||||
* -Improve SMP performance on i386 machines
|
||||
|
||||
i386-based SMP machines can generate excessive context switching
|
||||
caused by lock failure in high concurrency situations. This may be
|
||||
caused by CPU cache line invalidation inefficiencies.
|
||||
|
||||
* Research use of sched_yield() for spinlock acquisition failure
|
||||
* Fix priority ordering of read and write light-weight locks (Neil)
|
||||
|
||||
@ -976,7 +855,6 @@ Write-Ahead Log
|
||||
partial page writes during recovery. These pages can also be
|
||||
eliminated from point-in-time archive files.
|
||||
|
||||
o -Add ability to turn off full page writes
|
||||
o When off, write CRC to WAL and check file system blocks
|
||||
on recovery
|
||||
|
||||
@ -1012,9 +890,6 @@ Write-Ahead Log
|
||||
remove the 'fsync' parameter (which results in an an inconsistent
|
||||
database) in favor of this capability.
|
||||
|
||||
* -Eliminate WAL logging for CREATE TABLE AS when not doing WAL archiving
|
||||
* -Change WAL to use 32-bit CRC, for performance reasons
|
||||
|
||||
|
||||
Optimizer / Executor
|
||||
====================
|
||||
@ -1032,17 +907,10 @@ Optimizer / Executor
|
||||
* Create utility to compute accurate random_page_cost value
|
||||
* Improve ability to display optimizer analysis using OPTIMIZER_DEBUG
|
||||
* Have EXPLAIN ANALYZE highlight poor optimizer estimates
|
||||
* -Use CHECK constraints to influence optimizer decisions
|
||||
|
||||
CHECK constraints contain information about the distribution of values
|
||||
within the table. This is also useful for implementing subtables where
|
||||
a tables content is distributed across several subtables.
|
||||
|
||||
* Consider using hash buckets to do DISTINCT, rather than sorting
|
||||
|
||||
This would be beneficial when there are few distinct values.
|
||||
|
||||
* -ANALYZE should record a pg_statistic entry for an all-NULL column
|
||||
* Log queries where the optimizer row estimates were dramatically
|
||||
different from the number of rows actually found?
|
||||
* Allow constraint_elimination to be automatically performed
|
||||
@ -1096,11 +964,9 @@ Source Code
|
||||
* %Promote debug_query_string into a server-side function current_query()
|
||||
* %Allow the identifier length to be increased via a configure option
|
||||
* Remove Win32 rename/unlink looping if unnecessary
|
||||
* -Remove kerberos4 from source tree
|
||||
* Allow cross-compiling by generating the zic database on the target system
|
||||
* Improve NLS maintenace of libpgport messages linked onto applications
|
||||
* Allow ecpg to work with MSVC and BCC
|
||||
* -Make src/port/snprintf.c thread-safe
|
||||
* Add xpath_array() to /contrib/xml2 to return results as an array
|
||||
* Allow building in directories containing spaces
|
||||
|
||||
@ -1115,7 +981,6 @@ Source Code
|
||||
spaces and then copy the install to a directory with spaces.
|
||||
|
||||
* Fix sgmltools so PDFs can be generated with bookmarks
|
||||
* -Add C code on Unix to copy directories for use in creating new databases
|
||||
* %Clean up compiler warnings (especially with gcc version 4)
|
||||
|
||||
|
||||
@ -1130,7 +995,6 @@ Source Code
|
||||
backslashes
|
||||
o Re-enable timezone output on log_line_prefix '%t' when a
|
||||
shorter timezone string is available
|
||||
o -Improve dlerror() reporting string
|
||||
o Fix problem with shared memory on the Win32 Terminal Server
|
||||
o %Add support for Unicode
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
<body bgcolor="#FFFFFF" text="#000000" link="#FF0000" vlink="#A00000" alink="#0000FF">
|
||||
<h1><a name="section_1">PostgreSQL TODO List</a></h1>
|
||||
<p>Current maintainer: Bruce Momjian (<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br/>
|
||||
Last updated: Fri Aug 26 14:52:30 EDT 2005
|
||||
Last updated: Fri Aug 26 14:59:39 EDT 2005
|
||||
</p>
|
||||
<p>The most recent version of this document can be viewed at<br/>
|
||||
<a href="http://www.postgresql.org/docs/faqs.TODO.html">http://www.postgresql.org/docs/faqs.TODO.html</a>.
|
||||
@ -27,7 +27,6 @@ first.
|
||||
<ul>
|
||||
<li>%Remove behavior of postmaster -o after making postmaster/postgres
|
||||
flags unique
|
||||
</li><li>-<em>Allow limits on per-db/role connections</em>
|
||||
</li><li>%Allow pooled connections to list all prepared queries
|
||||
<p> This would allow an application inheriting a pooled connection to know
|
||||
the queries prepared in the current session.
|
||||
@ -43,12 +42,10 @@ first.
|
||||
it is unknown whether other problems exist. This item mostly
|
||||
requires additional testing rather than of writing any new code.
|
||||
</p>
|
||||
</li><li>-<em>Prevent dropping user that still owns objects, or auto-drop the objects</em>
|
||||
</li><li>%Set proper permissions on non-system schemas during db creation
|
||||
<p> Currently all schemas are owned by the super-user because they are
|
||||
copied from the template1 database.
|
||||
</p>
|
||||
</li><li>-<em>Add the client IP address and port to pg_stat_activity</em>
|
||||
</li><li>Support table partitioning that allows a single table to be stored
|
||||
in subtables that are partitioned based on the primary key or a WHERE
|
||||
clause
|
||||
@ -144,8 +141,6 @@ first.
|
||||
a database for analysis.
|
||||
</p>
|
||||
</li><li>%Add ability to monitor the use of temporary sort files
|
||||
</li><li>-<em>Add session start time and last statement time to pg_stat_activity</em>
|
||||
</li><li>-<em>Add a function that returns the start time of the postmaster</em>
|
||||
</li><li>Allow server logs to be remotely read and removed using SQL commands
|
||||
</li></ul>
|
||||
<h1><a name="section_4">Data Types</a></h1>
|
||||
@ -212,11 +207,8 @@ first.
|
||||
</li><li>Arrays
|
||||
<ul>
|
||||
<li>Allow NULLs in arrays
|
||||
</li><li>-<em>Allow MIN()/MAX() on arrays</em>
|
||||
</li><li>Delay resolution of array expression's data type so assignment
|
||||
coercion can be performed on empty array expressions
|
||||
</li><li>-<em>Modify array literal representation to handle array index lower bound</em>
|
||||
of other than one
|
||||
</li></ul>
|
||||
</li><li>Binary Data
|
||||
<ul>
|
||||
@ -233,8 +225,7 @@ first.
|
||||
<h1><a name="section_5">Functions</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>-<em>Add function to return compressed length of TOAST data values</em>
|
||||
</li><li>Allow INET subnet tests using non-constants to be indexed
|
||||
<li>Allow INET subnet tests using non-constants to be indexed
|
||||
</li><li>Add transaction_timestamp(), statement_timestamp(), clock_timestamp()
|
||||
functionality
|
||||
<p> Current CURRENT_TIMESTAMP returns the start time of the current
|
||||
@ -259,11 +250,6 @@ first.
|
||||
</li><li>to_char(INTERVAL '43 hours 20 minutes', 'WK:DD:HR:MI') => 0:1:19:20
|
||||
</li><li>to_char(INTERVAL '3 years 5 months','MM') => 41
|
||||
</li></ul>
|
||||
</li><li>-<em>Prevent to_char() on interval from returning meaningless values</em>
|
||||
<p> For example, to_char('1 month', 'mon') is meaningless. Basically,
|
||||
most date-related parameters to to_char() are meaningless for
|
||||
intervals because interval is not anchored to a date.
|
||||
</p>
|
||||
</li><li>Add sleep() function, remove from regress.c
|
||||
</li></ul>
|
||||
<h1><a name="section_6">Multi-Language Support</a></h1>
|
||||
@ -294,24 +280,13 @@ first.
|
||||
</p>
|
||||
</li><li>Add the functionality for WITH CHECK OPTION clause of CREATE VIEW
|
||||
</li><li>Allow NOTIFY in rules involving conditionals
|
||||
</li><li>-<em>Have views on temporary tables exist in the temporary namespace</em>
|
||||
</li><li>-<em>Allow temporary views on non-temporary tables</em>
|
||||
</li><li>Allow VIEW/RULE recompilation when the underlying tables change
|
||||
</li></ul>
|
||||
<h1><a name="section_8">SQL Commands</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>-<em>Add BETWEEN SYMMETRIC/ASYMMETRIC</em>
|
||||
</li><li>Change LIMIT/OFFSET and FETCH/MOVE to use int8
|
||||
</li><li>-<em>Add E'' escape string marker so eventually ordinary strings can treat</em>
|
||||
backslashes literally, for portability
|
||||
</li><li>-<em>Allow additional tables to be specified in DELETE for joins</em>
|
||||
<p> UPDATE already allows this (UPDATE...FROM) but we need similar
|
||||
functionality in DELETE. It's been agreed that the keyword should
|
||||
be USING, to avoid anything as confusing as DELETE FROM a FROM b.
|
||||
</p>
|
||||
<li>Change LIMIT/OFFSET and FETCH/MOVE to use int8
|
||||
</li><li>Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT
|
||||
</li><li>-<em>Allow REINDEX to rebuild all database indexes</em>
|
||||
</li><li>Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY
|
||||
</li><li>%Allow SET CONSTRAINTS to be qualified by schema/table name
|
||||
</li><li>%Allow TRUNCATE ... CASCADE/RESTRICT
|
||||
@ -347,11 +322,6 @@ first.
|
||||
creation
|
||||
</li><li>%Add COMMENT ON for all cluster global objects (roles, databases
|
||||
and tablespaces)
|
||||
</li><li>-<em>Add an option to automatically use savepoints for each statement in a</em>
|
||||
multi-statement transaction.
|
||||
<p> When enabled, this would allow errors in multi-statement transactions
|
||||
to be automatically ignored.
|
||||
</p>
|
||||
</li><li>%Make row-wise comparisons work per SQL spec
|
||||
</li><li>Add RESET CONNECTION command to reset all session state
|
||||
<p> This would include resetting of all variables (RESET ALL), dropping of
|
||||
@ -384,7 +354,6 @@ first.
|
||||
</p>
|
||||
</li><li>Allow UPDATE tab SET ROW (col, ...) = (...) for updating multiple
|
||||
columns
|
||||
</li><li>-<em>Allow FOR UPDATE queries to do NOWAIT locks</em>
|
||||
</li></ul>
|
||||
</li><li>ALTER
|
||||
<ul>
|
||||
@ -425,11 +394,7 @@ first.
|
||||
<p> This requires the use of a savepoint before each COPY line is
|
||||
processed, with ROLLBACK on COPY failure.
|
||||
</p>
|
||||
</li><li>-<em>Allow COPY to understand \x as a hex byte</em>
|
||||
</li><li>%Have COPY return the number of rows loaded/unloaded?
|
||||
</li><li>-<em>Allow COPY to optionally include column headings in the first line</em>
|
||||
</li><li>-<em>Allow COPY FROM ... CSV to interpret newlines and carriage</em>
|
||||
returns in data
|
||||
</li></ul>
|
||||
</li><li>GRANT/REVOKE
|
||||
<ul>
|
||||
@ -472,8 +437,7 @@ first.
|
||||
</li></ul>
|
||||
</li><li>SHOW/SET
|
||||
<ul>
|
||||
<li>-<em>Have SHOW ALL show descriptions for server-side variables</em>
|
||||
</li><li>Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM
|
||||
<li>Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM
|
||||
ANALYZE, and CLUSTER
|
||||
</li><li>Add SET PATH for schemas?
|
||||
<p> This is basically the same as SET search_path.
|
||||
@ -481,21 +445,15 @@ first.
|
||||
</li></ul>
|
||||
</li><li>Server-Side Languages
|
||||
<ul>
|
||||
<li>-<em>Allow PL/PgSQL's RAISE function to take expressions</em>
|
||||
<p> Currently only constants are supported.
|
||||
</p>
|
||||
</li><li>-<em>Change PL/PgSQL to use palloc() instead of malloc()</em>
|
||||
</li><li>Fix PL/pgSQL RENAME to work on variables other than OLD/NEW
|
||||
<li>Fix PL/pgSQL RENAME to work on variables other than OLD/NEW
|
||||
</li><li>Allow function parameters to be passed by name,
|
||||
get_employee_salary(emp_id => 12345, tax_year => 2001)
|
||||
</li><li>Add Oracle-style packages
|
||||
</li><li>Add table function support to pltcl, plpython
|
||||
</li><li>-<em>Allow PL/pgSQL EXECUTE query_var INTO record_var;</em>
|
||||
</li><li>Add capability to create and call PROCEDURES
|
||||
</li><li>Allow PL/pgSQL to handle %TYPE arrays, e.g. tab.col%TYPE[<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?"></a>]
|
||||
</li><li>Allow function argument names to be queries from PL/PgSQL
|
||||
</li><li>Add MOVE to PL/pgSQL
|
||||
</li><li>-<em>Pass arrays natively instead of as text between plperl and postgres</em>
|
||||
</li><li>Add support for polymorphic arguments and return types to
|
||||
languages other than PL/PgSQL
|
||||
</li><li>Add support for OUT and INOUT parameters to languages other
|
||||
@ -539,7 +497,6 @@ first.
|
||||
</li><li>%Add dumping of comments on index columns
|
||||
</li><li>%Replace crude DELETE FROM method of pg_dumpall --clean for
|
||||
cleaning of roles with separate DROP commands
|
||||
</li><li>-<em>Add dumping and restoring of LOB comments</em>
|
||||
</li><li>Stop dumping CASCADE on DROP TYPE commands in clean mode
|
||||
</li><li>%Add full object name to the tag field. eg. for operators we need
|
||||
'=(integer, integer)', instead of just '='.
|
||||
@ -576,11 +533,9 @@ first.
|
||||
memory. This could exhaust memory for very large trigger queues.
|
||||
This item involves dumping large queues into files.
|
||||
</p>
|
||||
</li><li>-<em>Implement shared row locks and use them in RI triggers</em>
|
||||
</li><li>Change foreign key constraint for array -> element to mean element
|
||||
in array?
|
||||
</li><li>Allow DEFERRABLE UNIQUE constraints?
|
||||
</li><li>-<em>Allow triggers to be disabled</em>
|
||||
</li><li>Allow triggers to be disabled in only the current session.
|
||||
<p> This is currently possible by starting a multi-statement transaction,
|
||||
modifying the system tables, performing the desired SQL, restoring the
|
||||
@ -628,7 +583,6 @@ first.
|
||||
semantics
|
||||
<p> This can be done using dblink and two-phase commit.
|
||||
</p>
|
||||
</li><li>-<em>Add two-phase commit</em>
|
||||
</li><li>Add the features of packages
|
||||
<ul>
|
||||
<li>Make private objects accessable only to objects in the same schema
|
||||
@ -649,38 +603,10 @@ first.
|
||||
that can span more than one table.
|
||||
</p>
|
||||
</li><li>Allow SELECT ... FOR UPDATE on inherited tables
|
||||
</li><li>-<em>Prevent inherited tables from expanding temporary subtables of other</em>
|
||||
sessions
|
||||
</li><li>Add UNIQUE capability to non-btree indexes
|
||||
</li><li>-<em>Use indexes for MIN() and MAX()</em>
|
||||
<p> MIN/MAX queries can already be rewritten as SELECT col FROM tab ORDER
|
||||
BY col {DESC} LIMIT 1. Completing this item involves doing this
|
||||
transformation automatically.
|
||||
</p>
|
||||
</li><li>-<em>Use index to restrict rows returned by multi-key index when used with</em>
|
||||
non-consecutive keys to reduce heap accesses
|
||||
<p> For an index on col1,col2,col3, and a WHERE clause of col1 = 5 and
|
||||
col3 = 9, spin though the index checking for col1 and col3 matches,
|
||||
rather than just col1; also called skip-scanning.
|
||||
</p>
|
||||
</li><li>Prevent index uniqueness checks when UPDATE does not modify the column
|
||||
<p> Uniqueness (index) checks are done when updating a column even if the
|
||||
column is not modified by the UPDATE.
|
||||
</p>
|
||||
</li><li>-<em>Fetch heap pages matching index entries in sequential order</em>
|
||||
<p> Rather than randomly accessing heap pages based on index entries, mark
|
||||
heap pages needing access in a bitmap and do the lookups in sequential
|
||||
order. Another method would be to sort heap ctids matching the index
|
||||
before accessing the heap rows.
|
||||
</p>
|
||||
</li><li>-<em>Allow non-bitmap indexes to be combined by creating bitmaps in memory</em>
|
||||
<p> This feature allows separate indexes to be ANDed or ORed together. This
|
||||
is particularly useful for data warehousing applications that need to
|
||||
query the database in an many permutations. This feature scans an index
|
||||
and creates an in-memory bitmap, and allows that bitmap to be combined
|
||||
with other bitmap created in a similar way. The bitmap can either index
|
||||
all TIDs, or be lossy, meaning it records just page numbers and each
|
||||
page tuple has to be checked for validity in a separate pass.
|
||||
</p>
|
||||
</li><li>Allow the creation of on-disk bitmap indexes which can be quickly
|
||||
combined with other bitmap indexes
|
||||
@ -695,14 +621,11 @@ first.
|
||||
one column or expression indexes, perhaps using per-index statistics
|
||||
</li><li>Add fillfactor to control reserved free space during index creation
|
||||
</li><li>Allow the creation of indexes with mixed ascending/descending specifiers
|
||||
</li><li>-<em>Fix incorrect rtree results due to wrong assumptions about "over"</em>
|
||||
operator semantics
|
||||
</li><li>Allow constraint_exclusion to work for UNIONs like it does for
|
||||
inheritance, and allow it to work for UPDATE and DELETE queries
|
||||
</li><li>GIST
|
||||
<ul>
|
||||
<li>Add more GIST index support for geometric data types
|
||||
</li><li>-<em>Add concurrency to GIST</em>
|
||||
</li><li>Allow GIST indexes to create certain complex index types, like
|
||||
digital trees (see Aoki)
|
||||
</li></ul>
|
||||
@ -729,7 +652,6 @@ first.
|
||||
<p> Ideally this requires a separate test program that can be run
|
||||
at initdb time or optionally later.
|
||||
</p>
|
||||
</li><li>-<em>Allow multiple blocks to be written to WAL with one write()</em>
|
||||
</li><li>%Add an option to sync() before fsync()'ing checkpoint files
|
||||
</li><li>Add program to test if fsync has a delay compared to non-fsync
|
||||
</li></ul>
|
||||
@ -743,12 +665,6 @@ first.
|
||||
backends that also have the file open, and the feature is not supported
|
||||
on all operating systems.
|
||||
</p>
|
||||
</li><li>-<em>Consider use of open/fcntl(O_DIRECT) to minimize OS caching,</em>
|
||||
for WAL writes
|
||||
<p> O_DIRECT doesn't have the same media write guarantees as fsync, so it
|
||||
is in addition to the fsync method, not in place of it.
|
||||
</p>
|
||||
</li><li>-<em>Cache last known per-tuple offsets to speed long tuple access</em>
|
||||
</li><li>Speed up COUNT(*)
|
||||
<p> We could use a fixed row count and a +/- count to follow MVCC
|
||||
visibility rules, or a single cached value could be used and
|
||||
@ -771,16 +687,6 @@ first.
|
||||
</li><li>Query execute plan
|
||||
</li><li>Query results
|
||||
</li></ul>
|
||||
</li><li>-<em>Allow the size of the buffer cache used by temporary objects to be</em>
|
||||
specified as a GUC variable
|
||||
<p> Larger local buffer cache sizes requires more efficient handling of
|
||||
local cache lookups.
|
||||
</p>
|
||||
</li><li>-<em>Improve the background writer</em>
|
||||
<p> Allow the background writer to more efficiently write dirty buffers
|
||||
from the end of the LRU cache and use a clock sweep algorithm to
|
||||
write other dirty buffers to reduced checkpoint I/O
|
||||
</p>
|
||||
</li><li>Allow sequential scans to take advantage of other concurrent
|
||||
sequentiqal scans, also called "Synchronised Scanning"
|
||||
<p> One possible implementation is to start sequential scans from the lowest
|
||||
@ -802,7 +708,6 @@ first.
|
||||
write lock. However, the read lock promotion to write lock could lead
|
||||
to deadlock situations.
|
||||
</p>
|
||||
</li><li>-<em>Add a warning when the free space map is too small</em>
|
||||
</li><li>Maintain a map of recently-expired rows
|
||||
<p> This allows vacuum to target specific pages for possible free space
|
||||
without requiring a sequential scan.
|
||||
@ -818,8 +723,7 @@ first.
|
||||
</li><li>%Add system view to show free space map contents
|
||||
</li><li>Auto-vacuum
|
||||
<ul>
|
||||
<li>-<em>Move into the backend code</em>
|
||||
</li><li>Use free-space map information to guide refilling
|
||||
<li>Use free-space map information to guide refilling
|
||||
</li><li>%Issue log message to suggest VACUUM FULL if a table is nearly
|
||||
empty?
|
||||
</li><li>Improve xid wraparound detection by recording per-table rather
|
||||
@ -829,21 +733,12 @@ first.
|
||||
<h1><a name="section_17">Locking</a></h1>
|
||||
|
||||
<ul>
|
||||
<li>-<em>Make locking of shared data structures more fine-grained</em>
|
||||
<p> This requires that more locks be acquired but this would reduce lock
|
||||
contention, improving concurrency.
|
||||
</p>
|
||||
</li><li>Add code to detect an SMP machine and handle spinlocks accordingly
|
||||
<li>Add code to detect an SMP machine and handle spinlocks accordingly
|
||||
from distributted.net, <a href="http://www1.distributed.net/source">http://www1.distributed.net/source</a>,
|
||||
in client/common/cpucheck.cpp
|
||||
<p> On SMP machines, it is possible that locks might be released shortly,
|
||||
while on non-SMP machines, the backend should sleep so the process
|
||||
holding the lock can complete and release it.
|
||||
</p>
|
||||
</li><li>-<em>Improve SMP performance on i386 machines</em>
|
||||
<p> i386-based SMP machines can generate excessive context switching
|
||||
caused by lock failure in high concurrency situations. This may be
|
||||
caused by CPU cache line invalidation inefficiencies.
|
||||
</p>
|
||||
</li><li>Research use of sched_yield() for spinlock acquisition failure
|
||||
</li><li>Fix priority ordering of read and write light-weight locks (Neil)
|
||||
@ -874,8 +769,7 @@ first.
|
||||
eliminated from point-in-time archive files.
|
||||
</p>
|
||||
<ul>
|
||||
<li>-Add ability to turn off full page writes
|
||||
</li><li>When off, write CRC to WAL and check file system blocks
|
||||
<li>When off, write CRC to WAL and check file system blocks
|
||||
on recovery
|
||||
<p> If CRC check fails during recovery, remember the page in case
|
||||
a later CRC for that page properly matches.
|
||||
@ -907,8 +801,6 @@ first.
|
||||
remove the 'fsync' parameter (which results in an an inconsistent
|
||||
database) in favor of this capability.
|
||||
</p>
|
||||
</li><li>-<em>Eliminate WAL logging for CREATE TABLE AS when not doing WAL archiving</em>
|
||||
</li><li>-<em>Change WAL to use 32-bit CRC, for performance reasons</em>
|
||||
</li></ul>
|
||||
<h1><a name="section_20">Optimizer / Executor</a></h1>
|
||||
|
||||
@ -925,15 +817,9 @@ first.
|
||||
</li><li>Create utility to compute accurate random_page_cost value
|
||||
</li><li>Improve ability to display optimizer analysis using OPTIMIZER_DEBUG
|
||||
</li><li>Have EXPLAIN ANALYZE highlight poor optimizer estimates
|
||||
</li><li>-<em>Use CHECK constraints to influence optimizer decisions</em>
|
||||
<p> CHECK constraints contain information about the distribution of values
|
||||
within the table. This is also useful for implementing subtables where
|
||||
a tables content is distributed across several subtables.
|
||||
</p>
|
||||
</li><li>Consider using hash buckets to do DISTINCT, rather than sorting
|
||||
<p> This would be beneficial when there are few distinct values.
|
||||
</p>
|
||||
</li><li>-<em>ANALYZE should record a pg_statistic entry for an all-NULL column</em>
|
||||
</li><li>Log queries where the optimizer row estimates were dramatically
|
||||
different from the number of rows actually found?
|
||||
</li><li>Allow constraint_elimination to be automatically performed
|
||||
@ -983,11 +869,9 @@ first.
|
||||
</li><li>%Promote debug_query_string into a server-side function current_query()
|
||||
</li><li>%Allow the identifier length to be increased via a configure option
|
||||
</li><li>Remove Win32 rename/unlink looping if unnecessary
|
||||
</li><li>-<em>Remove kerberos4 from source tree</em>
|
||||
</li><li>Allow cross-compiling by generating the zic database on the target system
|
||||
</li><li>Improve NLS maintenace of libpgport messages linked onto applications
|
||||
</li><li>Allow ecpg to work with MSVC and BCC
|
||||
</li><li>-<em>Make src/port/snprintf.c thread-safe</em>
|
||||
</li><li>Add xpath_array() to /contrib/xml2 to return results as an array
|
||||
</li><li>Allow building in directories containing spaces
|
||||
<p> This is probably not possible because 'gmake' and other compiler tools
|
||||
@ -1000,7 +884,6 @@ first.
|
||||
spaces and then copy the install to a directory with spaces.
|
||||
</p>
|
||||
</li><li>Fix sgmltools so PDFs can be generated with bookmarks
|
||||
</li><li>-<em>Add C code on Unix to copy directories for use in creating new databases</em>
|
||||
</li><li>%Clean up compiler warnings (especially with gcc version 4)
|
||||
</li><li>Win32
|
||||
<ul>
|
||||
@ -1013,7 +896,6 @@ first.
|
||||
backslashes
|
||||
</li><li>Re-enable timezone output on log_line_prefix '%t' when a
|
||||
shorter timezone string is available
|
||||
</li><li>-<em>Improve dlerror() reporting string</em>
|
||||
</li><li>Fix problem with shared memory on the Win32 Terminal Server
|
||||
</li><li>%Add support for Unicode
|
||||
<p> To fix this, the data needs to be converted to/from UTF16/UTF8
|
||||
|
Loading…
Reference in New Issue
Block a user