TODO.html 80.6 KB
Newer Older
1 2 3 4
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
Bruce Momjian's avatar
Bruce Momjian committed
5
<title>PostgreSQL TODO List</title>
6 7 8
<meta name="generator" content="HTML::TextToHTML v2.25"/>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#FF0000" vlink="#A00000" alink="#0000FF">
Bruce Momjian's avatar
Bruce Momjian committed
9 10
<h1><a name="section_1">PostgreSQL TODO List</a></h1>
<p>Current maintainer:     Bruce Momjian (<a href="mailto:bruce@momjian.us">bruce@momjian.us</a>)<br/>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
11
Last updated:           Wed Oct 31 16:12:40 EDT 2007
Bruce Momjian's avatar
Bruce Momjian committed
12
</p>
Bruce Momjian's avatar
Bruce Momjian committed
13 14
<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>.
15
</p>
16
<p><strong>A hyphen, "-", marks changes that will appear in the upcoming 8.3 release.</strong><br/>
Bruce Momjian's avatar
Bruce Momjian committed
17
<strong>A percent sign, "%", marks items that are easier to implement.</strong>
18 19 20 21 22
</p>
<p>Bracketed items, "[<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?"></a>]", have more detail.
</p>
<p>This list contains all known PostgreSQL bugs and feature requests. If<br/>
you would like to work on an item, please read the Developer's FAQ<br/>
Bruce Momjian's avatar
Bruce Momjian committed
23 24
first.  There is also a developer's wiki at<br/>
<a href="http://developer.postgresql.org">http://developer.postgresql.org</a>.
25
</p>
Bruce Momjian's avatar
Bruce Momjian committed
26
<h1><a name="section_2">Administration</a></h1>
27 28

<ul>
Bruce Momjian's avatar
Bruce Momjian committed
29
  <li>Allow major upgrades without dump/reload, perhaps using pg_upgrade
Bruce Momjian's avatar
Bruce Momjian committed
30
  [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?pg_upgrade">pg_upgrade</a>]
Bruce Momjian's avatar
Bruce Momjian committed
31
  </li><li>Check for unreferenced table files created by transactions that were
32
  in-progress when the server terminated abruptly
Bruce Momjian's avatar
Bruce Momjian committed
33 34
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2006-06/msg00096.php">http://archives.postgresql.org/pgsql-patches/2006-06/msg00096.php</a>
</p>
Bruce Momjian's avatar
Bruce Momjian committed
35
  </li><li>Allow administrators to safely terminate individual sessions either
Bruce Momjian's avatar
Bruce Momjian committed
36
  via an SQL function or SIGTERM
Bruce Momjian's avatar
Bruce Momjian committed
37 38 39 40
<p>  Lock table corruption following SIGTERM of an individual backend
  has been reported in 8.0.  A possible cause was fixed in 8.1, but
  it is unknown whether other problems exist.  This item mostly
  requires additional testing rather than of writing any new code.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
41 42
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-08/msg00174.php">http://archives.postgresql.org/pgsql-hackers/2006-08/msg00174.php</a>
43
</p>
Bruce Momjian's avatar
Bruce Momjian committed
44
  </li><li>Set proper permissions on non-system schemas during db creation
Bruce Momjian's avatar
Bruce Momjian committed
45 46 47 48
<p>  Currently all schemas are owned by the super-user because they are copied
  from the template1 database.  However, since all objects are inherited
  from the template database, it is not clear that setting schemas to the db
  owner is correct.
49
</p>
Bruce Momjian's avatar
Bruce Momjian committed
50 51 52
  </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
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
53
  </li><li>Add function to report the time of the most recent server reload
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
54 55 56
  </li><li>Allow statistics collector information to be pulled from the collector
  process directly, rather than requiring the collector to write a
  filesystem file twice a second?
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
57 58 59
  </li><li>Allow log_min_messages to be specified on a per-module basis
<p>  This would allow administrators to see more detailed information from
  specific sections of the backend, e.g. checkpoints, autovacuum, etc.
60 61
  Another idea is to allow separate configuration files for each module,
  or allow arbitrary SET commands to be passed to them.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
62
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
63 64 65 66 67
  </li><li>Simplify ability to create partitioned tables
<p>  This would allow creation of partitioned tables without requiring
  creation of rules for INSERT/UPDATE/DELETE, and constraints for
  rapid partition selection.  Options could include range and hash
  partition selection.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
68 69
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg00375.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg00375.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
70
  <a href="http://archives.postgresql.org/pgsql-hackers/2007-04/msg00151.php">http://archives.postgresql.org/pgsql-hackers/2007-04/msg00151.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
71 72
</p>
  </li><li>Allow auto-selection of partitioned tables for min/max() operations
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
73
  </li><li>Allow more complex user/database default GUC settings
Bruce Momjian's avatar
Bruce Momjian committed
74
<p>  Currently ALTER USER and ALTER DATABASE support per-user and
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
75
  per-database defaults.  Consider adding per-user-and-database
Bruce Momjian's avatar
Bruce Momjian committed
76
  defaults so things like search_path can be defaulted for a
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
77
  specific user connecting to a specific database.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
78 79 80
</p>
  </li><li>Allow custom variable classes that can restrict who can set the values
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-11/msg00911.php">http://archives.postgresql.org/pgsql-hackers/2006-11/msg00911.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
81
</p>
Bruce Momjian's avatar
Bruce Momjian committed
82 83 84
  </li><li>Implement the SQL standard mechanism whereby REVOKE ROLE revokes only
  the privilege granted by the invoking role, and not those granted
  by other roles
Bruce Momjian's avatar
Bruce Momjian committed
85 86
<p>  <a href="http://archives.postgresql.org/pgsql-bugs/2007-05/msg00010.php">http://archives.postgresql.org/pgsql-bugs/2007-05/msg00010.php</a>
</p>
87 88 89 90 91 92 93 94 95
  </li><li>Improve replication solutions
  <ul>
    <li>Load balancing
<p>          You can use any of the master/slave replication servers to use a
          standby server for data warehousing. To allow read/write queries to
          multiple servers, you need multi-master replication like pgcluster.
</p>
    </li><li>Allow replication over unreliable or non-persistent links
  </li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
96 97
  </li><li>Configuration files
  <ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
98
    <li>-<em>Allow commenting of variables in postgresql.conf to restore them</em>
Bruce Momjian's avatar
Bruce Momjian committed
99
          to defaults
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
100 101 102 103 104 105 106
    </li><li>Allow pg_hba.conf to specify host names along with IP addresses
<p>          Host name lookup could occur when the postmaster reads the
          pg_hba.conf file, or when the backend starts.  Another
          solution would be to reverse lookup the connection IP and
          check that hostname against the host names in pg_hba.conf.
          We could also then check that the host name maps to the IP
          address.
Bruce Momjian's avatar
Bruce Momjian committed
107
</p>
Bruce Momjian's avatar
Bruce Momjian committed
108
    </li><li>%Allow postgresql.conf file values to be changed via an SQL
Bruce Momjian's avatar
Bruce Momjian committed
109
          API, perhaps using SET GLOBAL
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
110
    </li><li>Allow the server to be stopped/restarted via an SQL API
Bruce Momjian's avatar
Bruce Momjian committed
111
    </li><li>Issue a warning if a change-on-restart-only postgresql.conf value
Bruce Momjian's avatar
Bruce Momjian committed
112
          is modified  and the server config files are reloaded
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
113
    </li><li>Mark change-on-restart-only values in postgresql.conf
Bruce Momjian's avatar
Bruce Momjian committed
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
  </li></ul>
  </li><li>Tablespaces
  <ul>
    <li>Allow a database in tablespace t1 with tables created in
          tablespace t2 to be used as a template for a new database created
          with default tablespace t2
<p>          All objects in the default database tablespace must have default
          tablespace specifications. This is because new databases are
          created by copying directories. If you mix default tablespace
          tables and tablespace-specified tables in the same directory,
          creating a new database from such a mixed directory would create a
          new database with tables that had incorrect explicit tablespaces.
          To fix this would require modifying pg_class in the newly copied
          database, which we don't currently do.
</p>
    </li><li>Allow reporting of which objects are in which tablespaces
<p>          This item is difficult because a tablespace can contain objects
          from multiple databases. There is a server-side function that
          returns the databases which use a specific tablespace, so this
          requires a tool that will call that function and connect to each
          database to find the objects in each database for that tablespace.
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
136
    </li><li>-<em>Add a GUC variable to control the tablespace for temporary objects</em>
Bruce Momjian's avatar
Bruce Momjian committed
137
          and sort files
Bruce Momjian's avatar
Bruce Momjian committed
138
    </li><li>Allow WAL replay of CREATE TABLESPACE to work when the directory
Bruce Momjian's avatar
Bruce Momjian committed
139
          structure on the recovery computer is different from the original
Bruce Momjian's avatar
Bruce Momjian committed
140
    </li><li>Allow per-tablespace quotas
Bruce Momjian's avatar
Bruce Momjian committed
141
  </li></ul>
142
  </li><li>Point-In-Time Recovery (PITR)
Bruce Momjian's avatar
Bruce Momjian committed
143
  <ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
144
    <li>Allow a warm standby system to also allow read-only statements
Bruce Momjian's avatar
Bruce Momjian committed
145 146
            [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?pitr">pitr</a>]
<p>            This is useful for checking PITR recovery.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
147 148
</p>
<p>            <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg00050.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg00050.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
149
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
150 151
    </li><li>%Create dump tool for write-ahead logs for use in determining
            transaction id for point-in-time recovery
Bruce Momjian's avatar
Bruce Momjian committed
152
    </li><li>Allow the PITR process to be debugged and data examined
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
153 154 155 156
    </li><li>Allow recovery.conf to allow the same syntax as
            postgresql.conf, including quoting
<p>            <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg00497.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg00497.php</a>
</p>
Bruce Momjian's avatar
Bruce Momjian committed
157 158
  </li></ul>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
159
<h1><a name="section_3">Monitoring</a></h1>
Bruce Momjian's avatar
Bruce Momjian committed
160 161

<ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
162
  <li>-<em>Allow server log information to be output as CSV format</em>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
163
  </li><li>-<em>Add ability to monitor the use of temporary sort files</em>
164
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
165
<h1><a name="section_4">Data Types</a></h1>
166 167

<ul>
Bruce Momjian's avatar
Bruce Momjian committed
168 169 170
  <li>-<em>Make 64-bit version of the MONEY data type</em>
  </li><li>Add locale-aware MONEY type, and support multiple currencies
<p>  <a href="http://archives.postgresql.org/pgsql-general/2005-08/msg01432.php">http://archives.postgresql.org/pgsql-general/2005-08/msg01432.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
171
  <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg01181.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg01181.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
172
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
173 174
  </li><li>MONEY dumps in a locale-specific format making it difficult to
  restore to a system with a different locale
175
  </li><li>Change NUMERIC to enforce the maximum precision
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
176 177
  </li><li>Reduce storage space for small NUMERICs
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-02/msg01331.php">http://archives.postgresql.org/pgsql-hackers/2007-02/msg01331.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
178
  <a href="http://archives.postgresql.org/pgsql-patches/2007-02/msg00505.php">http://archives.postgresql.org/pgsql-patches/2007-02/msg00505.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
179
</p>
180
  </li><li>Fix data types where equality comparison isn't intuitive, e.g. box
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
181 182
  </li><li>Allow user-defined types to specify a type modifier at table creation
  time
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
183
  </li><li>-<em>Allow user-defined types to accept 'typmod' parameters</em>
Bruce Momjian's avatar
Bruce Momjian committed
184 185
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2005-08/msg01142.php">http://archives.postgresql.org/pgsql-hackers/2005-08/msg01142.php</a>
  <a href="http://archives.postgresql.org/pgsql-hackers/2005-09/msg00012.php">http://archives.postgresql.org/pgsql-hackers/2005-09/msg00012.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
186
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-08/msg00149.php">http://archives.postgresql.org/pgsql-hackers/2006-08/msg00149.php</a>
Bruce Momjian's avatar
>  
Bruce Momjian committed
187 188 189
</p>
  </li><li>Add support for public SYNONYMs
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-03/msg00519.php">http://archives.postgresql.org/pgsql-hackers/2006-03/msg00519.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
190 191 192
</p>
  </li><li>Fix CREATE CAST on DOMAINs
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-05/msg00072.php">http://archives.postgresql.org/pgsql-hackers/2006-05/msg00072.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
193
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-09/msg01681.php">http://archives.postgresql.org/pgsql-hackers/2006-09/msg01681.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
194
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
195
  </li><li>-<em>Add Globally/Universally Unique Identifier (GUID/UUID)</em>
Bruce Momjian's avatar
Bruce Momjian committed
196
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2006-09/msg00209.php">http://archives.postgresql.org/pgsql-patches/2006-09/msg00209.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
197
  <a href="http://archives.postgresql.org/pgsql-general/2007-01/msg00853.php">http://archives.postgresql.org/pgsql-general/2007-01/msg00853.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
198
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
199 200
  </li><li>Add support for SQL-standard GENERATED/IDENTITY columns
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-07/msg00543.php">http://archives.postgresql.org/pgsql-hackers/2006-07/msg00543.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
201
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-08/msg00038.php">http://archives.postgresql.org/pgsql-hackers/2006-08/msg00038.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
202 203
  <a href="http://archives.postgresql.org/pgsql-hackers/2007-05/msg00344.php">http://archives.postgresql.org/pgsql-hackers/2007-05/msg00344.php</a>
  <a href="http://archives.postgresql.org/pgsql-patches/2007-05/msg00076.php">http://archives.postgresql.org/pgsql-patches/2007-05/msg00076.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
204
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
205
  </li><li>-<em>Support a data type with specific enumerated values (ENUM)</em>
Bruce Momjian's avatar
Bruce Momjian committed
206 207
  </li><li>Improve XML support
<p>  <a href="http://developer.postgresql.org/index.php/XML_Support">http://developer.postgresql.org/index.php/XML_Support</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
208
</p>
Bruce Momjian's avatar
Bruce Momjian committed
209 210
  </li><li>Consider placing all sequences in a single table, or create a system
  view
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
211 212 213
  </li><li>Allow all data types to cast to and from TEXT
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-04/msg00017.php">http://archives.postgresql.org/pgsql-hackers/2007-04/msg00017.php</a>
</p>
214
  </li><li>Dates and Times
215
  <ul>
Bruce Momjian's avatar
Bruce Momjian committed
216
    <li>Allow infinite dates and intervals just like infinite timestamps
Bruce Momjian's avatar
Bruce Momjian committed
217
    </li><li>Merge hardwired timezone names with the TZ database; allow either
218 219 220
          kind everywhere a TZ name is currently taken
    </li><li>Allow TIMESTAMP WITH TIME ZONE to store the original timezone
          information, either zone name or offset from UTC [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?timezone">timezone</a>]
Bruce Momjian's avatar
Bruce Momjian committed
221
<p>          If the TIMESTAMP value is stored with a time zone name, interval
Bruce Momjian's avatar
Bruce Momjian committed
222
          computations should adjust based on the time zone rules.
223
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
224
    </li><li>Fix SELECT '0.01 years'::interval, '0.01 months'::interval
Bruce Momjian's avatar
Bruce Momjian committed
225
    </li><li>Add a GUC variable to allow output of interval values in ISO8601
Bruce Momjian's avatar
Bruce Momjian committed
226
          format
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
227 228 229
    </li><li>Have timestamp subtraction not call justify_hours()?
<p>          <a href="http://archives.postgresql.org/pgsql-sql/2006-10/msg00059.php">http://archives.postgresql.org/pgsql-sql/2006-10/msg00059.php</a>
</p>
Bruce Momjian's avatar
Bruce Momjian committed
230
    </li><li>Improve timestamptz subtraction to be DST-aware
Bruce Momjian's avatar
Bruce Momjian committed
231
<p>          Currently subtracting one date from another that crosses a
Bruce Momjian's avatar
Bruce Momjian committed
232 233 234 235 236 237 238
          daylight savings time adjustment can return '1 day 1 hour', but
          adding that back to the first date returns a time one hour in
          the future.  This is caused by the adjustment of '25 hours' to
          '1 day 1 hour', and '1 day' is the same time the next day, even
          if daylight savings adjustments are involved.
</p>
    </li><li>Fix interval display to support values exceeding 2^31 hours
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
239
    </li><li>Add overflow checking to timestamp and interval arithmetic
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
240 241 242
    </li><li>Extend timezone code to allow 64-bit values so we can
          represent years beyond 2038
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2006-09/msg01363.php">http://archives.postgresql.org/pgsql-hackers/2006-09/msg01363.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
243 244 245 246
</p>
    </li><li>Use LC_TIME for localized weekday/month names, rather than
          LC_MESSAGES
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2006-11/msg00390.php">http://archives.postgresql.org/pgsql-hackers/2006-11/msg00390.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
247
</p>
248
    </li><li>Add ISO INTERVAL handling
249 250
  </li></ul>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
251 252
<p>                  <a href="http://archives.postgresql.org/pgsql-hackers/2006-01/msg00250.php">http://archives.postgresql.org/pgsql-hackers/2006-01/msg00250.php</a><br/>
                  <a href="http://archives.postgresql.org/pgsql-bugs/2006-04/msg00248.php">http://archives.postgresql.org/pgsql-bugs/2006-04/msg00248.php</a>
253 254
</p>
<ul>
Bruce Momjian's avatar
Bruce Momjian committed
255
  <li>Support ISO INTERVAL syntax if units cannot be determined from
256
                  the string, and are supplied after the string
Bruce Momjian's avatar
Bruce Momjian committed
257 258 259 260 261
<p>                  The SQL standard states that the units after the string
                  specify the units of the string, e.g. INTERVAL '2' MINUTE
                  should return '00:02:00'. The current behavior has the units
                  restrict the interval value to the specified unit or unit
                  range, INTERVAL '70' SECOND returns '00:00:10'.
262 263 264
</p>
<p>                  For syntax that isn't uniquely ISO or PG syntax, like '1' or
                  '1:30', treat as ISO if there is a range specification clause,
Bruce Momjian's avatar
Bruce Momjian committed
265 266 267 268 269 270 271 272 273 274
                  and as PG if there no clause is present, e.g. interpret '1:30'
                  MINUTE TO SECOND as '1 minute 30 seconds', and interpret
                  '1:30' as '1 hour, 30 minutes'.
</p>
<p>                  This makes common cases like SELECT INTERVAL '1' MONTH
                  SQL-standard results. The SQL standard supports a limited
                  number of unit combinations and doesn't support unit names in
                  the string. The PostgreSQL syntax is more flexible in the
                  range of units supported, e.g. PostgreSQL supports '1 year 1
                  hour', while the SQL standard does not.
275
</p>
276 277
  </li><li>Add support for year-month syntax, INTERVAL '50-6' YEAR TO MONTH
  </li><li>Interpret INTERVAL '1 year' MONTH as CAST (INTERVAL '1 year' AS
278
                  INTERVAL MONTH), and this should return '12 months'
279
  </li><li>Round or truncate values to the requested precision, e.g.
280
                  INTERVAL '11 months' AS YEAR should return one or zero
281
  </li><li>Support precision, CREATE TABLE foo (a INTERVAL MONTH(3))
282
  <ul>
283 284
    <li>Arrays
    <ul>
Bruce Momjian's avatar
Bruce Momjian committed
285
      <li>Delay resolution of array expression's data type so assignment
286
          coercion can be performed on empty array expressions
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
287
      </li><li>Add support for arrays of domains
288 289 290
<p>          <a href="http://archives.postgresql.org/pgsql-patches/2007-05/msg00114.php">http://archives.postgresql.org/pgsql-patches/2007-05/msg00114.php</a>
</p>
      </li><li>-<em>Add support for arrays of complex types</em>
Bruce Momjian's avatar
Bruce Momjian committed
291
      </li><li>Allow single-byte header storage for array elements
292 293 294 295 296 297
    </li></ul>
    </li><li>Binary Data
    <ul>
      <li>Improve vacuum of large objects, like /contrib/vacuumlo?
      </li><li>Add security checking for large objects
      </li><li>Auto-delete large objects when referencing row is deleted
Bruce Momjian's avatar
Bruce Momjian committed
298 299
<p>          /contrib/lo offers this functionality.
</p>
300
      </li><li>Allow read/write into TOAST values like large objects
301
<p>          This requires the TOAST column to be stored EXTERNAL.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
302
</p>
303
      </li><li>Add API for 64-bit large object access
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
304
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2005-09/msg00781.php">http://archives.postgresql.org/pgsql-hackers/2005-09/msg00781.php</a>
305
</p>
306
    </li></ul>
307 308
  </li></ul>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
309
<h1><a name="section_5">Functions</a></h1>
Bruce Momjian's avatar
Bruce Momjian committed
310 311

<ul>
Bruce Momjian's avatar
Bruce Momjian committed
312
  <li>Allow INET subnet tests using non-constants to be indexed
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
313
  </li><li>Allow to_date() and to_timestamp() accept localized month names
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
314 315 316
  </li><li>Fix to_date()-related functions to consistently issue errors
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-02/msg00915.php">http://archives.postgresql.org/pgsql-hackers/2007-02/msg00915.php</a>
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
317
  </li><li>Add missing parameter handling in to_char()
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
318
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2005-12/msg00948.php">http://archives.postgresql.org/pgsql-hackers/2005-12/msg00948.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
319
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
320
  </li><li>Allow functions to have a schema search path specified at creation time
Bruce Momjian's avatar
Bruce Momjian committed
321 322 323 324
  </li><li>Allow substring/replace() to get/set bit values
  </li><li>Allow to_char() on interval values to accumulate the highest unit
  requested
<p>  Some special format flag would be required to request such
Bruce Momjian's avatar
Bruce Momjian committed
325
  accumulation.  Such functionality could also be added to EXTRACT.
Bruce Momjian's avatar
Bruce Momjian committed
326 327 328 329 330
  Prevent accumulation that crosses the month/day boundary because of
  the uneven number of days in a month.
</p>
  <ul>
    <li>to_char(INTERVAL '1 hour 5 minutes', 'MI') =&gt; 65
Bruce Momjian's avatar
Bruce Momjian committed
331
    </li><li>to_char(INTERVAL '43 hours 20 minutes', 'MI' ) =&gt; 2600
Bruce Momjian's avatar
Bruce Momjian committed
332 333 334
    </li><li>to_char(INTERVAL '43 hours 20 minutes', 'WK:DD:HR:MI') =&gt; 0:1:19:20
    </li><li>to_char(INTERVAL '3 years 5 months','MM') =&gt; 41
  </li></ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
335
  </li><li>-<em>Add ISO day of week format 'ID' to to_char() where Monday = 1</em>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
336
  </li><li>-<em>Add a field 'isoyear' to extract(), based on the ISO week</em>
337
  </li><li>Implement inlining of set-returning functions defined in SQL
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
338
  </li><li>Allow SQL-language functions to return results from RETURNING queries
Bruce Momjian's avatar
Bruce Momjian committed
339
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-10/msg00665.php">http://archives.postgresql.org/pgsql-hackers/2006-10/msg00665.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
340 341
</p>
  </li><li>Allow SQL-language functions to reference parameters by parameter name
Bruce Momjian's avatar
Bruce Momjian committed
342 343
<p>  Currently SQL-language functions can only refer to dollar parameters,
  e.g. $1
Bruce Momjian's avatar
Bruce Momjian committed
344
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
345
  </li><li>Add SPI_gettypmod() to return the typemod for a TupleDesc
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
346 347 348
  </li><li>Enforce typmod for function inputs, function results and parameters for
  spi_prepare'd statements called from PLs
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg01403.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg01403.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
349
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
350
  </li><li>Allow holdable cursors in SPI
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
351
  </li><li>Tighten function permission checks
352
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg00568.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg00568.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
353 354 355 356
</p>
  </li><li>Fix IS OF so it matches the ISO specification, and add documentation
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2003-08/msg00060.php">http://archives.postgresql.org/pgsql-patches/2003-08/msg00060.php</a>
  <a href="http://archives.postgresql.org/pgsql-hackers/2007-02/msg00060.php">http://archives.postgresql.org/pgsql-hackers/2007-02/msg00060.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
357 358 359 360
</p>
  </li><li>Add missing operators for geometric data types
<p>  Some geometric types do not have the full suite of geometric operators,
  e.g. box @&gt; point
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
361 362 363
</p>
  </li><li>Implement Boyer-Moore searching in strpos()
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2007-08/msg00012.php">http://archives.postgresql.org/pgsql-patches/2007-08/msg00012.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
364
</p>
Bruce Momjian's avatar
Bruce Momjian committed
365
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
366
<h1><a name="section_6">Multi-Language Support</a></h1>
367 368 369 370

<ul>
  <li>Add NCHAR (as distinguished from ordinary varchar),
  </li><li>Allow locale to be set at database creation
Bruce Momjian's avatar
Bruce Momjian committed
371 372 373 374
<p>  Currently locale can only be set during initdb.  No global tables have
  locale-aware columns.  However, the database template used during
  database creation might have locale-aware indexes.  The indexes would
  need to be reindexed to match the new locale.
375
</p>
Bruce Momjian's avatar
Bruce Momjian committed
376
  </li><li>Allow encoding on a per-column basis optionally using the ICU library:
377
<p>  Right now only one encoding is allowed per database.  [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?locale">locale</a>]
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
378 379
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2005-03/msg00932.php">http://archives.postgresql.org/pgsql-hackers/2005-03/msg00932.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
380 381
  <a href="http://archives.postgresql.org/pgsql-patches/2005-08/msg00309.php">http://archives.postgresql.org/pgsql-patches/2005-08/msg00309.php</a>
  <a href="http://archives.postgresql.org/pgsql-patches/2006-03/msg00233.php">http://archives.postgresql.org/pgsql-patches/2006-03/msg00233.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
382
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-09/msg00662.php">http://archives.postgresql.org/pgsql-hackers/2006-09/msg00662.php</a>
383
</p>
384
  </li><li>Add CREATE COLLATE?  [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?locale">locale</a>]
385
  </li><li>Support multiple simultaneous character sets, per SQL92
Bruce Momjian's avatar
Bruce Momjian committed
386
  </li><li>Improve UTF8 combined character handling?
387 388
  </li><li>Add octet_length_server() and octet_length_client()
  </li><li>Make octet_length_client() the same as octet_length()?
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
389
  </li><li>Fix problems with wrong runtime encoding conversion for NLS message files
Bruce Momjian's avatar
Bruce Momjian committed
390 391
  </li><li>Add URL to more complete multi-byte regression tests
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2005-07/msg00272.php">http://archives.postgresql.org/pgsql-hackers/2005-07/msg00272.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
392 393 394 395
</p>
  </li><li>Fix ILIKE and regular expressions to handle case insensitivity
  properly in multibyte encodings
<p>  <a href="http://archives.postgresql.org/pgsql-bugs/2005-10/msg00001.php">http://archives.postgresql.org/pgsql-bugs/2005-10/msg00001.php</a>
396
  <a href="http://archives.postgresql.org/pgsql-patches/2005-11/msg00173.php">http://archives.postgresql.org/pgsql-patches/2005-11/msg00173.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
397 398 399 400
</p>
  </li><li>Set client encoding based on the client operating system encoding
<p>  Currently client_encoding is set in postgresql.conf, which
  defaults to the server encoding.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
401 402
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-08/msg01696.php">http://archives.postgresql.org/pgsql-hackers/2006-08/msg01696.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
403 404 405 406
</p>
  </li><li>Fix cases where invalid byte encodings are accepted by the database,
  but throw an error on SELECT
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg00767.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg00767.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
407
</p>
408
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
409
<h1><a name="section_7">Views / Rules</a></h1>
410 411

<ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
412
  <li>Automatically create rules on views so they are updateable, per SQL99
413
<p>  We can only auto-create rules for simple views.  For more complex
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
414
  cases users will still have to write rules manually.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
415 416
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-03/msg00586.php">http://archives.postgresql.org/pgsql-hackers/2006-03/msg00586.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
417
  <a href="http://archives.postgresql.org/pgsql-patches/2006-08/msg00255.php">http://archives.postgresql.org/pgsql-patches/2006-08/msg00255.php</a>
418 419 420
</p>
  </li><li>Add the functionality for WITH CHECK OPTION clause of CREATE VIEW
  </li><li>Allow NOTIFY in rules involving conditionals
Bruce Momjian's avatar
Bruce Momjian committed
421
  </li><li>Allow VIEW/RULE recompilation when the underlying tables change
Bruce Momjian's avatar
Bruce Momjian committed
422 423 424
<p>  Another issue is whether underlying table changes should be reflected
  in the view, e.g. should SELECT * show additional columns if they
  are added after the view is created.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
425 426 427 428
</p>
  </li><li>Make it possible to use RETURNING together with conditional DO INSTEAD
  rules, such as for partitioning setups
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-09/msg00577.php">http://archives.postgresql.org/pgsql-hackers/2007-09/msg00577.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
429
</p>
430
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
431
<h1><a name="section_8">SQL Commands</a></h1>
432 433

<ul>
Bruce Momjian's avatar
Bruce Momjian committed
434
  <li>Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT
435
  </li><li>Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY
Bruce Momjian's avatar
Bruce Momjian committed
436 437
  </li><li>%Allow SET CONSTRAINTS to be qualified by schema/table name
  </li><li>%Add a separate TRUNCATE permission
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
438 439 440
<p>  Currently only the owner can TRUNCATE a table because triggers are not
  called, and the table is locked in exclusive mode.
</p>
441 442
  </li><li>Allow PREPARE of cursors
  </li><li>Allow finer control over the caching of prepared query plans
Bruce Momjian's avatar
Bruce Momjian committed
443
<p>  Currently queries prepared via the libpq API are planned on first
444 445 446 447 448
  execute using the supplied parameters --- allow SQL PREPARE to do the
  same.  Also, allow control over replanning prepared queries either
  manually or automatically when statistics for execute parameters
  differ dramatically from those used during planning.
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
449 450 451
  </li><li>Improve logging of prepared statements recovered during startup
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-11/msg00092.php">http://archives.postgresql.org/pgsql-hackers/2006-11/msg00092.php</a>
</p>
452 453 454 455 456 457 458 459
  </li><li>Allow LISTEN/NOTIFY to store info in memory rather than tables?
<p>  Currently LISTEN/NOTIFY information is stored in pg_listener. Storing
  such information in memory would improve performance.
</p>
  </li><li>Add optional textual message to NOTIFY
<p>  This would allow an informational message to be added to the notify
  message, perhaps indicating the row modified or other custom
  information.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
460
</p>
461
  </li><li>Add a GUC variable to warn about non-standard SQL usage in queries
462
  </li><li>Add SQL-standard MERGE command, typically used to merge two tables
Bruce Momjian's avatar
Bruce Momjian committed
463
  [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?merge">merge</a>]
464 465 466 467 468
<p>  This is similar to UPDATE, then for unmatched rows, INSERT.
  Whether concurrent access allows modifications which could cause
  row loss is implementation independent.
</p>
  </li><li>Add REPLACE or UPSERT command that does UPDATE, or on failure, INSERT
Bruce Momjian's avatar
Bruce Momjian committed
469
  [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?merge">merge</a>]
Bruce Momjian's avatar
Bruce Momjian committed
470
<p>  To implement this cleanly requires that the table have a unique index
471 472 473
  so duplicate checking can be easily performed.  It is possible to
  do it without a unique index if we require the user to LOCK the table
  before the MERGE.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
474 475
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2005-11/msg00501.php">http://archives.postgresql.org/pgsql-hackers/2005-11/msg00501.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
476
  <a href="http://archives.postgresql.org/pgsql-hackers/2005-11/msg00536.php">http://archives.postgresql.org/pgsql-hackers/2005-11/msg00536.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
477
</p>
478 479
  </li><li>Add NOVICE output level for helpful messages like automatic sequence/index
  creation
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
480
  </li><li>-<em>Add RESET SESSION command to reset all session state</em>
481
  </li><li>Add GUC to issue notice about statements that use unjoined tables
Bruce Momjian's avatar
Bruce Momjian committed
482
  </li><li>Allow EXPLAIN to identify tables that were skipped because of
483
  constraint_exclusion
Bruce Momjian's avatar
Bruce Momjian committed
484
  </li><li>Allow EXPLAIN output to be more easily processed by scripts, perhaps XML
Bruce Momjian's avatar
Bruce Momjian committed
485
  </li><li>Enable standard_conforming_strings
Bruce Momjian's avatar
Bruce Momjian committed
486
  </li><li>Make standard_conforming_strings the default in 8.4?
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
487 488 489 490 491 492
<p>  When this is done, backslash-quote should be prohibited in non-E''
  strings because of possible confusion over how such strings treat
  backslashes.  Basically, '' is always safe for a literal single
  quote, while \' might or might not be based on the backslash
  handling rules.
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
493
  </li><li>Simplify dropping roles that have objects in several databases
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
494
  </li><li>Allow COMMENT ON to accept an expression rather than just a string
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
495 496
  </li><li>Allow the count returned by SELECT, etc to be to represent as an int64
  to allow a higher range of values
Bruce Momjian's avatar
Bruce Momjian committed
497
  </li><li>Add SQL99 WITH clause to SELECT
Bruce Momjian's avatar
Bruce Momjian committed
498
  </li><li>Add SQL:2003 WITH RECURSIVE (hierarchical) queries to SELECT
Bruce Momjian's avatar
Bruce Momjian committed
499 500 501 502
  </li><li>Add DEFAULT .. AS OWNER so permission checks are done as the table
  owner
<p>  This would be useful for SERIAL nextval() calls and CHECK constraints.
</p>
Bruce Momjian's avatar
Bruce Momjian committed
503
  </li><li>Allow DISTINCT to work in multiple-argument aggregate calls
Bruce Momjian's avatar
Bruce Momjian committed
504 505
  </li><li>Add column to pg_stat_activity that shows the progress of long-running
  commands like CREATE INDEX and VACUUM
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
506
  </li><li>Implement SQL:2003 window functions
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
507 508
  </li><li>Improve failure message when DROP DATABASE is used on a database that
  has prepared transactions
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
509 510 511
  </li><li>Allow INSERT/UPDATE ... RETURNING inside a SELECT 'FROM' clause
<p>  <a href="http://archives.postgresql.org/pgsql-general/2006-09/msg00803.php">http://archives.postgresql.org/pgsql-general/2006-09/msg00803.php</a>
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-10/msg00693.php">http://archives.postgresql.org/pgsql-hackers/2006-10/msg00693.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
512 513 514 515
</p>
  </li><li>Increase locking when DROPing objects so dependent objects cannot
  get dropped while the DROP operation is happening
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg00937.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg00937.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
516
</p>
517 518 519 520 521 522
  </li><li>CREATE
  <ul>
    <li>Allow CREATE TABLE AS to determine column lengths for complex
          expressions like SELECT col1 || col2
    </li><li>Use more reliable method for CREATE DATABASE to get a consistent
          copy of db?
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
523 524 525 526
    </li><li>Fix transaction restriction checks for CREATE DATABASE and
          other commands
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg00133.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg00133.php</a>
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
527
    </li><li>Have WITH CONSTRAINTS also create constraint indexes
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
528 529
<p>          <a href="http://archives.postgresql.org/pgsql-patches/2007-04/msg00149.php">http://archives.postgresql.org/pgsql-patches/2007-04/msg00149.php</a>
</p>
530 531 532
  </li></ul>
  </li><li>UPDATE
  <ul>
Bruce Momjian's avatar
Bruce Momjian committed
533
    <li>Allow UPDATE tab SET ROW (col, ...) = (SELECT...)
Bruce Momjian's avatar
Bruce Momjian committed
534
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2006-07/msg01306.php">http://archives.postgresql.org/pgsql-hackers/2006-07/msg01306.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
535
          <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg00865.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg00865.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
536 537 538 539
</p>
    </li><li>Research self-referential UPDATEs that see inconsistent row versions
          in read-committed mode
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2007-05/msg00507.php">http://archives.postgresql.org/pgsql-hackers/2007-05/msg00507.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
540
          <a href="http://archives.postgresql.org/pgsql-hackers/2007-06/msg00016.php">http://archives.postgresql.org/pgsql-hackers/2007-06/msg00016.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
541 542 543 544
</p>
    </li><li>Allow GLOBAL temporary tables to exist as empty by default in
          all sessions
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2007-07/msg00006.php">http://archives.postgresql.org/pgsql-hackers/2007-07/msg00006.php</a>
545
</p>
546
  </li></ul>
547 548
  </li><li>ALTER
  <ul>
Bruce Momjian's avatar
Bruce Momjian committed
549
    <li>%Have ALTER TABLE RENAME rename SERIAL sequence names
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
550 551 552 553 554
    </li><li>Have ALTER SEQUENCE RENAME rename the sequence name stored
          in the sequence table
<p>          <a href="http://archives.postgresql.org/pgsql-bugs/2007-09/msg00092.php">http://archives.postgresql.org/pgsql-bugs/2007-09/msg00092.php</a>
          <a href="http://archives.postgresql.org/pgsql-bugs/2007-10/msg00007.php">http://archives.postgresql.org/pgsql-bugs/2007-10/msg00007.php</a>
</p>
Bruce Momjian's avatar
Bruce Momjian committed
555
    </li><li>Add ALTER DOMAIN to modify the underlying data type
Bruce Momjian's avatar
Bruce Momjian committed
556
    </li><li>%Allow ALTER TABLE ... ALTER CONSTRAINT ... RENAME
557
<p>          <a href="http://archives.postgresql.org/pgsql-patches/2006-02/msg00168.php">http://archives.postgresql.org/pgsql-patches/2006-02/msg00168.php</a>
558
</p>
Bruce Momjian's avatar
Bruce Momjian committed
559
    </li><li>%Allow ALTER TABLE to change constraint deferrability and actions
Bruce Momjian's avatar
Bruce Momjian committed
560
    </li><li>Add missing object types for ALTER ... SET SCHEMA
561
    </li><li>Allow ALTER TABLESPACE to move to different directories
562
    </li><li>Allow databases to be moved to different tablespaces
563 564
    </li><li>Allow moving system tables to other tablespaces, where possible
<p>          Currently non-global system tables must be in the default database
565
          tablespace. Global system tables can never be moved.
566
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
567
    </li><li>Prevent parent tables from altering or dropping constraints
568 569 570 571
          like CHECK that are inherited by child tables unless CASCADE
          is used
    </li><li>%Prevent child tables from altering or dropping constraints
          like CHECK that were inherited from the parent table
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
572
    </li><li>Have ALTER INDEX update the name of a constraint using that index
Bruce Momjian's avatar
Bruce Momjian committed
573
    </li><li>Add ALTER TABLE RENAME CONSTRAINT, update index name also
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
574 575 576 577
    </li><li>Allow column display reordering by recording a display,
          storage, and permanent id for every column?
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg00782.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg00782.php</a>
</p>
578 579 580
  </li></ul>
  </li><li>CLUSTER
  <ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
581
    <li>-<em>Make CLUSTER preserve recently-dead tuples per MVCC requirements</em>
582
    </li><li>Automatically maintain clustering on a table
583 584
<p>          This might require some background daemon to maintain clustering
          during periods of low usage. It might also require tables to be only
Bruce Momjian's avatar
Bruce Momjian committed
585
          partially filled for easier reorganization.  Another idea would
586 587 588 589
          be to create a merged heap/index data file so an index lookup would
          automatically access the heap data too.  A third idea would be to
          store heap rows in hashed groups, perhaps using a user-supplied
          hash function.
Bruce Momjian's avatar
Bruce Momjian committed
590
          <a href="http://archives.postgresql.org/pgsql-performance/2004-08/msg00349.php">http://archives.postgresql.org/pgsql-performance/2004-08/msg00349.php</a>
591
</p>
Bruce Momjian's avatar
Bruce Momjian committed
592
    </li><li>%Add default clustering to system tables
593 594 595
<p>          To do this, determine the ideal cluster index for each system
          table and set the cluster setting during initdb.
</p>
Bruce Momjian's avatar
Bruce Momjian committed
596 597
    </li><li>%Add VERBOSE option to report tables as they are processed,
          like VACUUM VERBOSE
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
598
    </li><li>-<em>Add more logical syntax CLUSTER table USING index;</em>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
599
          support current syntax for backward compatibility
600 601 602 603 604 605 606
  </li></ul>
  </li><li>COPY
  <ul>
    <li>Allow COPY to report error lines and continue
<p>          This requires the use of a savepoint before each COPY line is
          processed, with ROLLBACK on COPY failure.
</p>
Bruce Momjian's avatar
Bruce Momjian committed
607 608
    </li><li>Allow COPY on a newly-created table to skip WAL logging
<p>          On crash recovery, the table involved in the COPY would
Bruce Momjian's avatar
Bruce Momjian committed
609
          be removed or have its heap and index files truncated.  One
Bruce Momjian's avatar
Bruce Momjian committed
610 611
          issue is that no other backend should be able to add to
          the table at the same time, which is something that is
Bruce Momjian's avatar
Bruce Momjian committed
612
          currently allowed.
Bruce Momjian's avatar
Bruce Momjian committed
613
</p>
614
  </li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
615 616 617
  </li><li>GRANT/REVOKE
  <ul>
    <li>Allow column-level privileges
Bruce Momjian's avatar
Bruce Momjian committed
618
    </li><li>%Allow GRANT/REVOKE permissions to be applied to all schema objects
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
619
          with one command
Bruce Momjian's avatar
Bruce Momjian committed
620 621 622 623
<p>          The proposed syntax is:
</p><p>                GRANT SELECT ON ALL TABLES IN public TO phpuser;
                GRANT SELECT ON NEW TABLES IN public TO phpuser;
</p>
Bruce Momjian's avatar
Bruce Momjian committed
624
    </li><li>Allow GRANT/REVOKE permissions to be inherited by objects based on
Bruce Momjian's avatar
Bruce Momjian committed
625
          schema permissions
Bruce Momjian's avatar
Bruce Momjian committed
626
    </li><li>Allow SERIAL sequences to inherit permissions from the base table?
Bruce Momjian's avatar
Bruce Momjian committed
627
  </li></ul>
628 629
  </li><li>CURSOR
  <ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
630
    <li>-<em>Allow UPDATE/DELETE WHERE CURRENT OF cursor</em>
631
    </li><li>Prevent DROP TABLE from dropping a row referenced by its own open
Bruce Momjian's avatar
Bruce Momjian committed
632
          cursor?
633 634 635 636
  </li></ul>
  </li><li>INSERT
  <ul>
    <li>Allow INSERT/UPDATE of the system-generated oid value for a row
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
637
    </li><li>In rules, allow VALUES() to contain a mixture of 'old' and 'new'
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
638
          references
639
  </li></ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
640
  </li><li>SHOW/SET
641
  <ul>
Bruce Momjian's avatar
Bruce Momjian committed
642
    <li>Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM
643
          ANALYZE, and CLUSTER
Bruce Momjian's avatar
Bruce Momjian committed
644
    </li><li>Add SET PATH for schemas?
645 646 647
<p>          This is basically the same as SET search_path.
</p>
  </li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
648 649 650 651 652 653
  </li><li>Referential Integrity
  <ul>
    <li>Add MATCH PARTIAL referential integrity
    </li><li>Change foreign key constraint for array -&gt; element to mean element
          in array?
    </li><li>Enforce referential integrity for system tables
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
654 655 656 657
    </li><li>Fix problem when cascading referential triggers make changes on
          cascaded tables, seeing the tables in an intermediate state
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2005-09/msg00174.php">http://archives.postgresql.org/pgsql-hackers/2005-09/msg00174.php</a>
          <a href="http://archives.postgresql.org/pgsql-hackers/2005-09/msg00174.php">http://archives.postgresql.org/pgsql-hackers/2005-09/msg00174.php</a>
658 659 660 661 662 663
</p>
    </li><li>Allow DEFERRABLE and end-of-statement UNIQUE constraints?
<p>          This would allow UPDATE tab SET col = col + 1 to work if col has
          a unique index.  Currently, uniqueness checks are done while the
          command is being executed, rather than at the end of the statement
          or transaction.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
664 665
</p>
<p>          <a href="http://people.planetpostgresql.org/greg/index.php?/archives/2006/06/10.html">http://people.planetpostgresql.org/greg/index.php?/archives/2006/06/10.html</a>
666
          <a href="http://archives.postgresql.org/pgsql-hackers/2006-09/msg01458.php">http://archives.postgresql.org/pgsql-hackers/2006-09/msg01458.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
667
</p>
Bruce Momjian's avatar
Bruce Momjian committed
668
  </li></ul>
669
  </li><li>Server-Side Languages
670
  <ul>
671 672 673
    <li>PL/pgSQL
    <ul>
      <li>Fix RENAME to work on variables other than OLD/NEW
Bruce Momjian's avatar
Bruce Momjian committed
674
<p>                  <a href="http://archives.postgresql.org/pgsql-hackers/2002-03/msg00591.php">http://archives.postgresql.org/pgsql-hackers/2002-03/msg00591.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
675
                  <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg01615.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg01615.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
676
                  <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg01587.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg01587.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
677
</p>
678
      </li><li>Allow function parameters to be passed by name,
Bruce Momjian's avatar
Fix:  
Bruce Momjian committed
679
                  get_employee_salary(12345 AS emp_id, 2001 AS tax_year)
Bruce Momjian's avatar
Bruce Momjian committed
680
      </li><li>Add Oracle-style packages  (Pavel)
Bruce Momjian's avatar
Bruce Momjian committed
681
<p>                  A package would be a schema with session-local variables,
Bruce Momjian's avatar
Bruce Momjian committed
682
                  public/private functions, and initialization functions.  It
Bruce Momjian's avatar
Bruce Momjian committed
683 684 685
                  is also possible to implement these capabilities
                  in all schemas and not use a separate "packages"
                  syntax at all.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
686 687
</p>
<p>                  <a href="http://archives.postgresql.org/pgsql-hackers/2006-08/msg00384.php">http://archives.postgresql.org/pgsql-hackers/2006-08/msg00384.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
688
</p>
689 690 691 692 693 694 695 696 697
      </li><li>Allow handling of %TYPE arrays, e.g. tab.col%TYPE[<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?"></a>]
      </li><li>Allow listing of record column names, and access to
                  record columns via variables, e.g. columns := r.(*),
                  tval2 := r.(colname)
<p>                  <a href="http://archives.postgresql.org/pgsql-patches/2005-07/msg00458.php">http://archives.postgresql.org/pgsql-patches/2005-07/msg00458.php</a>
                  <a href="http://archives.postgresql.org/pgsql-patches/2006-05/msg00302.php">http://archives.postgresql.org/pgsql-patches/2006-05/msg00302.php</a>
                  <a href="http://archives.postgresql.org/pgsql-patches/2006-06/msg00031.php">http://archives.postgresql.org/pgsql-patches/2006-06/msg00031.php</a>
</p>
      </li><li>Add single-step debugging of functions
Bruce Momjian's avatar
Bruce Momjian committed
698 699
      </li><li>-<em>Add support for MOVE cursors</em>
      </li><li>Add support for SCROLL cursors
700
      </li><li>Add support for WITH HOLD cursors
Bruce Momjian's avatar
Bruce Momjian committed
701
      </li><li>Allow RETURN to return row or record functions
702
<p>                  <a href="http://archives.postgresql.org/pgsql-patches/2005-11/msg00045.php">http://archives.postgresql.org/pgsql-patches/2005-11/msg00045.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
703 704
                  <a href="http://archives.postgresql.org/pgsql-patches/2006-08/msg00397.php">http://archives.postgresql.org/pgsql-patches/2006-08/msg00397.php</a>
                  <a href="http://archives.postgresql.org/pgsql-hackers/2006-09/msg00388.php">http://archives.postgresql.org/pgsql-hackers/2006-09/msg00388.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
705 706 707 708
</p>
      </li><li>Fix problems with RETURN NEXT on tables with
                  dropped/added columns after function creation
<p>                  <a href="http://archives.postgresql.org/pgsql-patches/2006-02/msg00165.php">http://archives.postgresql.org/pgsql-patches/2006-02/msg00165.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
709 710 711 712 713
</p>
      </li><li>Allow row and record variables to be set to NULL constants,
                  and allow NULL tests on such variables
<p>                  Because a row is not scalar, do not allow assignment
                  from NULL-valued scalars.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
714 715
</p>
<p>                  <a href="http://archives.postgresql.org/pgsql-hackers/2006-10/msg00070.php">http://archives.postgresql.org/pgsql-hackers/2006-10/msg00070.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
716
</p>
717 718 719
    </li></ul>
    </li><li>Other
    <ul>
Bruce Momjian's avatar
Bruce Momjian committed
720
      <li>Add table function support to pltcl, plpythonu
721 722 723
      </li><li>Add support for polymorphic arguments and return types to
                  languages other than PL/PgSQL
      </li><li>Add capability to create and call PROCEDURES
Bruce Momjian's avatar
Bruce Momjian committed
724
      </li><li>Add support for OUT and INOUT parameters to languages other
725
                  than PL/PgSQL
Bruce Momjian's avatar
Bruce Momjian committed
726
      </li><li>Add PL/PythonU tracebacks
Bruce Momjian's avatar
Bruce Momjian committed
727
<p>                  <a href="http://archives.postgresql.org/pgsql-patches/2006-02/msg00288.php">http://archives.postgresql.org/pgsql-patches/2006-02/msg00288.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
728
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
729
      </li><li>-<em>Allow PL/PythonU to return boolean rather than 1/0</em>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
730 731 732 733
      </li><li>Allow data to be passed in native language formats, rather
                  than only text
<p>                  <a href="http://archives.postgresql.org/pgsql-hackers/2007-05/msg00289.php">http://archives.postgresql.org/pgsql-hackers/2007-05/msg00289.php</a>
</p>
734
    </li></ul>
735 736
  </li></ul>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
737
<h1><a name="section_9">Clients</a></h1>
738 739

<ul>
Bruce Momjian's avatar
Bruce Momjian committed
740
  <li>Have pg_ctl look at PGHOST in case it is a socket directory?
741 742 743 744 745 746
  </li><li>Allow pg_ctl to work properly with configuration files located outside
  the PGDATA directory
<p>  pg_ctl can not read the pid file because it isn't located in the
  config directory but in the PGDATA directory.  The solution is to
  allow pg_ctl to read and understand postgresql.conf to find the
  data_directory value.
747
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
748 749 750
  </li><li>Make consistent use of long/short command options --- pg_ctl needs
  long ones, pg_config doesn't have short ones, postgres doesn't have
  enough long ones, etc.
751 752 753 754 755 756 757 758
  </li><li>psql
  <ul>
    <li>Have psql show current values for a sequence
    </li><li>Move psql backslash database information into the backend, use
          mnemonic commands? [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?psql">psql</a>]
<p>          This would allow non-psql clients to pull the same information out
          of the database as psql.
</p>
Bruce Momjian's avatar
Bruce Momjian committed
759
    </li><li>Fix psql's \d commands more consistent
Bruce Momjian's avatar
Bruce Momjian committed
760
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2004-11/msg00014.php">http://archives.postgresql.org/pgsql-hackers/2004-11/msg00014.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
761
          <a href="http://archives.postgresql.org/pgsql-hackers/2004-11/msg00014.php">http://archives.postgresql.org/pgsql-hackers/2004-11/msg00014.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
762
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
763
    </li><li>-<em>Allow psql \pset boolean variables to set to fixed values, rather</em>
764 765
          than toggle
    </li><li>Consistently display privilege information for all objects in psql
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
766
    </li><li>Add auto-expanded mode so expanded output is used if the row
Bruce Momjian's avatar
Bruce Momjian committed
767
          length is wider than the screen width.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
768
<p>          Consider using auto-expanded mode for backslash commands like \df+.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
769 770 771 772
</p>
    </li><li>Prevent tab completion of SET TRANSACTION from querying the
          database and therefore preventing the transaction isolation
          level from being set.
Bruce Momjian's avatar
Bruce Momjian committed
773
<p>          Currently SET &lt;tab&gt; causes a database lookup to check all
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
774 775 776
          supported session variables.  This query causes problems
          because setting the transaction isolation level must be the
          first statement of a transaction.
Bruce Momjian's avatar
Bruce Momjian committed
777
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
778 779
    </li><li>Consider parsing the -c string into individual queries so each
          is run in its own transaction
780
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg00291.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg00291.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
781
</p>
Bruce Momjian's avatar
Bruce Momjian committed
782 783 784 785
    </li><li>Add a \set variable to control whether \s displays line numbers
<p>          Another option is to add \# which lists line numbers, and
          allows command execution.
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
786
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg00255.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg00255.php</a>
787
</p>
788
  </li></ul>
789 790
  </li><li>pg_dump
  <ul>
Bruce Momjian's avatar
Bruce Momjian committed
791
    <li>%Add dumping of comments on index columns and composite type columns
Bruce Momjian's avatar
Bruce Momjian committed
792
    </li><li>%Add full object name to the tag field.  eg. for operators we need
793
          '=(integer, integer)', instead of just '='.
Bruce Momjian's avatar
Bruce Momjian committed
794 795 796
    </li><li>Add pg_dumpall custom format dumps?
    </li><li>Remove unnecessary function pointer abstractions in pg_dump source
          code
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
797 798
    </li><li>Allow selection of individual object(s) of all types, not just
          tables
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
799
    </li><li>In a selective dump, allow dumping of an object and all its
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
800
          dependencies
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
801
    </li><li>Add options like pg_restore -l and -L to pg_dump
Bruce Momjian's avatar
Bruce Momjian committed
802
    </li><li>Stop dumping CASCADE on DROP TYPE commands in clean mode
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
803 804
    </li><li>Allow pg_dump --clean to drop roles that own objects or have
          privileges
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
805
    </li><li>-<em>Add -f to pg_dumpall</em>
806
  </li></ul>
807
  </li><li>ecpg
808 809 810 811 812
  <ul>
    <li>Docs
<p>          Document differences between ecpg and the SQL standard and
          information about the Informix-compatibility module.
</p>
Bruce Momjian's avatar
Bruce Momjian committed
813
    </li><li>Solve cardinality &gt; 1 for input descriptors / variables?
814 815
    </li><li>Add a semantic check level, e.g. check if a table really exists
    </li><li>fix handling of DB attributes that are arrays
Bruce Momjian's avatar
Bruce Momjian committed
816
    </li><li>Use backend PREPARE/EXECUTE facility for ecpg where possible
817 818
    </li><li>Implement SQLDA
    </li><li>Fix nested C comments
Bruce Momjian's avatar
Bruce Momjian committed
819
    </li><li>%sqlwarn[<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?6">6</a>] should be 'W' if the PRECISION or SCALE value specified
820 821
    </li><li>Make SET CONNECTION thread-aware, non-standard?
    </li><li>Allow multidimensional arrays
Bruce Momjian's avatar
Bruce Momjian committed
822
    </li><li>Add internationalized message strings
Bruce Momjian's avatar
Bruce Momjian committed
823
    </li><li>Implement COPY FROM STDIN
824
  </li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
825 826
  </li><li>libpq
  <ul>
Bruce Momjian's avatar
Bruce Momjian committed
827
    <li>Add PQescapeIdentifierConn()
Bruce Momjian's avatar
Bruce Momjian committed
828
    </li><li>Prevent PQfnumber() from lowercasing unquoted the column name
Bruce Momjian's avatar
Bruce Momjian committed
829
<p>          PQfnumber() should never have been doing lowercasing, but
830 831
          historically it has so we need a way to prevent it
</p>
Bruce Momjian's avatar
Bruce Momjian committed
832
    </li><li>Allow statement results to be automatically batched to the client
Bruce Momjian's avatar
Bruce Momjian committed
833
<p>          Currently all statement results are transferred to the libpq
Bruce Momjian's avatar
Bruce Momjian committed
834
          client before libpq makes the results available to the
835
          application.  This feature would allow the application to make
Bruce Momjian's avatar
Bruce Momjian committed
836
          use of the first result rows while the rest are transferred, or
837
          held on the server waiting for them to be requested by libpq.
838
          One complexity is that a statement like SELECT 1/col could error
839
          out mid-way through the result set.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
840
    <li>Fix SSL retry to avoid useless repeated connection attempts and
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
841
          ensuing misleading error messages
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
842 843
    </li><li>Consider disallowing multiple queries in PQexec() as an
          additional barrier to SQL injection attacks
844
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg00184.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg00184.php</a>
845 846 847
</p>
    </li><li>Add PQexecf() that allows complex parameter substitution
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg01803.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg01803.php</a>
848
</p>
Bruce Momjian's avatar
Bruce Momjian committed
849
  </li></ul>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
850
</p></ul>
Bruce Momjian's avatar
Bruce Momjian committed
851
<h1><a name="section_10">Triggers</a></h1>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
852

853
<ul>
Bruce Momjian's avatar
Bruce Momjian committed
854
  <li>Add deferred trigger queue file
855 856 857
<p>  Right now all deferred trigger information is stored in backend
  memory.  This could exhaust memory for very large trigger queues.
  This item involves dumping large queues into files.
Bruce Momjian's avatar
Bruce Momjian committed
858
</p>
859 860 861 862
  </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
  system tables, and committing the transaction.  ALTER TABLE ...
Bruce Momjian's avatar
Bruce Momjian committed
863
  TRIGGER requires a table lock so it is not ideal for this usage.
864 865 866 867 868 869
</p>
  </li><li>With disabled triggers, allow pg_dump to use ALTER TABLE ADD FOREIGN KEY
<p>  If the dump is known to be valid, allow foreign keys to be added
  without revalidating the data.
</p>
  </li><li>Allow statement-level triggers to access modified rows
Bruce Momjian's avatar
Bruce Momjian committed
870
  </li><li>Support triggers on columns
871
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2005-07/msg00107.php">http://archives.postgresql.org/pgsql-patches/2005-07/msg00107.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
872
</p>
873 874 875 876 877
  </li><li>Allow AFTER triggers on system tables
<p>  System tables are modified in many places in the backend without going
  through the executor and therefore not causing triggers to fire. To
  complete this item, the functions that modify system tables will have
  to fire triggers.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
878 879 880
</p>
  </li><li>Tighten trigger permission checks
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg00564.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg00564.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
881 882 883
</p>
  </li><li>Allow BEFORE INSERT triggers on views
<p>  <a href="http://archives.postgresql.org/pgsql-general/2007-02/msg01466.php">http://archives.postgresql.org/pgsql-general/2007-02/msg01466.php</a>
884 885
</p>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
886
<h1><a name="section_11">Dependency Checking</a></h1>
887 888

<ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
889
  <li>-<em>Flush cached query plans when the dependent objects change or</em>
Bruce Momjian's avatar
Bruce Momjian committed
890
  when new ANALYZE statistics are available
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
891 892
  </li><li>-<em>Track dependencies in function bodies and recompile/invalidate</em>
  </li><li>-<em>Invalidate prepared queries, like INSERT, when the table definition</em>
Bruce Momjian's avatar
Bruce Momjian committed
893
  is altered
894
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
895
<h1><a name="section_12">Indexes</a></h1>
896

Bruce Momjian's avatar
Bruce Momjian committed
897
<ul>
898
  <li>Add UNIQUE capability to non-btree indexes
Bruce Momjian's avatar
Bruce Momjian committed
899 900 901 902 903 904 905 906 907
  </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>Allow the creation of on-disk bitmap indexes which can be quickly
  combined with other bitmap indexes
<p>  Such indexes could be more compact if there are only a few distinct values.
  Such indexes can also be compressed.  Keeping such indexes updated can be
  costly.
Bruce Momjian's avatar
Bruce Momjian committed
908 909 910
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2005-07/msg00512.php">http://archives.postgresql.org/pgsql-patches/2005-07/msg00512.php</a>
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg01107.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg01107.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
911
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
912
  </li><li>-<em>Allow use of indexes to search for NULLs</em>
Bruce Momjian's avatar
Bruce Momjian committed
913 914
  </li><li>Allow accurate statistics to be collected on indexes with more than
  one column or expression indexes, perhaps using per-index statistics
Bruce Momjian's avatar
Bruce Momjian committed
915
<p>  <a href="http://archives.postgresql.org/pgsql-performance/2006-10/msg00222.php">http://archives.postgresql.org/pgsql-performance/2006-10/msg00222.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
916
  <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg01131.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg01131.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
917
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
918
  </li><li>-<em>Allow the creation of indexes with mixed ascending/descending</em>
Bruce Momjian's avatar
Bruce Momjian committed
919
  specifiers
Bruce Momjian's avatar
Bruce Momjian committed
920
  </li><li>Consider compressing indexes by storing key values duplicated in
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
921
  several rows as a single index entry
Bruce Momjian's avatar
Bruce Momjian committed
922
<p>  This is difficult because it requires datatype-specific knowledge.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
923 924 925 926 927 928
</p>
  </li><li>Add REINDEX CONCURRENTLY, like CREATE INDEX CONCURRENTLY
<p>  This is difficult because you must upgrade to an exclusive table lock
  to replace the existing index file.  CREATE INDEX CONCURRENTLY does not
  have this complication.  This would allow index compaction without
  downtime.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
929 930 931 932
</p>
  </li><li>Allow multiple indexes to be created concurrently, ideally via a
  single heap scan, and have a restore of a pg_dump somehow use it
<p>  <a href="http://archives.postgresql.org/pgsql-general/2007-05/msg01274.php">http://archives.postgresql.org/pgsql-general/2007-05/msg01274.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
933
</p>
934 935 936 937 938 939 940 941 942 943 944 945
  </li><li>Inheritance
  <ul>
    <li>Allow inherited tables to inherit indexes, UNIQUE constraints,
          and primary/foreign keys
    </li><li>Honor UNIQUE INDEX on base column in INSERTs/UPDATEs
          on inherited table, e.g.  INSERT INTO inherit_table
          (unique_index_col) VALUES (dup) should fail
<p>          The main difficulty with this item is the problem of
          creating an index that can span multiple tables.
</p>
    </li><li>Allow SELECT ... FOR UPDATE on inherited tables
  </li></ul>
946 947 948 949 950 951
  </li><li>GIST
  <ul>
    <li>Add more GIST index support for geometric data types
    </li><li>Allow GIST indexes to create certain complex index types, like
          digital trees (see Aoki)
  </li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
952
  </li><li>Hash
Bruce Momjian's avatar
Bruce Momjian committed
953
  <a href="http://archives.postgresql.org/pgsql-hackers/2007-09/msg00051.php">http://archives.postgresql.org/pgsql-hackers/2007-09/msg00051.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
954 955
  <ul>
    <li>Pack hash index buckets onto disk pages more efficiently
Bruce Momjian's avatar
Bruce Momjian committed
956
<p>          Currently only one hash bucket can be stored on a page. Ideally
Bruce Momjian's avatar
Bruce Momjian committed
957 958
          several hash buckets could be stored on a single page and greater
          granularity used for the hash algorithm.
959 960
</p>
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2004-06/msg00168.php">http://archives.postgresql.org/pgsql-hackers/2004-06/msg00168.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
961 962 963 964 965
</p>
    </li><li>Consider sorting hash buckets so entries can be found using a
          binary search, rather than a linear scan
    </li><li>In hash indexes, consider storing the hash value with or instead
          of the key itself
Bruce Momjian's avatar
Bruce Momjian committed
966 967
    </li><li>Add WAL logging for crash recovery
    </li><li>Allow multi-column hash indexes
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
968 969 970
    </li><li>During index creation, pre-sort the tuples to improve build speed
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg01199.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg01199.php</a>
</p>
Bruce Momjian's avatar
Bruce Momjian committed
971 972
  </li></ul>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
973
<h1><a name="section_13">Fsync</a></h1>
974 975 976 977

<ul>
  <li>Improve commit_delay handling to reduce fsync()
  </li><li>Determine optimal fdatasync/fsync, O_SYNC/O_DSYNC options
Bruce Momjian's avatar
Bruce Momjian committed
978
<p>  Ideally this requires a separate test program that can be run
Bruce Momjian's avatar
Bruce Momjian committed
979 980
  at initdb time or optionally later.  Consider O_SYNC when
  O_DIRECT exists.
Bruce Momjian's avatar
Bruce Momjian committed
981
</p>
Bruce Momjian's avatar
Bruce Momjian committed
982
  </li><li>%Add an option to sync() before fsync()'ing checkpoint files
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
983
  </li><li>Add program to test if fsync has a delay compared to non-fsync
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
984
  </li><li>-<em>Reduce checkpoint performance degredation by forcing data to disk</em>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
985
  more evenly
986
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
987
<h1><a name="section_14">Cache Usage</a></h1>
Bruce Momjian's avatar
Bruce Momjian committed
988

989
<ul>
990 991 992 993 994 995 996 997
  <li>Allow free-behind capability for large sequential scans to avoid
  kernel cache spoiling
<p>  Posix_fadvise() can control both sequential/random file caching and
  free-behind behavior, but it is unclear how the setting affects other
  backends that also have the file open, and the feature is not supported
  on all operating systems.
</p>
  </li><li>Speed up COUNT(*)
998 999 1000 1001 1002 1003
<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
  invalidated if anyone modifies the table.  Another idea is to
  get a count directly from a unique index, but for this to be
  faster than a sequential scan it must avoid access to the heap
  to obtain tuple visibility information.
1004 1005 1006 1007 1008 1009
</p>
  </li><li>Provide a way to calculate an "estimated COUNT(*)"
<p>  Perhaps by using the optimizer's cardinality estimates or random
  sampling.
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2005-11/msg00943.php">http://archives.postgresql.org/pgsql-hackers/2005-11/msg00943.php</a>
1010 1011
</p>
  </li><li>Allow data to be pulled directly from indexes
Bruce Momjian's avatar
Bruce Momjian committed
1012 1013 1014 1015 1016 1017
<p>  Currently indexes do not have enough tuple visibility information
  to allow data to be pulled from the index without also accessing
  the heap.  One way to allow this is to set a bit on index tuples
  to indicate if a tuple is currently visible to all transactions
  when the first valid heap lookup happens.  This bit would have to
  be cleared when a heap tuple is expired.
1018 1019
</p>
<p>  Another idea is to maintain a bitmap of heap pages where all rows
Bruce Momjian's avatar
Bruce Momjian committed
1020
  are visible to all backends, and allow index lookups to reference
1021 1022 1023 1024
  that bitmap to avoid heap lookups, perhaps the same bitmap we might
  add someday to determine which heap pages need vacuuming.  Frequently
  accessed bitmaps would have to be stored in shared memory.  One 8k
  page of bitmaps could track 512MB of heap pages.
1025 1026 1027 1028 1029 1030 1031
</p>
<p>  A third idea would be for a heap scan to check if all rows are visible
  and if so set a per-table flag which can be checked by index scans. 
  Any change to the table would have to clear the flag.  To detect
  changes during the heap scan a counter could be set at the start and
  checked at the end --- if it is the same, the table has not been
  modified --- any table change would increment the counter.
1032
</p>
1033
  </li><li>Consider automatic caching of statements at various levels:
1034 1035 1036 1037 1038
  <ul>
    <li>Parsed query tree
    </li><li>Query execute plan
    </li><li>Query results
  </li></ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1039
  </li><li>-<em>Allow sequential scans to take advantage of other concurrent</em>
Bruce Momjian's avatar
Bruce Momjian committed
1040
  sequential scans, also called "Synchronised Scanning"
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1041 1042
  </li><li>Consider increasing internal areas when shared buffers is increased
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2005-10/msg01419.php">http://archives.postgresql.org/pgsql-hackers/2005-10/msg01419.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1043 1044 1045 1046
</p>
  </li><li>Consider decreasing the amount of memory used by PrivateRefCount
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-11/msg00797.php">http://archives.postgresql.org/pgsql-hackers/2006-11/msg00797.php</a>
  <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg00752.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg00752.php</a>
1047
</p>
1048
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1049
<h1><a name="section_15">Vacuum</a></h1>
1050 1051 1052

<ul>
  <li>Improve speed with indexes
Bruce Momjian's avatar
Bruce Momjian committed
1053 1054 1055
<p>  For large table adjustments during VACUUM FULL, it is faster to cluster
  or reindex rather than update the index.  Also, index updates can bloat
  the index.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1056 1057
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg00024.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg00024.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1058
  <a href="http://archives.postgresql.org/pgsql-performance/2007-05/msg00296.php">http://archives.postgresql.org/pgsql-performance/2007-05/msg00296.php</a>
1059
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1060 1061
  </li><li>Reduce lock time during VACUUM FULL by moving tuples with read lock,
  then write lock and truncate table
1062 1063 1064
<p>  Moved tuples are invisible to other backends so they don't require a
  write lock. However, the read lock promotion to write lock could lead
  to deadlock situations.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1065
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1066 1067
  </li><li>Auto-fill the free space map by scanning the buffer cache or by
  checking pages written by the background writer
1068
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-02/msg01125.php">http://archives.postgresql.org/pgsql-hackers/2006-02/msg01125.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1069
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-03/msg00011.php">http://archives.postgresql.org/pgsql-hackers/2006-03/msg00011.php</a>
1070
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1071 1072 1073 1074 1075
  </li><li>Create a bitmap of pages that need vacuuming
<p>  Instead of sequentially scanning the entire table, have the background
  writer or some other process record pages that have expired rows, then
  VACUUM can look at just those pages rather than the entire table.  In
  the event of a system crash, the bitmap would probably be invalidated.
Bruce Momjian's avatar
Bruce Momjian committed
1076 1077 1078 1079
  One complexity is that index entries still have to be vacuumed, and
  doing this without an index scan (by using the heap values to find the
  index entry) might be slow and unreliable, especially for user-defined
  index functions.
Bruce Momjian's avatar
Bruce Momjian committed
1080 1081 1082
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg01188.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg01188.php</a>
  <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg00121.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg00121.php</a>
1083
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1084 1085
  </li><li>Allow FSM to return free space toward the beginning of the heap file,
  in hopes that empty pages at the end can be truncated by VACUUM
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1086 1087
  </li><li>Allow FSM page return free space based on table clustering, to assist
  in maintaining clustering?
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1088 1089 1090
  </li><li>-<em>Consider shrinking expired tuples to just their headers</em>
  </li><li>-<em>Allow heap reuse of UPDATEd rows if no indexed columns are changed,</em>
  and old and new versions are on the same heap page
Bruce Momjian's avatar
Bruce Momjian committed
1091
  </li><li>Improve dead row detection during multi-statement transactions usage
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1092 1093
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2007-03/msg00358.php">http://archives.postgresql.org/pgsql-patches/2007-03/msg00358.php</a>
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1094
  </li><li>-<em>Reduce XID consumption of read-only queries</em>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1095 1096
  </li><li>Prevent long-lived temporary tables from causing frozen-Xid advancement
   starvation
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1097
  </li><li>Auto-vacuum
1098
  <ul>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1099
    <li>Use free-space map information to guide refilling
Bruce Momjian's avatar
Bruce Momjian committed
1100 1101
    </li><li>%Issue log message to suggest VACUUM FULL if a table is nearly
          empty?
Bruce Momjian's avatar
Bruce Momjian committed
1102
    </li><li>Consider logging activity either to the logs or a system view
1103
    </li><li>-<em>Turn on by default</em>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1104
    </li><li>-<em>Allow multiple vacuums so large tables do not starve small</em>
Bruce Momjian's avatar
Bruce Momjian committed
1105 1106 1107
          tables
    </li><li>Improve control of auto-vacuum
<p>          <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg00876.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg00876.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1108 1109 1110 1111
</p>
    </li><li>Prevent long-lived temporary tables from causing frozen-xid
          advancement starvation
<p>          <a href="http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php">http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1112
</p>
1113 1114
  </li></ul>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1115
<h1><a name="section_16">Locking</a></h1>
1116 1117

<ul>
Bruce Momjian's avatar
Bruce Momjian committed
1118
  <li>Fix priority ordering of read and write light-weight locks (Neil)
1119 1120
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2004-11/msg00893.php">http://archives.postgresql.org/pgsql-hackers/2004-11/msg00893.php</a>
  <a href="http://archives.postgresql.org/pgsql-hackers/2004-11/msg00905.php">http://archives.postgresql.org/pgsql-hackers/2004-11/msg00905.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1121 1122 1123 1124 1125
</p>
  </li><li>Fix problem when multiple subtransactions of the same outer transaction
  hold different types of locks, and one subtransaction aborts
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-11/msg01011.php">http://archives.postgresql.org/pgsql-hackers/2006-11/msg01011.php</a>
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg00001.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg00001.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1126
  <a href="http://archives.postgresql.org/pgsql-hackers/2007-02/msg00435.php">http://archives.postgresql.org/pgsql-hackers/2007-02/msg00435.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1127 1128 1129 1130
</p>
  </li><li>Allow UPDATEs on only non-referential integrity columns not to conflict
  with referential integrity locks
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-02/msg00073.php">http://archives.postgresql.org/pgsql-hackers/2007-02/msg00073.php</a>
1131
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1132
  </li><li>Add idle_in_transaction_timeout GUC so locks are not held for long
Bruce Momjian's avatar
Bruce Momjian committed
1133
  periods of time
1134
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1135
<h1><a name="section_17">Startup Time Improvements</a></h1>
1136 1137

<ul>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1138
  <li>Experiment with multi-threaded backend for backend creation [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?thread">thread</a>]
1139 1140
<p>  This would prevent the overhead associated with process creation. Most
  operating systems have trivial process creation time compared to
Bruce Momjian's avatar
Bruce Momjian committed
1141
  database startup overhead, but a few operating systems (Win32,
Bruce Momjian's avatar
Bruce Momjian committed
1142
  Solaris) might benefit from threading.  Also explore the idea of
1143
  a single session using multiple threads to execute a statement faster.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1144 1145 1146
</p>
  </li><li>Experiment with multi-threaded backend better resource utilization
<p>  This would allow a single query to make use of multiple CPU's or
Bruce Momjian's avatar
Bruce Momjian committed
1147 1148 1149 1150
  multiple I/O channels simultaneously.  One idea is to create a
  background reader that can pre-fetch sequential and index scan
  pages needed by other backends.  This could be expanded to allow
  concurrent reads from multiple devices in a partitioned table.
1151 1152 1153 1154 1155 1156 1157
</p>
  </li><li>Add connection pooling
<p>  It is unclear if this should be done inside the backend code or done
  by something external like pgpool. The passing of file descriptors to
  existing backends is one of the difficulties with a backend approach.
</p>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1158
<h1><a name="section_18">Write-Ahead Log</a></h1>
1159 1160 1161

<ul>
  <li>Eliminate need to write full pages to WAL before page modification [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?wal">wal</a>]
Bruce Momjian's avatar
Bruce Momjian committed
1162
<p>  Currently, to protect against partial disk page writes, we write
1163 1164 1165 1166
  full page images to WAL before they are modified so we can correct any
  partial page writes during recovery.  These pages can also be
  eliminated from point-in-time archive files.
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1167
  <ul>
Bruce Momjian's avatar
Bruce Momjian committed
1168
    <li>When off, write CRC to WAL and check file system blocks
Bruce Momjian's avatar
Bruce Momjian committed
1169
           on recovery
Bruce Momjian's avatar
Bruce Momjian committed
1170 1171 1172
<p>           If CRC check fails during recovery, remember the page in case
           a later CRC for that page properly matches.
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1173 1174 1175
    </li><li>Write full pages during file system write and not when
           the page is modified in the buffer cache
<p>           This allows most full page writes to happen in the background
Bruce Momjian's avatar
Bruce Momjian committed
1176 1177 1178
           writer.  It might cause problems for applying WAL on recovery
           into a partially-written page, but later the full page will be
           replaced from WAL.
Bruce Momjian's avatar
Bruce Momjian committed
1179 1180
</p>
  </li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1181
  </li><li>Allow WAL traffic to be streamed to another server for stand-by
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1182
  replication
1183
  </li><li>Reduce WAL traffic so only modified values are written rather than
Bruce Momjian's avatar
Bruce Momjian committed
1184 1185 1186
  entire rows
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-03/msg01589.php">http://archives.postgresql.org/pgsql-hackers/2007-03/msg01589.php</a>
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1187
  </li><li>-<em>Allow the pg_xlog directory location to be specified during initdb</em>
1188
  with a symlink back to the /data location
Bruce Momjian's avatar
Bruce Momjian committed
1189
  </li><li>Allow WAL information to recover corrupted pg_controldata
1190
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2006-06/msg00025.php">http://archives.postgresql.org/pgsql-patches/2006-06/msg00025.php</a>
1191
</p>
1192 1193 1194 1195 1196 1197
  </li><li>Find a way to reduce rotational delay when repeatedly writing
  last WAL page
<p>  Currently fsync of WAL requires the disk platter to perform a full
  rotation to fsync again. One idea is to write the WAL to different
  offsets that might reduce the rotational delay.
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1198
  </li><li>-<em>Allow buffered WAL writes and fsync</em>
Bruce Momjian's avatar
Bruce Momjian committed
1199 1200
  </li><li>Allow WAL logging to be turned off for a table, but the table
  might be dropped or truncated during crash recovery [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?walcontrol">walcontrol</a>]
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1201
<p>  Allow tables to bypass WAL writes and just fsync() dirty pages on
Bruce Momjian's avatar
Bruce Momjian committed
1202 1203 1204
  commit.  This should be implemented using ALTER TABLE, e.g. ALTER
  TABLE PERSISTENCE [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo? DROP | TRUNCATE | DEFAULT "> DROP | TRUNCATE | DEFAULT </a>].  Tables using
  non-default logging should not use referential integrity with
Bruce Momjian's avatar
Bruce Momjian committed
1205 1206 1207 1208 1209
  default-logging tables.  A table without dirty buffers during a
  crash could perhaps avoid the drop/truncate.
</p>
  </li><li>Allow WAL logging to be turned off for a table, but the table would
  avoid being truncated/dropped [<a href="http://momjian.postgresql.org/cgi-bin/pgtodo?walcontrol">walcontrol</a>]
Bruce Momjian's avatar
Bruce Momjian committed
1210
<p>  To do this, only a single writer can modify the table, and writes
Bruce Momjian's avatar
Bruce Momjian committed
1211
  must happen only on new pages so the new pages can be removed during
Bruce Momjian's avatar
Bruce Momjian committed
1212 1213
  crash recovery.  Readers can continue accessing the table.  Such
  tables probably cannot have indexes.  One complexity is the handling
Bruce Momjian's avatar
Bruce Momjian committed
1214
  of indexes on TOAST tables.
1215 1216
</p>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1217
<h1><a name="section_19">Optimizer / Executor</a></h1>
1218 1219

<ul>
Bruce Momjian's avatar
Bruce Momjian committed
1220
  <li>Improve selectivity functions for geometric operators
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1221
  </li><li>-<em>Allow ORDER BY ... LIMIT # to select high/low value without sort or</em>
1222
  index using a sequential scan for highest/lowest values
1223 1224 1225
  </li><li>Precompile SQL functions to avoid overhead
  </li><li>Create utility to compute accurate random_page_cost value
  </li><li>Improve ability to display optimizer analysis using OPTIMIZER_DEBUG
Bruce Momjian's avatar
Bruce Momjian committed
1226 1227
  </li><li>Have EXPLAIN ANALYZE issue NOTICE messages when the estimated and
  actual row counts differ by a specified percentage
1228
  </li><li>Consider using hash buckets to do DISTINCT, rather than sorting
Bruce Momjian's avatar
Bruce Momjian committed
1229 1230
<p>  This would be beneficial when there are few distinct values.  This is
  already used by GROUP BY.
1231
</p>
1232
  </li><li>Log statements where the optimizer row estimates were dramatically
Bruce Momjian's avatar
Bruce Momjian committed
1233
  different from the number of rows actually found?
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1234 1235
  </li><li>Consider compressed annealing to search for query plans
<p>  This might replace GEQO, <a href="http://sixdemonbag.org/Djinni">http://sixdemonbag.org/Djinni</a>.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1236
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1237
  </li><li>Improve merge join performance by allowing mark/restore of
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1238 1239
  tuple sources
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg00096.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg00096.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1240
</p>
1241
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1242
<h1><a name="section_20">Miscellaneous Performance</a></h1>
1243 1244 1245 1246 1247

<ul>
  <li>Do async I/O for faster random read-ahead of data
<p>  Async I/O allows multiple I/O requests to be sent to the disk with
  results coming back asynchronously.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1248 1249
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-10/msg00820.php">http://archives.postgresql.org/pgsql-hackers/2006-10/msg00820.php</a>
1250
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1251
  </li><li>Use mmap() rather than SYSV shared memory or to write WAL files?
1252 1253 1254 1255 1256 1257 1258 1259 1260
<p>  This would remove the requirement for SYSV SHM but would introduce
  portability issues. Anonymous mmap (or mmap to /dev/zero) is required
  to prevent I/O overhead.
</p>
  </li><li>Consider mmap()'ing files into a backend?
<p>  Doing I/O to large tables would consume a lot of address space or
  require frequent mapping/unmapping.  Extending the file also causes
  mapping problems that might require mapping only individual pages,
  leading to thousands of mappings.  Another problem is that there is no
1261
  way to <u>prevent</u> I/O to disk from the dirty shared buffers so changes
1262 1263 1264
  could hit disk before WAL is written.
</p>
  </li><li>Add a script to ask system configuration questions and tune postgresql.conf
Bruce Momjian's avatar
Done!  
Bruce Momjian committed
1265
  </li><li>-<em>Merge xmin/xmax/cmin/cmax back into three header fields</em>
Bruce Momjian's avatar
Bruce Momjian committed
1266 1267
  </li><li>Consider ways of storing rows more compactly on disk
  <ul>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1268
    <li>-<em>Support a smaller header for short variable-length fields</em>
Bruce Momjian's avatar
Bruce Momjian committed
1269
    </li><li>Reduce the row header size?
Bruce Momjian's avatar
Bruce Momjian committed
1270
    </li><li>Consider reducing on-disk varlena length from four bytes to
Bruce Momjian's avatar
Bruce Momjian committed
1271
          two because a heap row cannot be more than 64k in length
Bruce Momjian's avatar
Bruce Momjian committed
1272
  </li></ul>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1273
  </li><li>Consider increasing NUM_CLOG_BUFFERS
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1274 1275
  </li><li>Consider having the background writer update the transaction status
  hint bits before writing out the page
Bruce Momjian's avatar
Bruce Momjian committed
1276
  </li><li>Allow user configuration of TOAST thresholds
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1277
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-02/msg00213.php">http://archives.postgresql.org/pgsql-hackers/2007-02/msg00213.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1278 1279 1280 1281
</p>
  </li><li>Allow configuration of backend priorities via the operating system
<p>  Though backend priorities make priority inversion during lock
  waits possible, research shows that this is not a huge problem.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1282 1283
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-general/2007-02/msg00493.php">http://archives.postgresql.org/pgsql-general/2007-02/msg00493.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1284 1285 1286
</p>
  </li><li>Consider reducing memory used for shared buffer reference count
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2007-01/msg00752.php">http://archives.postgresql.org/pgsql-hackers/2007-01/msg00752.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1287
</p>
1288
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1289
<h1><a name="section_21">Source Code</a></h1>
1290 1291 1292 1293

<ul>
  <li>Add use of 'const' for variables in source tree
  </li><li>Move some things from /contrib into main tree
Bruce Momjian's avatar
Bruce Momjian committed
1294
  </li><li>%Remove warnings created by -Wcast-align
1295 1296 1297 1298
  </li><li>Move platform-specific ps status display info from ps_status.c to ports
  </li><li>Add optional CRC checksum to heap and index pages
  </li><li>Improve documentation to build only interfaces (Marc)
  </li><li>Remove or relicense modules that are not under the BSD license, if possible
Bruce Momjian's avatar
Bruce Momjian committed
1299
  </li><li>%Remove memory/file descriptor freeing before ereport(ERROR)
1300
  </li><li>Acquire lock on a relation before building a relcache entry for it
Bruce Momjian's avatar
Bruce Momjian committed
1301
  </li><li>%Promote debug_query_string into a server-side function current_query()
1302
  </li><li>Allow cross-compiling by generating the zic database on the target system
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1303
  </li><li>Improve NLS maintenance of libpgport messages linked onto applications
1304 1305
  </li><li>Allow ecpg to work with MSVC and BCC
  </li><li>Add xpath_array() to /contrib/xml2 to return results as an array
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1306 1307 1308
  </li><li>Clean up casting in /contrib/isn
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-11/msg00245.php">http://archives.postgresql.org/pgsql-hackers/2006-11/msg00245.php</a>
</p>
1309 1310 1311 1312
  </li><li>Allow building in directories containing spaces
<p>  This is probably not possible because 'gmake' and other compiler tools
  do not fully support quoting of paths with spaces.
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1313
  </li><li>Fix sgmltools so PDFs can be generated with bookmarks
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1314 1315
  </li><li>Use UTF8 encoding for NLS messages so all server encodings can
  read them properly
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1316
  </li><li>Update Bonjour to work with newer cross-platform SDK
Bruce Momjian's avatar
Bruce Momjian committed
1317
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-09/msg02238.php">http://archives.postgresql.org/pgsql-hackers/2006-09/msg02238.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1318
  <a href="http://archives.postgresql.org/pgsql-patches/2006-10/msg00048.php">http://archives.postgresql.org/pgsql-patches/2006-10/msg00048.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1319
</p>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1320 1321
  </li><li>Split out libpq pgpass and environment documentation sections to make
  it easier for non-developers to find
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1322
  </li><li>Consider detoasting keys before sorting
Bruce Momjian's avatar
Bruce Momjian committed
1323
  </li><li>Consider GnuTLS if OpenSSL license becomes a problem
1324
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2006-05/msg00040.php">http://archives.postgresql.org/pgsql-patches/2006-05/msg00040.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1325
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-12/msg01213.php">http://archives.postgresql.org/pgsql-hackers/2006-12/msg01213.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1326
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1327
  </li><li>Use strlcpy() rather than our StrNCpy() macro
Bruce Momjian's avatar
Bruce Momjian committed
1328
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-09/msg02108.php">http://archives.postgresql.org/pgsql-hackers/2006-09/msg02108.php</a>
1329
</p>
1330 1331
  </li><li>Consider changing documentation format from SGML to XML
<p>  <a href="http://archives.postgresql.org/pgsql-docs/2006-12/msg00152.php">http://archives.postgresql.org/pgsql-docs/2006-12/msg00152.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1332
</p>
1333 1334
  </li><li>-<em>Move NAMEDATALEN from postgres_ext.h to pg_config_manual.h</em>
  </li><li>Consider making NAMEDATALEN more configurable in future releases
Bruce Momjian's avatar
Bruce Momjian committed
1335
  </li><li>Update our code to handle 64-bit timezone files to match the zic
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1336
  source code, which now uses them
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1337 1338
  </li><li>Have configure choose integer datetimes by default
<p>  <a href="http://archives.postgresql.org/pgsql-patches/2007-05/msg00046.php">http://archives.postgresql.org/pgsql-patches/2007-05/msg00046.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1339
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1340
  </li><li>-<em>Fix problem with excessive logging during SSL disconnection</em>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1341 1342
<p>  <a href="http://archives.postgresql.org/pgsql-bugs/2006-12/msg00122.php">http://archives.postgresql.org/pgsql-bugs/2006-12/msg00122.php</a>
  <a href="http://archives.postgresql.org/pgsql-bugs/2007-05/msg00065.php">http://archives.postgresql.org/pgsql-bugs/2007-05/msg00065.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1343 1344 1345
</p>
  </li><li>Support scoped IPv6 addresses
<p>  <a href="http://archives.postgresql.org/pgsql-bugs/2007-05/msg00111.php">http://archives.postgresql.org/pgsql-bugs/2007-05/msg00111.php</a>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1346
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1347 1348 1349 1350 1351
  </li><li>Consider allowing 64-bit integers and floats to be passed by value on
  64-bit platforms
<p>  Also change 32-bit floats (float4) to be passed by value at the same
  time.
</p>
1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363
  </li><li>Win32
  <ul>
    <li>Remove configure.in check for link failure when cause is found
    </li><li>Remove readdir() errno patch when runtime/mingwex/dirent.c rev
          1.4 is released
    </li><li>Remove psql newline patch when we find out why mingw outputs an
          extra newline
    </li><li>Allow psql to use readline once non-US code pages work with
          backslashes
    </li><li>Re-enable timezone output on log_line_prefix '%t' when a
          shorter timezone string is available
    </li><li>Fix problem with shared memory on the Win32 Terminal Server
1364 1365 1366
    </li><li>Improve signal handling
<p>          <a href="http://archives.postgresql.org/pgsql-patches/2005-06/msg00027.php">http://archives.postgresql.org/pgsql-patches/2005-06/msg00027.php</a>
</p>
Bruce Momjian's avatar
Done:  
Bruce Momjian committed
1367
    </li><li>-<em>Add long file support for binary pg_dump output</em>
1368 1369 1370 1371 1372 1373
  </li></ul>
  </li><li>Wire Protocol Changes
  <ul>
    <li>Allow dynamic character set handling
    </li><li>Add decoded type, length, precision
    </li><li>Use compression?
1374
    </li><li>Update clients to use data types, typmod, schema.table.column names
1375
          of result sets using new statement protocol
1376 1377
  </li></ul>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1378
<h1><a name="section_22">Exotic Features</a></h1>
1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400

<ul>
  <li>Add pre-parsing phase that converts non-ISO syntax to supported
  syntax
<p>  This could allow SQL written for other databases to run without
  modification.
</p>
  </li><li>Allow plug-in modules to emulate features from other databases
  </li><li>Allow statements across databases or servers with transaction
  semantics
<p>  This can be done using dblink and two-phase commit.
</p>
  </li><li>Add the features of packages
  <ul>
    <li>Make private objects accessible only to objects in the same schema
    </li><li>Allow current_schema.objname to access current schema objects
    </li><li>Add session variables
    </li><li>Allow nested schemas
  </li></ul>
  </li><li>Consider allowing control of upper/lower case folding of unquoted
  identifiers
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2004-04/msg00818.php">http://archives.postgresql.org/pgsql-hackers/2004-04/msg00818.php</a>
1401
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-10/msg01527.php">http://archives.postgresql.org/pgsql-hackers/2006-10/msg01527.php</a>
1402 1403
</p>
</li></ul>
Bruce Momjian's avatar
Bruce Momjian committed
1404
<h1><a name="section_23">Features We Do <u>Not</u> Want</a></h1>
1405 1406

<ul>
Bruce Momjian's avatar
Bruce Momjian committed
1407
  <li>All backends running as threads in a single process (not wanted)
1408 1409 1410 1411
<p>  This eliminates the process protection we get from the current setup.
  Thread creation is usually the same overhead as process creation on
  modern systems, so it seems unwise to use a pure threaded model.
</p>
Bruce Momjian's avatar
Bruce Momjian committed
1412
  </li><li>Optimizer hints (not wanted)
1413 1414
<p>  Optimizer hints are used to work around problems in the optimizer.  We
  would rather have the problems reported and fixed.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1415 1416
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-hackers/2006-08/msg00506.php">http://archives.postgresql.org/pgsql-hackers/2006-08/msg00506.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1417 1418
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-10/msg00517.php">http://archives.postgresql.org/pgsql-hackers/2006-10/msg00517.php</a>
  <a href="http://archives.postgresql.org/pgsql-hackers/2006-10/msg00663.php">http://archives.postgresql.org/pgsql-hackers/2006-10/msg00663.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1419 1420 1421 1422
</p>
  </li><li>Allow AS in "SELECT col AS label" to be optional (not wanted)
<p>  Because we support postfix operators, it isn't possible to make AS
  optional and continue to use bison.
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1423 1424
</p>
<p>  <a href="http://archives.postgresql.org/pgsql-sql/2006-08/msg00164.php">http://archives.postgresql.org/pgsql-sql/2006-08/msg00164.php</a>
Bruce Momjian's avatar
Bruce Momjian committed
1425 1426
</p>
  </li><li>Embedded server (not wanted)
Bruce Momjian's avatar
Bruce Momjian committed
1427
<p>  While PostgreSQL clients runs fine in limited-resource environments, the
Bruce Momjian's avatar
Bruce Momjian committed
1428
  server requires multiple processes and a stable pool of resources to
Bruce Momjian's avatar
Bruce Momjian committed
1429 1430
  run reliabily and efficiently.  Stripping down the PostgreSQL server
  to run in the same process address space as the client application
1431
  would add too much complexity and failure cases.</p>
1432
</li></ul>
Bruce Momjian's avatar
Add:  
Bruce Momjian committed
1433
</li></ul></li></ul>
1434 1435
</body>
</html>