]> granicus.if.org Git - postgresql/blob - doc/TODO
TODO Done:
[postgresql] / doc / TODO
1 PostgreSQL TODO List
2 ====================
3 Current maintainer:     Bruce Momjian (bruce@momjian.us)
4 Last updated:           Thu Apr 17 16:56:51 EDT 2008
5
6 The most recent version of this document can be viewed at
7 http://www.postgresql.org/docs/faqs.TODO.html.
8
9 #A hyphen, "-", marks changes that will appear in the upcoming 8.3 release.#
10 #A percent sign, "%", marks items that are easier to implement.#
11
12 Bracketed items, "[]", have more detail.
13
14 This list contains all known PostgreSQL bugs and feature requests. If
15 you would like to work on an item, please read the Developer's FAQ
16 first.  There is also a developer's wiki at
17 http://developer.postgresql.org.
18
19
20 Administration
21 ==============
22
23 * -Allow administrators to safely terminate individual sessions either
24   via an SQL function or SIGTERM
25 * Check for unreferenced table files created by transactions that were
26   in-progress when the server terminated abruptly
27
28   http://archives.postgresql.org/pgsql-patches/2006-06/msg00096.php
29
30 * Set proper permissions on non-system schemas during db creation
31
32   Currently all schemas are owned by the super-user because they are copied
33   from the template1 database.  However, since all objects are inherited
34   from the template database, it is not clear that setting schemas to the db
35   owner is correct.
36
37 * Add function to report the time of the most recent server reload
38 * Allow statistics collector information to be pulled from the collector
39   process directly, rather than requiring the collector to write a
40   filesystem file twice a second?
41 * Reduce file system activity overhead of statistics file pgstat.stat
42
43   http://archives.postgresql.org/pgsql-general/2007-12/msg00106.php
44
45 * Allow statistics last vacuum/analyze execution times to be displayed
46   without requiring stats_row_level to be enabled
47
48   http://archives.postgresql.org/pgsql-docs/2007-04/msg00028.php
49
50 * Allow log_min_messages to be specified on a per-module basis
51
52   This would allow administrators to see more detailed information from
53   specific sections of the backend, e.g. checkpoints, autovacuum, etc.
54   Another idea is to allow separate configuration files for each module,
55   or allow arbitrary SET commands to be passed to them.
56
57 * Simplify ability to create partitioned tables
58
59   This would allow creation of partitioned tables without requiring
60   creation of triggers or rules for INSERT/UPDATE/DELETE, and constraints
61   for rapid partition selection.  Options could include range and hash
62   partition selection.
63
64   http://archives.postgresql.org/pgsql-hackers/2007-03/msg00375.php
65   http://archives.postgresql.org/pgsql-hackers/2007-04/msg00151.php
66   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00028.php
67   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00248.php
68   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00387.php
69   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00413.php
70
71 * Allow auto-selection of partitioned tables for min/max() operations
72 * Allow more complex user/database default GUC settings
73
74   Currently ALTER USER and ALTER DATABASE support per-user and
75   per-database defaults.  Consider adding per-user-and-database
76   defaults so things like search_path can be defaulted for a
77   specific user connecting to a specific database.
78
79 * Allow custom variable classes that can restrict who can set the values
80
81   http://archives.postgresql.org/pgsql-hackers/2006-11/msg00911.php
82
83 * Implement the SQL standard mechanism whereby REVOKE ROLE revokes only
84   the privilege granted by the invoking role, and not those granted
85   by other roles
86
87   http://archives.postgresql.org/pgsql-bugs/2007-05/msg00010.php
88
89 * Allow SSL authentication/encryption over unix domain sockets
90
91   http://archives.postgresql.org/pgsql-hackers/2007-12/msg00924.php
92
93 * Allow SSL key file permission checks to be optionally disabled when
94   sharing SSL keys with other applications
95
96   http://archives.postgresql.org/pgsql-bugs/2007-12/msg00069.php
97
98 * Allow client certificate names to be checked against the client
99   hostname
100
101   This is already implemented in
102   libpq/fe-secure.c::verify_peer_name_matches_certificate() but the code
103   is commented out.
104
105 * Configuration files
106
107         o Allow pg_hba.conf to specify host names along with IP addresses
108
109           Host name lookup could occur when the postmaster reads the
110           pg_hba.conf file, or when the backend starts.  Another
111           solution would be to reverse lookup the connection IP and
112           check that hostname against the host names in pg_hba.conf.
113           We could also then check that the host name maps to the IP
114           address.
115
116         o %Allow postgresql.conf file values to be changed via an SQL
117           API, perhaps using SET GLOBAL
118         o Allow the server to be stopped/restarted via an SQL API
119         o Issue a warning if a change-on-restart-only postgresql.conf value
120           is modified  and the server config files are reloaded
121         o Consider normalizing fractions in postgresql.conf, perhaps
122           using '%'
123
124           http://archives.postgresql.org/pgsql-hackers/2007-06/msg00550.php
125
126         o Allow Kerberos to disable stripping of realms so we can
127           check the username@realm against multiple realms
128
129           http://archives.postgresql.org/pgsql-hackers/2007-11/msg00009.php
130
131
132 * Tablespaces
133
134         o Allow a database in tablespace t1 with tables created in
135           tablespace t2 to be used as a template for a new database created
136           with default tablespace t2
137
138           Currently all objects in the default database tablespace must
139           have default tablespace specifications. This is because new
140           databases are created by copying directories. If you mix default
141           tablespace tables and tablespace-specified tables in the same
142           directory, creating a new database from such a mixed directory
143           would create a new database with tables that had incorrect
144           explicit tablespaces.  To fix this would require modifying
145           pg_class in the newly copied database, which we don't currently
146           do.
147
148         o Allow reporting of which objects are in which tablespaces
149
150           This item is difficult because a tablespace can contain objects
151           from multiple databases. There is a server-side function that
152           returns the databases which use a specific tablespace, so this
153           requires a tool that will call that function and connect to each
154           database to find the objects in each database for that tablespace.
155
156         o Allow WAL replay of CREATE TABLESPACE to work when the directory
157           structure on the recovery computer is different from the original
158
159         o Allow per-tablespace quotas
160
161
162 * Point-In-Time Recovery (PITR)
163
164         o Allow a warm standby system to also allow read-only statements
165           [pitr]
166
167           http://archives.postgresql.org/pgsql-hackers/2007-03/msg00050.php
168
169         o %Create dump tool for write-ahead logs for use in determining
170           transaction id for point-in-time recovery
171
172           This is useful for checking PITR recovery.
173
174         o Allow recovery.conf to support the same syntax as
175           postgresql.conf, including quoting
176
177           http://archives.postgresql.org/pgsql-hackers/2006-12/msg00497.php
178
179         o Fix server restart problem when the server was shutdown during
180           a PITR backup
181
182           http://archives.postgresql.org/pgsql-hackers/2007-11/msg00800.php
183
184         o Recreate pg_xlog/archive_status/ if it doesn't exist after
185           restoring from a PITR backup
186
187           http://archives.postgresql.org/pgsql-hackers/2007-12/msg00487.php
188
189
190 Data Types
191 ==========
192
193 * Change NUMERIC to enforce the maximum precision
194 * Reduce storage space for small NUMERICs
195
196   http://archives.postgresql.org/pgsql-hackers/2007-02/msg01331.php
197   http://archives.postgresql.org/pgsql-patches/2007-02/msg00505.php
198   http://archives.postgresql.org/pgsql-hackers/2007-06/msg00715.php
199
200 * Fix data types where equality comparison isn't intuitive, e.g. box
201 * Add support for public SYNONYMs
202
203   http://archives.postgresql.org/pgsql-hackers/2006-03/msg00519.php
204
205 * Fix CREATE CAST on DOMAINs
206
207   http://archives.postgresql.org/pgsql-hackers/2006-05/msg00072.php
208   http://archives.postgresql.org/pgsql-hackers/2006-09/msg01681.php
209
210 * Allow domains to be cast
211
212   http://archives.postgresql.org/pgsql-hackers/2003-06/msg01206.php
213   http://archives.postgresql.org/pgsql-hackers/2007-08/msg00289.php
214
215 * Add support for SQL-standard GENERATED/IDENTITY columns
216
217   http://archives.postgresql.org/pgsql-hackers/2006-07/msg00543.php
218   http://archives.postgresql.org/pgsql-hackers/2006-08/msg00038.php
219   http://archives.postgresql.org/pgsql-hackers/2007-05/msg00344.php
220   http://archives.postgresql.org/pgsql-patches/2007-05/msg00076.php
221   http://archives.postgresql.org/pgsql-hackers/2008-02/msg00604.php
222
223 * Improve XML support
224
225   http://developer.postgresql.org/index.php/XML_Support
226
227 * Consider placing all sequences in a single table, or create a system
228   view
229
230   http://archives.postgresql.org/pgsql-hackers/2008-03/msg00008.php
231
232 * Allow the UUID type to accept non-standard formats
233
234   http://archives.postgresql.org/pgsql-hackers/2008-02/msg01214.php
235
236 * Allow text search dictionary to filter out only stop words
237
238   http://archives.postgresql.org/pgsql-patches/2007-11/msg00081.php
239
240 * Consider a function-based API for '@@' full text searches
241
242   http://archives.postgresql.org/pgsql-hackers/2007-11/msg00511.php
243
244 * Improve text search error messages
245
246   http://archives.postgresql.org/pgsql-hackers/2007-10/msg00966.php
247   http://archives.postgresql.org/pgsql-hackers/2007-11/msg01146.php
248
249 * Consider a special data type for regular expressions
250
251   http://archives.postgresql.org/pgsql-hackers/2007-08/msg01067.php
252
253 * Reduce BIT data type overhead using short varlena headers
254
255   http://archives.postgresql.org/pgsql-general/2007-12/msg00273.php
256
257 * Allow xml arrays to be cast to other data types
258
259   http://archives.postgresql.org/pgsql-hackers/2007-09/msg00981.php
260   http://archives.postgresql.org/pgsql-hackers/2007-10/msg00231.php
261   http://archives.postgresql.org/pgsql-hackers/2007-11/msg00471.php
262
263 * Simplify integer cross-data-type operators
264
265   http://archives.postgresql.org/pgsql-bugs/2008-01/msg00189.php
266
267 * Allow XML to accept more liberal DOCTYPE specifications
268
269   http://archives.postgresql.org/pgsql-general/2008-02/msg00347.php
270
271
272 * Dates and Times
273
274         o Allow infinite dates and intervals just like infinite timestamps
275         o Merge hardwired timezone names with the TZ database; allow either
276           kind everywhere a TZ name is currently taken
277         o Allow TIMESTAMP WITH TIME ZONE to store the original timezone
278           information, either zone name or offset from UTC [timezone]
279
280           If the TIMESTAMP value is stored with a time zone name, interval
281           computations should adjust based on the time zone rules.
282
283         o Fix SELECT '0.01 years'::interval, '0.01 months'::interval
284         o Add a GUC variable to allow output of interval values in ISO8601
285           format
286         o Have timestamp subtraction not call justify_hours()?
287
288           http://archives.postgresql.org/pgsql-sql/2006-10/msg00059.php
289
290         o Improve timestamptz subtraction to be DST-aware
291
292           Currently subtracting one date from another that crosses a
293           daylight savings time adjustment can return '1 day 1 hour', but
294           adding that back to the first date returns a time one hour in
295           the future.  This is caused by the adjustment of '25 hours' to
296           '1 day 1 hour', and '1 day' is the same time the next day, even
297           if daylight savings adjustments are involved.
298
299         o Fix interval display to support values exceeding 2^31 hours
300         o Add overflow checking to timestamp and interval arithmetic
301         o Extend timezone code to allow 64-bit values so we can
302           represent years beyond 2038
303
304           http://archives.postgresql.org/pgsql-hackers/2006-09/msg01363.php
305
306         o Use LC_TIME for localized weekday/month names, rather than
307           LC_MESSAGES
308
309           http://archives.postgresql.org/pgsql-hackers/2006-11/msg00390.php
310
311         o Add ISO INTERVAL handling
312
313                   http://archives.postgresql.org/pgsql-hackers/2006-01/msg00250.php
314                   http://archives.postgresql.org/pgsql-bugs/2006-04/msg00248.php
315
316                 o Support ISO INTERVAL syntax if units cannot be determined from
317                   the string, and are supplied after the string
318
319                   The SQL standard states that the units after the string
320                   specify the units of the string, e.g. INTERVAL '2' MINUTE
321                   should return '00:02:00'. The current behavior has the units
322                   restrict the interval value to the specified unit or unit
323                   range, INTERVAL '70' SECOND returns '00:00:10'.
324
325                   For syntax that isn't uniquely ISO or PG syntax, like '1' or
326                   '1:30', treat as ISO if there is a range specification clause,
327                   and as PG if there no clause is present, e.g. interpret '1:30'
328                   MINUTE TO SECOND as '1 minute 30 seconds', and interpret
329                   '1:30' as '1 hour, 30 minutes'.
330
331                   This makes common cases like SELECT INTERVAL '1' MONTH
332                   SQL-standard results. The SQL standard supports a limited
333                   number of unit combinations and doesn't support unit names in
334                   the string. The PostgreSQL syntax is more flexible in the
335                   range of units supported, e.g. PostgreSQL supports '1 year 1
336                   hour', while the SQL standard does not.
337
338                 o Add support for year-month syntax, INTERVAL '50-6' YEAR
339                   TO MONTH
340                 o Interpret INTERVAL '1 year' MONTH as CAST (INTERVAL '1
341                   year' AS INTERVAL MONTH), and this should return '12 months'
342                 o Round or truncate values to the requested precision, e.g.
343                   INTERVAL '11 months' AS YEAR should return one or zero
344                 o Support precision, CREATE TABLE foo (a INTERVAL MONTH(3))
345
346
347 * Arrays
348
349         o Delay resolution of array expression's data type so assignment
350           coercion can be performed on empty array expressions
351         o Add support for arrays of domains
352
353           http://archives.postgresql.org/pgsql-patches/2007-05/msg00114.php
354
355         o Allow single-byte header storage for array elements
356
357
358 * Binary Data
359
360         o Improve vacuum of large objects, like contrib/vacuumlo?
361         o Add security checking for large objects
362         o Auto-delete large objects when referencing row is deleted
363
364           contrib/lo offers this functionality.
365
366         o Allow read/write into TOAST values like large objects
367
368           This requires the TOAST column to be stored EXTERNAL.
369
370         o Add API for 64-bit large object access
371
372           http://archives.postgresql.org/pgsql-hackers/2005-09/msg00781.php
373
374 * MONEY data type
375
376         * Add locale-aware MONEY type, and support multiple currencies
377
378           http://archives.postgresql.org/pgsql-general/2005-08/msg01432.php
379           http://archives.postgresql.org/pgsql-hackers/2007-03/msg01181.php
380
381         * MONEY dumps in a locale-specific format making it difficult to
382           restore to a system with a different locale
383         * Allow MONEY to be easily cast to/from other numeric data types
384
385
386 Functions
387 =========
388
389 * Allow INET subnet tests using non-constants to be indexed
390 * Allow to_date() and to_timestamp() accept localized month names
391 * Fix to_date()-related functions to consistently issue errors
392
393   http://archives.postgresql.org/pgsql-hackers/2007-02/msg00915.php
394
395 * Add missing parameter handling in to_char()
396
397   http://archives.postgresql.org/pgsql-hackers/2005-12/msg00948.php
398
399 * Allow substring/replace() to get/set bit values
400 * Allow to_char() on interval values to accumulate the highest unit
401   requested
402
403   Some special format flag would be required to request such
404   accumulation.  Such functionality could also be added to EXTRACT.
405   Prevent accumulation that crosses the month/day boundary because of
406   the uneven number of days in a month.
407
408         o to_char(INTERVAL '1 hour 5 minutes', 'MI') => 65
409         o to_char(INTERVAL '43 hours 20 minutes', 'MI' ) => 2600
410         o to_char(INTERVAL '43 hours 20 minutes', 'WK:DD:HR:MI') => 0:1:19:20
411         o to_char(INTERVAL '3 years 5 months','MM') => 41
412
413 * Implement inlining of set-returning functions defined in SQL
414 * Allow SQL-language functions to return results from RETURNING queries
415
416   http://archives.postgresql.org/pgsql-hackers/2006-10/msg00665.php
417
418 * Allow SQL-language functions to reference parameters by parameter name
419
420   Currently SQL-language functions can only refer to dollar parameters,
421   e.g. $1
422
423 * Add SPI_gettypmod() to return the typemod for a TupleDesc
424 * Enforce typmod for function inputs, function results and parameters for
425   spi_prepare'd statements called from PLs
426
427   http://archives.postgresql.org/pgsql-hackers/2007-01/msg01403.php
428
429 * Allow holdable cursors in SPI
430 * Tighten function permission checks
431
432   http://archives.postgresql.org/pgsql-hackers/2006-12/msg00568.php
433
434 * Fix IS OF so it matches the ISO specification, and add documentation
435
436   http://archives.postgresql.org/pgsql-patches/2003-08/msg00060.php
437   http://archives.postgresql.org/pgsql-hackers/2007-02/msg00060.php
438
439 * Add missing operators for geometric data types
440
441   Some geometric types do not have the full suite of geometric operators,
442   e.g. box @> point
443
444 * Implement Boyer-Moore searching in strpos()
445
446   http://archives.postgresql.org/pgsql-patches/2007-08/msg00012.php
447
448 * Prevent malicious functions from being executed with the permissions
449   of unsuspecting users
450
451   Index functions are safe, so VACUUM and ANALYZE are safe too. 
452   Triggers, CHECK and DEFAULT expressions, and rules are still vulnerable.
453   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00268.php
454
455 * Reduce memory usage of aggregates in set returning functions
456
457   http://archives.postgresql.org/pgsql-performance/2008-01/msg00031.php
458
459 * Add temporal versions of generate_series()
460
461   http://archives.postgresql.org/pgsql-hackers/2007-04/msg01180.php
462
463 * Add array_accum() and array_to_set() functions for arrays
464
465   The standards specify array_agg() and UNNEST.
466   http://archives.postgresql.org/pgsql-hackers/2007-08/msg00464.php
467
468 * Fix /contrib/ltree operator
469
470   http://archives.postgresql.org/pgsql-bugs/2007-11/msg00044.php
471
472 * Fix inconsistent precedence of =, >, and < compared to <>, >=, and <=
473
474   http://archives.postgresql.org/pgsql-bugs/2007-12/msg00145.php
475
476 * Fix regular expression bug when using complex back-references
477
478   http://archives.postgresql.org/pgsql-bugs/2007-10/msg00000.php
479
480 * Have /contrib/dblink reuse unnamed connections
481
482   http://archives.postgresql.org/pgsql-hackers/2007-10/msg00895.php
483
484 * Add SQL-standard array_agg() and unnest() array functions
485
486   http://archives.postgresql.org/pgsql-hackers/2008-01/msg01017.php
487
488 * Allow calling of a procedure outside a SELECT that can control the
489   transaction state
490
491   http://archives.postgresql.org/pgsql-hackers/2007-10/msg01375.php
492
493
494
495 Multi-Language Support
496 ======================
497
498 * Add NCHAR (as distinguished from ordinary varchar),
499 * Allow locale to be set at database creation
500
501   Currently locale can only be set during initdb.  No global tables have
502   locale-aware columns.  However, the database template used during
503   database creation might have locale-aware indexes.  The indexes would
504   need to be reindexed to match the new locale.
505
506 * Allow encoding on a per-column basis optionally using the ICU library
507
508   Right now only one encoding is allowed per database.  [locale]
509
510   http://archives.postgresql.org/pgsql-hackers/2005-03/msg00932.php
511   http://archives.postgresql.org/pgsql-patches/2005-08/msg00309.php
512   http://archives.postgresql.org/pgsql-patches/2006-03/msg00233.php
513   http://archives.postgresql.org/pgsql-hackers/2006-09/msg00662.php
514   http://wiki.postgresql.org/wiki/Todo:Collate 
515   http://wiki.postgresql.org/wiki/Todo:ICU
516
517 * Add CREATE COLLATE?  [locale]
518 * Support multiple simultaneous character sets, per SQL92
519 * Improve UTF8 combined character handling?
520 * Add octet_length_server() and octet_length_client()
521 * Make octet_length_client() the same as octet_length()?
522 * Fix problems with wrong runtime encoding conversion for NLS message files
523 * Add URL to more complete multi-byte regression tests
524
525   http://archives.postgresql.org/pgsql-hackers/2005-07/msg00272.php
526
527 * Fix ILIKE and regular expressions to handle case insensitivity
528   properly in multibyte encodings
529
530   http://archives.postgresql.org/pgsql-bugs/2005-10/msg00001.php
531   http://archives.postgresql.org/pgsql-patches/2005-11/msg00173.php
532
533 * Set client encoding based on the client operating system encoding
534
535   Currently client_encoding is set in postgresql.conf, which
536   defaults to the server encoding.
537   http://archives.postgresql.org/pgsql-hackers/2006-08/msg01696.php
538
539 * Change memory allocation for multi-byte functions so memory is
540   allocated inside conversion functions
541
542   Currently we preallocate memory based on worst-case usage.
543
544
545
546 Views / Rules
547 =============
548
549 * Automatically create rules on views so they are updateable, per SQL99
550
551   We can only auto-create rules for simple views.  For more complex
552   cases users will still have to write rules manually.
553
554   http://archives.postgresql.org/pgsql-hackers/2006-03/msg00586.php
555   http://archives.postgresql.org/pgsql-patches/2006-08/msg00255.php
556
557 * Add the functionality for WITH CHECK OPTION clause of CREATE VIEW
558 * Allow VIEW/RULE recompilation when the underlying tables change
559
560   Another issue is whether underlying table changes should be reflected
561   in the view, e.g. should SELECT * show additional columns if they
562   are added after the view is created.
563
564 * Make it possible to use RETURNING together with conditional DO INSTEAD
565   rules, such as for partitioning setups
566
567   http://archives.postgresql.org/pgsql-hackers/2007-09/msg00577.php
568
569 * Add the ability to automatically create materialized views
570
571   Right now materialized views require the user to create triggers on the
572   main table to keep the summary table current.  SQL syntax should be able
573   to manager the triggers and summary table automatically.  A more
574   sophisticated implementation would automatically retrieve from the
575   summary table when the main table is referenced, if possible.
576
577
578
579 SQL Commands
580 ============
581
582 * Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT
583 * Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY
584 * %Allow SET CONSTRAINTS to be qualified by schema/table name
585 * %Add a separate TRUNCATE permission
586
587   Currently only the owner can TRUNCATE a table because triggers are not
588   called, and the table is locked in exclusive mode.
589
590 * Allow PREPARE of cursors
591 * Allow finer control over the caching of prepared query plans
592
593   Currently queries prepared via the libpq API are planned on first
594   execute using the supplied parameters --- allow SQL PREPARE to do the
595   same.  Also, allow control over replanning prepared queries either
596   manually or automatically when statistics for execute parameters
597   differ dramatically from those used during planning.
598
599 * Improve logging of prepared transactions recovered during startup
600
601   http://archives.postgresql.org/pgsql-hackers/2006-11/msg00092.php
602
603 * Add a GUC variable to warn about non-standard SQL usage in queries
604 * Add SQL-standard MERGE command, typically used to merge two tables
605   [merge]
606
607   This is similar to UPDATE, then for unmatched rows, INSERT.
608   Whether concurrent access allows modifications which could cause
609   row loss is implementation independent.
610
611 * Add REPLACE or UPSERT command that does UPDATE, or on failure, INSERT
612   [merge]
613
614   To implement this cleanly requires that the table have a unique index
615   so duplicate checking can be easily performed.  It is possible to
616   do it without a unique index if we require the user to LOCK the table
617   before the MERGE.
618
619   http://archives.postgresql.org/pgsql-hackers/2005-11/msg00501.php
620   http://archives.postgresql.org/pgsql-hackers/2005-11/msg00536.php
621
622 * Add NOVICE output level for helpful messages like automatic sequence/index
623   creation
624 * Add GUC to issue notice about statements that use unjoined tables
625 * Allow EXPLAIN to identify tables that were skipped because of
626   constraint_exclusion
627 * Allow EXPLAIN output to be more easily processed by scripts, perhaps XML
628 * Enable standard_conforming_strings
629 * Make standard_conforming_strings the default in 8.5?
630
631   When this is done, backslash-quote should be prohibited in non-E''
632   strings because of possible confusion over how such strings treat
633   backslashes.  Basically, '' is always safe for a literal single
634   quote, while \' might or might not be based on the backslash
635   handling rules.
636
637 * Simplify dropping roles that have objects in several databases
638 * Allow COMMENT ON to accept an expression rather than just a string
639 * Allow the count returned by SELECT, etc to be represented as an int64
640   to allow a higher range of values
641 * Add SQL99 WITH clause to SELECT
642 * Add SQL:2003 WITH RECURSIVE (hierarchical) queries to SELECT
643
644   http://archives.postgresql.org/pgsql-hackers/2007-01/msg01375.php
645   http://archives.postgresql.org/pgsql-hackers/2008-02/msg00642.php
646   http://archives.postgresql.org/pgsql-patches/2007-03/msg00139.php
647   http://archives.postgresql.org/pgsql-hackers/2007-11/msg01334.php
648   http://archives.postgresql.org/pgsql-patches/2008-01/msg00105.php
649   http://archives.postgresql.org/pgsql-patches/2008-03/msg00327.php
650
651 * Add DEFAULT .. AS OWNER so permission checks are done as the table
652   owner
653
654   This would be useful for SERIAL nextval() calls and CHECK constraints.
655
656 * Allow DISTINCT to work in multiple-argument aggregate calls
657 * Add column to pg_stat_activity that shows the progress of long-running
658   commands like CREATE INDEX and VACUUM
659 * Implement SQL:2003 window functions
660 * Improve failure message when DROP DATABASE is used on a database that
661   has prepared transactions
662 * Allow INSERT/UPDATE ... RETURNING inside a SELECT 'FROM' clause
663
664   http://archives.postgresql.org/pgsql-general/2006-09/msg00803.php
665   http://archives.postgresql.org/pgsql-hackers/2006-10/msg00693.php
666
667 * Increase locking when DROPing objects so dependent objects cannot
668   get dropped while the DROP operation is happening
669
670   http://archives.postgresql.org/pgsql-hackers/2007-01/msg00937.php
671
672 * -Allow AS in "SELECT col AS label" to be optional in certain cases
673
674 * Allow INSERT ... DELETE ... RETURNING, namely allow the DELETE ...
675   RETURNING to supply values to the INSERT
676   http://archives.postgresql.org/pgsql-hackers/2008-02/thrd2.php#00979
677
678 * Add comments on system tables/columns using the information in
679   catalogs.sgml
680
681   Ideally the information would be pulled from the SGML file
682   automatically.
683
684 * Improve reporting of UNION type mismatches
685
686   http://archives.postgresql.org/pgsql-hackers/2007-04/msg00944.php
687   http://archives.postgresql.org/pgsql-hackers/2008-03/msg00597.php
688
689
690 * CREATE
691
692         o Allow CREATE TABLE AS to determine column lengths for complex
693           expressions like SELECT col1 || col2
694
695         o Have WITH CONSTRAINTS also create constraint indexes
696
697           http://archives.postgresql.org/pgsql-patches/2007-04/msg00149.php
698
699         o Have CONSTRAINT cname NOT NULL record the contraint name
700
701           Right now pg_attribute.attnotnull records the NOT NULL status
702           of the column, but does not record the contraint name
703
704         o Prevent concurrent CREATE TABLE table1 from sometimes returning
705           a cryptic error message
706
707           http://archives.postgresql.org/pgsql-bugs/2007-10/msg00169.php
708
709
710 * UPDATE
711         o Allow UPDATE tab SET ROW (col, ...) = (SELECT...)
712
713           http://archives.postgresql.org/pgsql-hackers/2006-07/msg01306.php
714           http://archives.postgresql.org/pgsql-hackers/2007-03/msg00865.php
715           http://archives.postgresql.org/pgsql-patches/2007-04/msg00315.php
716           http://archives.postgresql.org/pgsql-patches/2008-03/msg00237.php
717
718         o Research self-referential UPDATEs that see inconsistent row versions
719           in read-committed mode
720
721           http://archives.postgresql.org/pgsql-hackers/2007-05/msg00507.php
722           http://archives.postgresql.org/pgsql-hackers/2007-06/msg00016.php
723
724         o Allow GLOBAL temporary tables to exist as empty by default in
725           all sessions
726
727           http://archives.postgresql.org/pgsql-hackers/2007-07/msg00006.php
728
729
730 * ALTER
731
732         o Have ALTER TABLE RENAME rename SERIAL sequence names
733
734           http://archives.postgresql.org/pgsql-hackers/2008-03/msg00008.php
735
736         o Have ALTER SEQUENCE RENAME rename the sequence name stored
737           in the sequence table
738
739           http://archives.postgresql.org/pgsql-bugs/2007-09/msg00092.php
740           http://archives.postgresql.org/pgsql-bugs/2007-10/msg00007.php
741           http://archives.postgresql.org/pgsql-hackers/2008-03/msg00008.php
742
743         o Add ALTER DOMAIN to modify the underlying data type
744         o %Allow ALTER TABLE ... ALTER CONSTRAINT ... RENAME
745
746           http://archives.postgresql.org/pgsql-patches/2006-02/msg00168.php
747
748         o %Allow ALTER TABLE to change constraint deferrability and actions
749         o Add missing object types for ALTER ... SET SCHEMA
750         o Allow ALTER TABLESPACE to move to different directories
751         o Allow databases to be moved to different tablespaces
752         o Allow moving system tables to other tablespaces, where possible
753
754           Currently non-global system tables must be in the default database
755           tablespace. Global system tables can never be moved.
756
757         o Prevent parent tables from altering or dropping constraints
758           like CHECK that are inherited by child tables unless CASCADE
759           is used
760         o %Prevent child tables from altering or dropping constraints
761           like CHECK that were inherited from the parent table
762         o Have ALTER INDEX update the name of a constraint using that index
763         o Add ALTER TABLE RENAME CONSTRAINT, update index name also
764         o Allow column display reordering by recording a display,
765           storage, and permanent id for every column?
766
767           http://archives.postgresql.org/pgsql-hackers/2006-12/msg00782.php
768
769
770
771 * CLUSTER
772
773         o Automatically maintain clustering on a table
774
775           This might require some background daemon to maintain clustering
776           during periods of low usage. It might also require tables to be only
777           partially filled for easier reorganization.  Another idea would
778           be to create a merged heap/index data file so an index lookup would
779           automatically access the heap data too.  A third idea would be to
780           store heap rows in hashed groups, perhaps using a user-supplied
781           hash function.
782           http://archives.postgresql.org/pgsql-performance/2004-08/msg00349.php
783
784         o %Add default clustering to system tables
785
786           To do this, determine the ideal cluster index for each system
787           table and set the cluster setting during initdb.
788
789         o %Add VERBOSE option to report tables as they are processed,
790           like VACUUM VERBOSE
791
792
793 * COPY
794
795         o Allow COPY to report error lines and continue
796
797           This requires the use of a savepoint before each COPY line is
798           processed, with ROLLBACK on COPY failure.
799           http://archives.postgresql.org/pgsql-hackers/2007-12/msg00572.php
800
801         o Allow COPY on a newly-created table to skip WAL logging
802
803           On crash recovery, the table involved in the COPY would
804           be removed or have its heap and index files truncated.  One
805           issue is that no other backend should be able to add to
806           the table at the same time, which is something that is
807           currently allowed.  This currently is done if the table is
808           created inside the same transaction block as the COPY because
809           no other backends can see the table.
810
811         o Consider using a ring buffer for COPY FROM
812
813           http://archives.postgresql.org/pgsql-patches/2008-02/msg00140.php
814           http://archives.postgresql.org/pgsql-hackers/2008-02/msg01080.php
815
816         o Allow COPY FROM to create index entries in bulk
817
818           http://archives.postgresql.org/pgsql-hackers/2008-02/msg00811.php
819
820         o Allow COPY in CSV mode to control whether a quoted zero-length
821           string is treated as NULL
822
823           Currently this is always treated as a zero-length string,
824           which generates an error when loading into an integer column
825           http://archives.postgresql.org/pgsql-hackers/2007-07/msg00905.php
826
827
828
829 * GRANT/REVOKE
830
831         o Allow column-level privileges
832         o %Allow GRANT/REVOKE permissions to be applied to all schema objects
833           with one command
834
835           The proposed syntax is:
836                 GRANT SELECT ON ALL TABLES IN public TO phpuser;
837                 GRANT SELECT ON NEW TABLES IN public TO phpuser;
838
839         o Allow GRANT/REVOKE permissions to be inherited by objects based on
840           schema permissions
841
842         o Allow SERIAL sequences to inherit permissions from the base table?
843
844
845 * CURSOR
846
847         o Prevent DROP TABLE from dropping a row referenced by its own open
848           cursor?
849
850
851 * INSERT
852
853         o Allow INSERT/UPDATE of the system-generated oid value for a row
854         o In rules, allow VALUES() to contain a mixture of 'old' and 'new'
855           references
856
857
858 * SHOW/SET
859
860         o Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM
861           ANALYZE, and CLUSTER
862
863
864 * LISTEN/NOTIFY
865
866         o Allow LISTEN/NOTIFY to store info in memory rather than tables?
867
868           Currently LISTEN/NOTIFY information is stored in pg_listener. 
869           Storing such information in memory would improve performance.
870
871         o Add optional textual message to NOTIFY
872
873           This would allow an informational message to be added to the notify
874           message, perhaps indicating the row modified or other custom
875           information.
876
877         o Allow multiple identical NOTIFY events to always be communicated
878           to the client, rather than sent as a single notification to the
879           listener
880
881           http://archives.postgresql.org/pgsql-general/2008-01/msg00057.php
882
883         o Allow NOTIFY in rules involving conditionals
884         o Improve LISTEN concurrency
885
886           http://archives.postgresql.org/pgsql-hackers/2008-02/msg01106.php
887
888
889
890 Referential Integrity
891 =====================
892
893 * Add MATCH PARTIAL referential integrity
894 * Change foreign key constraint for array -> element to mean element
895   in array?
896 * Fix problem when cascading referential triggers make changes on
897   cascaded tables, seeing the tables in an intermediate state
898
899   http://archives.postgresql.org/pgsql-hackers/2005-09/msg00174.php
900   http://archives.postgresql.org/pgsql-hackers/2005-09/msg00174.php
901
902 * Allow DEFERRABLE and end-of-statement UNIQUE constraints?
903
904   This would allow UPDATE tab SET col = col + 1 to work if col has
905   a unique index.  Currently, uniqueness checks are done while the
906   command is being executed, rather than at the end of the statement
907   or transaction.
908   http://people.planetpostgresql.org/greg/index.php?/archives/2006/06/10.html
909   http://archives.postgresql.org/pgsql-hackers/2006-09/msg01458.php
910
911 * Optimize referential integrity checks
912
913   http://archives.postgresql.org/pgsql-performance/2005-10/msg00458.php
914   http://archives.postgresql.org/pgsql-hackers/2007-04/msg00744.php
915
916
917 Server-Side Languages
918 =====================
919
920 * PL/pgSQL
921         o Fix RENAME to work on variables other than OLD/NEW
922
923           http://archives.postgresql.org/pgsql-hackers/2002-03/msg00591.php
924           http://archives.postgresql.org/pgsql-hackers/2007-01/msg01615.php
925           http://archives.postgresql.org/pgsql-hackers/2007-01/msg01587.php
926
927         o Allow function parameters to be passed by name,
928           get_employee_salary(12345 AS emp_id, 2001 AS tax_year)
929         o Allow handling of %TYPE arrays, e.g. tab.col%TYPE[]
930         o Allow listing of record column names, and access to
931           record columns via variables, e.g. columns := r.(*),
932           tval2 := r.(colname)
933
934           http://archives.postgresql.org/pgsql-patches/2005-07/msg00458.php
935           http://archives.postgresql.org/pgsql-patches/2006-05/msg00302.php
936           http://archives.postgresql.org/pgsql-patches/2006-06/msg00031.php
937
938         o Add support for SCROLL cursors
939         o Add support for WITH HOLD cursors
940         o Allow row and record variables to be set to NULL constants,
941           and allow NULL tests on such variables
942
943           Because a row is not scalar, do not allow assignment
944           from NULL-valued scalars.
945
946           http://archives.postgresql.org/pgsql-hackers/2006-10/msg00070.php
947
948         o Review handling of MOVE and FETCH
949
950           http://archives.postgresql.org/pgsql-patches/2007-04/msg00527.php
951
952         o Improve logic of determining if an identifier is a a
953           variable or column name
954
955           http://archives.postgresql.org/pgsql-hackers/2007-07/msg00436.php
956
957         o Consider keeping seperate cached copies when search_path changes
958
959           http://archives.postgresql.org/pgsql-hackers/2008-01/msg01009.php
960
961         o Add CASE capability to language (already in SQL)
962
963           http://archives.postgresql.org/pgsql-hackers/2008-01/msg00696.php
964
965
966
967
968 * Other
969         o Add table function support to pltcl, plpythonu
970         o Add support for polymorphic arguments and return types to
971           languages other than PL/PgSQL
972         o Add capability to create and call PROCEDURES
973         o Add support for OUT and INOUT parameters to languages other
974           than PL/PgSQL
975         o Add PL/PythonU tracebacks
976
977           http://archives.postgresql.org/pgsql-patches/2006-02/msg00288.php
978
979         o Allow data to be passed in native language formats, rather
980           than only text
981
982           http://archives.postgresql.org/pgsql-hackers/2007-05/msg00289.php
983
984         o Add ability to obfuscate function bodies
985
986           http://archives.postgresql.org/pgsql-patches/2008-01/msg00125.php
987
988
989
990 Clients
991 =======
992
993 * Have pg_ctl look at PGHOST in case it is a socket directory?
994 * Allow pg_ctl to work properly with configuration files located outside
995   the PGDATA directory
996
997   pg_ctl can not read the pid file because it isn't located in the
998   config directory but in the PGDATA directory.  The solution is to
999   allow pg_ctl to read and understand postgresql.conf to find the
1000   data_directory value.
1001
1002 * Add a function like pg_get_indexdef() that report more detailed index
1003   information
1004
1005   http://archives.postgresql.org/pgsql-bugs/2007-12/msg00166.php
1006
1007 * psql
1008         o Have psql show current values for a sequence
1009         o Move psql backslash database information into the backend, use
1010           mnemonic commands? [psql]
1011
1012           This would allow non-psql clients to pull the same information out
1013           of the database as psql.
1014
1015         o Make psql's \d commands more consistent
1016
1017           http://archives.postgresql.org/pgsql-hackers/2004-11/msg00014.php
1018           http://archives.postgresql.org/pgsql-hackers/2004-11/msg00014.php
1019
1020         o Consistently display privilege information for all objects in psql
1021         o Add auto-expanded mode so expanded output is used if the row
1022           length is wider than the screen width.
1023
1024           Consider using auto-expanded mode for backslash commands like \df+.
1025
1026         o Prevent tab completion of SET TRANSACTION from querying the
1027           database and therefore preventing the transaction isolation
1028           level from being set.
1029
1030           Currently SET <tab> causes a database lookup to check all
1031           supported session variables.  This query causes problems
1032           because setting the transaction isolation level must be the
1033           first statement of a transaction.
1034
1035         o Add a \set variable to control whether \s displays line numbers
1036
1037           Another option is to add \# which lists line numbers, and
1038           allows command execution.
1039
1040           http://archives.postgresql.org/pgsql-hackers/2006-12/msg00255.php
1041
1042         o Prevent escape string warnings when object names have
1043           backslashes
1044
1045           http://archives.postgresql.org/pgsql-hackers/2008-01/msg00227.php
1046
1047         o Have \d show foreign keys that reference a table's primary key
1048
1049           http://archives.postgresql.org/pgsql-hackers/2007-04/msg00424.php
1050
1051         o Have \d show child tables that inherit from the specified parent
1052         o Have \l+ show database size, if permissions allow
1053
1054           Ideally it will not generate an error for invalid permissions
1055
1056         o Include the symbolic SQLSTATE name in verbose error reports
1057
1058           http://archives.postgresql.org/pgsql-general/2007-09/msg00438.php
1059
1060         o Improve display if enums
1061
1062           http://archives.postgresql.org/pgsql-hackers/2008-01/msg00826.php
1063
1064
1065
1066
1067 * pg_dump / pg_restore
1068         o %Add dumping of comments on index columns and composite type columns
1069         o %Add full object name to the tag field.  eg. for operators we need
1070           '=(integer, integer)', instead of just '='.
1071         o Add pg_dumpall custom format dumps?
1072         o Allow selection of individual object(s) of all types, not just
1073           tables
1074         o In a selective dump, allow dumping of an object and all its
1075           dependencies
1076         o Add options like pg_restore -l and -L to pg_dump
1077         o Stop dumping CASCADE on DROP TYPE commands in clean mode
1078         o Allow pg_dump --clean to drop roles that own objects or have
1079           privileges
1080         o Change pg_dump so that a comment on the dumped database is
1081           applied to the loaded database, even if the database has a
1082           different name.  This will require new backend syntax, perhaps
1083           COMMENT ON CURRENT DATABASE.
1084         o Remove unnecessary function pointer abstractions in pg_dump source
1085           code
1086         o Allow pg_dump to utilize multiple CPUs and I/O channels by dumping
1087           multiple objects simultaneously
1088
1089           The difficulty with this is getting multiple dump processes to
1090           produce a single dump output file.  It also would require
1091           several sessions to share the same snapshot.
1092           http://archives.postgresql.org/pgsql-hackers/2008-02/msg00205.php
1093
1094         o Allow pg_restore to utilize multiple CPUs and I/O channels by
1095           restoring multiple objects simultaneously
1096
1097           This might require a pg_restore flag to indicate how many
1098           simultaneous operations should be performed.  Only pg_dump's
1099           -Fc format has the necessary dependency information.
1100           http://archives.postgresql.org/pgsql-hackers/2008-02/msg00963.php
1101
1102         o To better utilize resources, allow pg_restore to check foreign
1103           keys simultaneously, where possible
1104         o Allow pg_restore to create all indexes of a table
1105           concurrently, via a single heap scan
1106
1107           This requires a pg_dump -Fc file because that format contains
1108           the required dependency information.
1109           http://archives.postgresql.org/pgsql-general/2007-05/msg01274.php
1110
1111         o Allow pg_restore to load different parts of the COPY data
1112           simultaneously
1113         o Prevent pg_dump/pg_restore from being affected by
1114           statement_timeout
1115
1116           Using psql to restore a pg_dump dump is also affected.
1117
1118         o Remove pre-7.3 pg_dump code that assumes pg_depend does not exit
1119         o Allow pre/data/post files when schema and data are dumped
1120           separately, for performance reasons
1121
1122           http://archives.postgresql.org/pgsql-hackers/2008-02/msg00205.php
1123
1124
1125
1126 * ecpg
1127         o Docs
1128
1129           Document differences between ecpg and the SQL standard and
1130           information about the Informix-compatibility module.
1131
1132         o Solve cardinality > 1 for input descriptors / variables?
1133         o Add a semantic check level, e.g. check if a table really exists
1134         o fix handling of DB attributes that are arrays
1135         o Use backend PREPARE/EXECUTE facility for ecpg where possible
1136         o Implement SQLDA
1137         o Fix nested C comments
1138         o %sqlwarn[6] should be 'W' if the PRECISION or SCALE value specified
1139         o Make SET CONNECTION thread-aware, non-standard?
1140         o Allow multidimensional arrays
1141         o Add internationalized message strings
1142         o Implement COPY FROM STDIN
1143
1144
1145 * libpq
1146         o Add PQescapeIdentifierConn()
1147         o Prevent PQfnumber() from lowercasing unquoted the column name
1148
1149           PQfnumber() should never have been doing lowercasing, but
1150           historically it has so we need a way to prevent it
1151
1152         o Allow statement results to be automatically batched to the client
1153
1154           Currently all statement results are transferred to the libpq
1155           client before libpq makes the results available to the
1156           application.  This feature would allow the application to make
1157           use of the first result rows while the rest are transferred, or
1158           held on the server waiting for them to be requested by libpq.
1159           One complexity is that a statement like SELECT 1/col could error
1160           out mid-way through the result set.
1161
1162         o Consider disallowing multiple queries in PQexec() as an
1163           additional barrier to SQL injection attacks
1164
1165           http://archives.postgresql.org/pgsql-hackers/2007-01/msg00184.php
1166
1167         o Add PQexecf() that allows complex parameter substitution
1168
1169           http://archives.postgresql.org/pgsql-hackers/2007-03/msg01803.php
1170
1171         o Add SQLSTATE severity to PGconn return status
1172
1173           http://archives.postgresql.org/pgsql-interfaces/2007-11/msg00015.php
1174
1175
1176 Triggers
1177 ========
1178
1179 * Add deferred trigger queue file
1180
1181   Right now all deferred trigger information is stored in backend
1182   memory.  This could exhaust memory for very large trigger queues.
1183   This item involves dumping large queues into files.
1184
1185 * Allow triggers to be disabled in only the current session.
1186
1187   This is currently possible by starting a multi-statement transaction,
1188   modifying the system tables, performing the desired SQL, restoring the
1189   system tables, and committing the transaction.  ALTER TABLE ...
1190   TRIGGER requires a table lock so it is not ideal for this usage.
1191
1192 * With disabled triggers, allow pg_dump to use ALTER TABLE ADD FOREIGN KEY
1193
1194   If the dump is known to be valid, allow foreign keys to be added
1195   without revalidating the data.
1196
1197 * Allow statement-level triggers to access modified rows
1198 * Support triggers on columns
1199
1200   http://archives.postgresql.org/pgsql-patches/2005-07/msg00107.php
1201
1202 * Allow AFTER triggers on system tables
1203
1204   System tables are modified in many places in the backend without going
1205   through the executor and therefore not causing triggers to fire. To
1206   complete this item, the functions that modify system tables will have
1207   to fire triggers.
1208
1209 * Tighten trigger permission checks
1210
1211   http://archives.postgresql.org/pgsql-hackers/2006-12/msg00564.php
1212
1213 * Allow BEFORE INSERT triggers on views
1214
1215   http://archives.postgresql.org/pgsql-general/2007-02/msg01466.php
1216
1217 * -Add ability to trigger on TRUNCATE
1218
1219
1220
1221 Indexes
1222 =======
1223
1224 * Add UNIQUE capability to non-btree indexes
1225 * Prevent index uniqueness checks when UPDATE does not modify the column
1226
1227   Uniqueness (index) checks are done when updating a column even if the
1228   column is not modified by the UPDATE.
1229
1230 * Allow the creation of on-disk bitmap indexes which can be quickly
1231   combined with other bitmap indexes
1232
1233   Such indexes could be more compact if there are only a few distinct values.
1234   Such indexes can also be compressed.  Keeping such indexes updated can be
1235   costly.
1236
1237   http://archives.postgresql.org/pgsql-patches/2005-07/msg00512.php
1238   http://archives.postgresql.org/pgsql-hackers/2006-12/msg01107.php
1239   http://archives.postgresql.org/pgsql-hackers/2007-03/msg00265.php
1240   http://archives.postgresql.org/pgsql-hackers/2007-03/msg01214.php
1241   http://archives.postgresql.org/pgsql-patches/2007-05/msg00013.php
1242   http://archives.postgresql.org/pgsql-hackers/2007-07/msg00741.php
1243
1244 * Allow accurate statistics to be collected on indexes with more than
1245   one column or expression indexes, perhaps using per-index statistics
1246
1247   http://archives.postgresql.org/pgsql-performance/2006-10/msg00222.php
1248   http://archives.postgresql.org/pgsql-hackers/2007-03/msg01131.php
1249
1250 * Consider increasing the number of default statistics target, and
1251   reduce statistics target overhead
1252
1253   Also consider having a larger statistics target for indexed columns
1254   and expression indexes
1255   http://archives.postgresql.org/pgsql-general/2007-05/msg01228.php
1256   http://archives.postgresql.org/pgsql-general/2007-06/msg00542.php
1257   http://archives.postgresql.org/pgsql-hackers/2008-01/msg01066.php
1258
1259 * Consider compressing indexes by storing key values duplicated in
1260   several rows as a single index entry
1261
1262   http://archives.postgresql.org/pgsql-hackers/2006-12/msg00341.php
1263   http://archives.postgresql.org/pgsql-hackers/2007-02/msg01264.php
1264   http://archives.postgresql.org/pgsql-hackers/2007-03/msg00465.php
1265   http://archives.postgresql.org/pgsql-patches/2007-03/msg00163.php
1266   http://archives.postgresql.org/pgsql-hackers/2007-08/msg00014.php
1267   http://archives.postgresql.org/pgsql-hackers/2007-08/msg00487.php
1268
1269 * Add REINDEX CONCURRENTLY, like CREATE INDEX CONCURRENTLY
1270
1271   This is difficult because you must upgrade to an exclusive table lock
1272   to replace the existing index file.  CREATE INDEX CONCURRENTLY does not
1273   have this complication.  This would allow index compaction without
1274   downtime.
1275   http://archives.postgresql.org/pgsql-performance/2007-08/msg00289.php
1276
1277 * Allow multiple indexes to be created concurrently, ideally via a
1278   single heap scan, and have pg_restore use it
1279
1280 * Consider sorting entries before inserting into btree index
1281
1282   http://archives.postgresql.org/pgsql-general/2008-01/msg01010.php
1283
1284 * Allow index scans to return matching index keys
1285
1286   http://archives.postgresql.org/pgsql-hackers/2007-03/msg01079.php
1287
1288
1289 * Inheritance
1290
1291         o Allow inherited tables to inherit indexes, UNIQUE constraints,
1292           and primary/foreign keys
1293         o Honor UNIQUE INDEX on base column in INSERTs/UPDATEs
1294           on inherited table, e.g.  INSERT INTO inherit_table
1295           (unique_index_col) VALUES (dup) should fail
1296
1297           The main difficulty with this item is the problem of
1298           creating an index that can span multiple tables.
1299
1300         o Allow SELECT ... FOR UPDATE on inherited tables
1301         o Require all CHECK constraints to be inherited
1302
1303           http://archives.postgresql.org/pgsql-bugs/2007-04/msg00026.php
1304
1305         o Add checks to prevent a CREATE RULE views on inherited tables
1306
1307           http://archives.postgresql.org/pgsql-general/2008-02/msg01420.php
1308           http://archives.postgresql.org/pgsql-general/2008-03/msg00077.php
1309
1310
1311 * GIST
1312
1313         o Add more GIST index support for geometric data types
1314         o Allow GIST indexes to create certain complex index types, like
1315           digital trees (see Aoki)
1316
1317
1318 * Hash
1319
1320           http://archives.postgresql.org/pgsql-hackers/2007-09/msg00051.php
1321
1322         o Pack hash index buckets onto disk pages more efficiently
1323
1324           Currently only one hash bucket can be stored on a page. Ideally
1325           several hash buckets could be stored on a single page and greater
1326           granularity used for the hash algorithm.
1327
1328           http://archives.postgresql.org/pgsql-hackers/2004-06/msg00168.php
1329
1330         o Consider sorting hash buckets so entries can be found using a
1331           binary search, rather than a linear scan
1332         o In hash indexes, consider storing the hash value with or instead
1333           of the key itself
1334         o Add WAL logging for crash recovery
1335         o Allow multi-column hash indexes
1336         o -During index creation, pre-sort the tuples to improve build speed
1337
1338
1339
1340 Fsync
1341 =====
1342
1343 * Determine optimal fdatasync/fsync, O_SYNC/O_DSYNC options
1344
1345   Ideally this requires a separate test program that can be run
1346   at initdb time or optionally later.  Consider O_SYNC when
1347   O_DIRECT exists.
1348
1349 * Add program to test if fsync has a delay compared to non-fsync
1350 * Consider sorting writes during checkpoint
1351
1352   http://archives.postgresql.org/pgsql-hackers/2007-06/msg00541.php
1353
1354
1355
1356 Cache Usage
1357 ===========
1358
1359 * Speed up COUNT(*)
1360
1361   We could use a fixed row count and a +/- count to follow MVCC
1362   visibility rules, or a single cached value could be used and
1363   invalidated if anyone modifies the table.  Another idea is to
1364   get a count directly from a unique index, but for this to be
1365   faster than a sequential scan it must avoid access to the heap
1366   to obtain tuple visibility information.
1367
1368 * Provide a way to calculate an "estimated COUNT(*)"
1369
1370   Perhaps by using the optimizer's cardinality estimates or random
1371   sampling.
1372
1373   http://archives.postgresql.org/pgsql-hackers/2005-11/msg00943.php
1374
1375 * Allow data to be pulled directly from indexes
1376
1377   Currently indexes do not have enough tuple visibility information
1378   to allow data to be pulled from the index without also accessing
1379   the heap.  One way to allow this is to set a bit on index tuples
1380   to indicate if a tuple is currently visible to all transactions
1381   when the first valid heap lookup happens.  This bit would have to
1382   be cleared when a heap tuple is expired.
1383
1384   Another idea is to maintain a bitmap of heap pages where all rows
1385   are visible to all backends, and allow index lookups to reference
1386   that bitmap to avoid heap lookups, perhaps the same bitmap we might
1387   add someday to determine which heap pages need vacuuming.  Frequently
1388   accessed bitmaps would have to be stored in shared memory.  One 8k
1389   page of bitmaps could track 512MB of heap pages.
1390
1391   A third idea would be for a heap scan to check if all rows are visible
1392   and if so set a per-table flag which can be checked by index scans. 
1393   Any change to the table would have to clear the flag.  To detect
1394   changes during the heap scan a counter could be set at the start and
1395   checked at the end --- if it is the same, the table has not been
1396   modified --- any table change would increment the counter.
1397
1398   http://archives.postgresql.org/pgsql-patches/2007-10/msg00166.php
1399   http://archives.postgresql.org/pgsql-patches/2008-01/msg00049.php
1400
1401 * Consider automatic caching of statements at various levels:
1402
1403         o Parsed query tree
1404         o Query execute plan
1405         o Query results
1406         http://archives.postgresql.org/pgsql-hackers/2008-04/msg00823.php
1407
1408 * Consider increasing internal areas when shared buffers is increased
1409
1410   http://archives.postgresql.org/pgsql-hackers/2005-10/msg01419.php
1411
1412 * Consider decreasing the amount of memory used by PrivateRefCount
1413
1414   http://archives.postgresql.org/pgsql-hackers/2006-11/msg00797.php
1415   http://archives.postgresql.org/pgsql-hackers/2007-01/msg00752.php
1416
1417 * Consider allowing higher priority queries to have referenced buffer
1418   cache pages stay in memory longer
1419
1420   http://archives.postgresql.org/pgsql-hackers/2007-11/msg00562.php
1421
1422
1423
1424 Vacuum
1425 ======
1426
1427 * Improve speed with indexes
1428
1429   For large table adjustments during VACUUM FULL, it is faster to cluster
1430   or reindex rather than update the index.  Also, index updates can bloat
1431   the index.
1432
1433   http://archives.postgresql.org/pgsql-hackers/2007-03/msg00024.php
1434   http://archives.postgresql.org/pgsql-performance/2007-05/msg00296.php
1435   http://archives.postgresql.org/pgsql-hackers/2007-08/msg00307.php
1436
1437 * Auto-fill the free space map by scanning the buffer cache or by
1438   checking pages written by the background writer
1439
1440   http://archives.postgresql.org/pgsql-hackers/2006-02/msg01125.php
1441   http://archives.postgresql.org/pgsql-hackers/2006-03/msg00011.php
1442
1443 * Create a bitmap of pages that need vacuuming
1444
1445   Instead of sequentially scanning the entire table, have the background
1446   writer or some other process record pages that have expired rows, then
1447   VACUUM can look at just those pages rather than the entire table.  In
1448   the event of a system crash, the bitmap would probably be invalidated.
1449   One complexity is that index entries still have to be vacuumed, and
1450   doing this without an index scan (by using the heap values to find the
1451   index entry) might be slow and unreliable, especially for user-defined
1452   index functions.
1453
1454   http://archives.postgresql.org/pgsql-hackers/2006-12/msg01188.php
1455   http://archives.postgresql.org/pgsql-hackers/2007-01/msg00121.php
1456   http://archives.postgresql.org/pgsql-patches/2007-03/msg00508.php
1457   http://archives.postgresql.org/pgsql-patches/2007-04/msg00347.php
1458   http://archives.postgresql.org/pgsql-hackers/2007-11/msg00156.php
1459   http://archives.postgresql.org/pgsql-hackers/2008-03/msg00546.php
1460   http://archives.postgresql.org/pgsql-hackers/2008-04/msg00416.php
1461
1462 * Allow FSM to return free space toward the beginning of the heap file,
1463   in hopes that empty pages at the end can be truncated by VACUUM
1464 * Allow FSM page return free space based on table clustering, to assist
1465   in maintaining clustering?
1466 * Improve dead row detection during multi-statement transactions usage
1467
1468   http://archives.postgresql.org/pgsql-patches/2007-03/msg00358.php
1469
1470 * Consider a more compact data representation for dead tuples
1471
1472   http://archives.postgresql.org/pgsql-patches/2007-05/msg00143.php
1473
1474
1475 * Auto-vacuum
1476
1477         o %Issue log message to suggest VACUUM FULL if a table is nearly
1478           empty?
1479         o Improve control of auto-vacuum
1480
1481           http://archives.postgresql.org/pgsql-hackers/2006-12/msg00876.php
1482
1483         o Prevent long-lived temporary tables from causing frozen-xid
1484           advancement starvation
1485
1486           The problem is that autovacuum cannot vacuum them to set frozen xids;
1487           only the session that created them can do that.
1488           http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php
1489
1490         o Store per-table autovacuum settings in pg_class.reloptions.
1491
1492           http://archives.postgresql.org/pgsql-hackers/2007-02/msg01440.php
1493           http://archives.postgresql.org/pgsql-hackers/2008-01/msg00724.php
1494
1495         o Prevent autovacuum from running if an old transaction is still
1496           running from the last vacuum
1497
1498           http://archives.postgresql.org/pgsql-hackers/2007-11/msg00899.php
1499
1500
1501
1502 Locking
1503 =======
1504
1505 * Fix priority ordering of read and write light-weight locks (Neil)
1506
1507   http://archives.postgresql.org/pgsql-hackers/2004-11/msg00893.php
1508   http://archives.postgresql.org/pgsql-hackers/2004-11/msg00905.php
1509
1510 * Fix problem when multiple subtransactions of the same outer transaction
1511   hold different types of locks, and one subtransaction aborts
1512
1513   http://archives.postgresql.org/pgsql-hackers/2006-11/msg01011.php
1514   http://archives.postgresql.org/pgsql-hackers/2006-12/msg00001.php
1515   http://archives.postgresql.org/pgsql-hackers/2007-02/msg00435.php
1516   http://archives.postgresql.org/pgsql-hackers/2007-05/msg00773.php
1517
1518 * Allow UPDATEs on only non-referential integrity columns not to conflict
1519   with referential integrity locks
1520
1521   http://archives.postgresql.org/pgsql-hackers/2007-02/msg00073.php
1522
1523 * Add idle_in_transaction_timeout GUC so locks are not held for long
1524   periods of time
1525
1526 * Improve deadlock detection when a page cleaning lock conflicts
1527   with a shared buffer that is pinned
1528
1529   http://archives.postgresql.org/pgsql-bugs/2008-01/msg00138.php
1530   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00873.php
1531   http://archives.postgresql.org/pgsql-committers/2008-01/msg00365.php
1532
1533 * Detect deadlocks involving LockBufferForCleanup()
1534
1535   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00873.php
1536
1537
1538
1539 Startup Time Improvements
1540 =========================
1541
1542 * Experiment with multi-threaded backend for backend creation [thread]
1543
1544   This would prevent the overhead associated with process creation. Most
1545   operating systems have trivial process creation time compared to
1546   database startup overhead, but a few operating systems (Win32,
1547   Solaris) might benefit from threading.  Also explore the idea of
1548   a single session using multiple threads to execute a statement faster.
1549
1550
1551
1552 Write-Ahead Log
1553 ===============
1554
1555 * Eliminate need to write full pages to WAL before page modification [wal]
1556
1557   Currently, to protect against partial disk page writes, we write
1558   full page images to WAL before they are modified so we can correct any
1559   partial page writes during recovery.  These pages can also be
1560   eliminated from point-in-time archive files.
1561
1562         o  When off, write CRC to WAL and check file system blocks
1563            on recovery
1564
1565            If CRC check fails during recovery, remember the page in case
1566            a later CRC for that page properly matches.
1567
1568         o  Write full pages during file system write and not when
1569            the page is modified in the buffer cache
1570
1571            This allows most full page writes to happen in the background
1572            writer.  It might cause problems for applying WAL on recovery
1573            into a partially-written page, but later the full page will be
1574            replaced from WAL.
1575
1576 * Allow WAL traffic to be streamed to another server for stand-by
1577   replication
1578 * Reduce WAL traffic so only modified values are written rather than
1579   entire rows
1580
1581   http://archives.postgresql.org/pgsql-hackers/2007-03/msg01589.php
1582
1583 * Allow WAL information to recover corrupted pg_controldata
1584
1585   http://archives.postgresql.org/pgsql-patches/2006-06/msg00025.php
1586
1587 * Find a way to reduce rotational delay when repeatedly writing
1588   last WAL page
1589
1590   Currently fsync of WAL requires the disk platter to perform a full
1591   rotation to fsync again. One idea is to write the WAL to different
1592   offsets that might reduce the rotational delay.
1593
1594 * Allow WAL logging to be turned off for a table, but the table
1595   might be dropped or truncated during crash recovery [walcontrol]
1596
1597   Allow tables to bypass WAL writes and just fsync() dirty pages on
1598   commit.  This should be implemented using ALTER TABLE, e.g. ALTER
1599   TABLE PERSISTENCE [ DROP | TRUNCATE | DEFAULT ].  Tables using
1600   non-default logging should not use referential integrity with
1601   default-logging tables.  A table without dirty buffers during a
1602   crash could perhaps avoid the drop/truncate.
1603
1604 * Allow WAL logging to be turned off for a table, but the table would
1605   avoid being truncated/dropped [walcontrol]
1606
1607   To do this, only a single writer can modify the table, and writes
1608   must happen only on new pages so the new pages can be removed during
1609   crash recovery.  Readers can continue accessing the table.  Such
1610   tables probably cannot have indexes.  One complexity is the handling
1611   of indexes on TOAST tables.
1612
1613 * Speed WAL recovery by allowing more than one page to be prefetched
1614
1615   This should be done utilizing the same infrastructure used for
1616   prefetching in general to avoid introducing complex error-prone code
1617   in WAL replay.
1618   http://archives.postgresql.org/pgsql-general/2007-12/msg00683.php
1619   http://archives.postgresql.org/pgsql-hackers/2007-12/msg00497.php
1620   http://archives.postgresql.org/pgsql-hackers/2008-02/msg01279.php
1621
1622 * Improve WAL concurrency by increasing lock granularity
1623
1624   http://archives.postgresql.org/pgsql-hackers/2008-02/msg00556.php
1625
1626 * Be more aggressive about creating WAL files
1627
1628   http://archives.postgresql.org/pgsql-hackers/2007-10/msg01325.php
1629   http://archives.postgresql.org/pgsql-hackers/2004-07/msg01075.php
1630   http://archives.postgresql.org/pgsql-hackers/2005-04/msg00556.php
1631
1632 * Have resource managers report the duration of their status changes
1633
1634   http://archives.postgresql.org/pgsql-hackers/2007-10/msg01468.php
1635
1636 * Move pgfoundry's xlogdump to /contrib and have it rely more closely
1637   on the WAL backend code
1638
1639   http://archives.postgresql.org/pgsql-hackers/2007-11/msg00035.php
1640
1641
1642
1643
1644 Optimizer / Executor
1645 ====================
1646
1647 * Improve selectivity functions for geometric operators
1648 * Precompile SQL functions to avoid overhead
1649 * Create utility to compute accurate random_page_cost value
1650 * Improve ability to display optimizer analysis using OPTIMIZER_DEBUG
1651 * Have EXPLAIN ANALYZE issue NOTICE messages when the estimated and
1652   actual row counts differ by a specified percentage
1653 * Improve how ANALYZE computes in-doubt tuples
1654
1655   http://archives.postgresql.org/pgsql-hackers/2007-11/msg00771.php
1656
1657 * Consider using hash buckets to do DISTINCT, rather than sorting
1658
1659   This would be beneficial when there are few distinct values.  This is
1660   already used by GROUP BY.
1661
1662 * Log statements where the optimizer row estimates were dramatically
1663   different from the number of rows actually found?
1664 * Consider compressed annealing to search for query plans
1665
1666   This might replace GEQO, http://sixdemonbag.org/Djinni.
1667
1668 * Improve merge join performance by allowing mark/restore of
1669   tuple sources
1670
1671   http://archives.postgresql.org/pgsql-hackers/2007-01/msg00096.php
1672
1673 * Consider using a hash for joining to a large IN (VALUES ...) list
1674
1675   http://archives.postgresql.org/pgsql-hackers/2007-05/msg00450.php
1676
1677
1678
1679 Background Writer
1680 =================
1681
1682 * Consider having the background writer update the transaction status
1683   hint bits before writing out the page
1684
1685   Implementing this requires the background writer to have access to system
1686   catalogs and the transaction status log.
1687
1688 * Consider adding buffers the background writer finds reusable to the
1689   free list 
1690
1691   http://archives.postgresql.org/pgsql-hackers/2007-04/msg00781.php
1692
1693 * Automatically tune bgwriter_delay based on activity rather then using a
1694   fixed interval
1695
1696   http://archives.postgresql.org/pgsql-hackers/2007-04/msg00781.php
1697
1698 * Consider wither increasing BM_MAX_USAGE_COUNT improves performance
1699
1700   http://archives.postgresql.org/pgsql-hackers/2007-06/msg01007.php
1701
1702 * Test to see if calling PreallocXlogFiles() from the background writer
1703   will help with WAL segment creation latency
1704
1705   http://archives.postgresql.org/pgsql-patches/2007-06/msg00340.php
1706
1707
1708
1709 Miscellaneous Performance
1710 =========================
1711
1712 * Do async I/O for faster random read-ahead of data
1713
1714   Async I/O allows multiple I/O requests to be sent to the disk with
1715   results coming back asynchronously.
1716
1717   http://archives.postgresql.org/pgsql-hackers/2006-10/msg00820.php
1718   http://archives.postgresql.org/pgsql-performance/2007-09/msg00255.php
1719   http://archives.postgresql.org/pgsql-hackers/2007-12/msg00027.php
1720   http://archives.postgresql.org/pgsql-patches/2008-01/msg00170.php
1721
1722 * Use mmap() rather than SYSV shared memory or to write WAL files?
1723
1724   This would remove the requirement for SYSV SHM but would introduce
1725   portability issues. Anonymous mmap (or mmap to /dev/zero) is required
1726   to prevent I/O overhead.
1727
1728 * Consider mmap()'ing files into a backend?
1729
1730   Doing I/O to large tables would consume a lot of address space or
1731   require frequent mapping/unmapping.  Extending the file also causes
1732   mapping problems that might require mapping only individual pages,
1733   leading to thousands of mappings.  Another problem is that there is no
1734   way to _prevent_ I/O to disk from the dirty shared buffers so changes
1735   could hit disk before WAL is written.
1736
1737 * Add a script to ask system configuration questions and tune postgresql.conf
1738 * Consider ways of storing rows more compactly on disk
1739
1740         o Reduce the row header size?
1741         o Consider reducing on-disk varlena length from four bytes to
1742           two because a heap row cannot be more than 64k in length
1743
1744 * Consider increasing NUM_CLOG_BUFFERS
1745
1746   http://archives.postgresql.org/pgsql-hackers/2007-08/msg00030.php
1747   http://archives.postgresql.org/pgsql-performance/2007-08/msg00024.php
1748
1749 * Consider transaction start/end performance improvements
1750
1751   http://archives.postgresql.org/pgsql-hackers/2007-07/msg00948.php
1752   http://archives.postgresql.org/pgsql-hackers/2008-03/msg00361.php
1753
1754 * Allow user configuration of TOAST thresholds
1755
1756   http://archives.postgresql.org/pgsql-hackers/2007-02/msg00213.php
1757   http://archives.postgresql.org/pgsql-hackers/2007-08/msg00082.php
1758
1759 * Allow configuration of backend priorities via the operating system
1760
1761   Though backend priorities make priority inversion during lock
1762   waits possible, research shows that this is not a huge problem.
1763
1764   http://archives.postgresql.org/pgsql-general/2007-02/msg00493.php
1765
1766 * Experiment with multi-threaded backend better I/O utilization
1767
1768   This would allow a single query to make use of multiple I/O channels
1769   simultaneously.  One idea is to create a background reader that can
1770   pre-fetch sequential and index scan pages needed by other backends.
1771   This could be expanded to allow concurrent reads from multiple devices
1772   in a partitioned table.
1773
1774 * Experiment with multi-threaded backend better CPU utilization
1775
1776   This would allow several CPUs to be used for a single query, such as
1777   for sorting or query execution.
1778
1779 * Consider increasing the minimum allowed number of shared buffers
1780
1781   http://archives.postgresql.org/pgsql-bugs/2008-02/msg00157.php
1782
1783 * Expire published xmin for read-only and idle transactions
1784
1785   http://archives.postgresql.org/pgsql-hackers/2007-09/msg00343.php
1786
1787 * Consider if CommandCounterIncrement() can avoid its
1788   AcceptInvalidationMessages() call
1789
1790   http://archives.postgresql.org/pgsql-committers/2007-11/msg00585.php
1791
1792 * Improve performance of shared invalidation queue for multiple CPUs
1793
1794   http://archives.postgresql.org/pgsql-performance/2008-01/msg00023.php
1795
1796 * Consider Cartesian joins when both relations are needed to form an
1797   indexscan qualification for a third relation
1798
1799   http://archives.postgresql.org/pgsql-performance/2007-12/msg00090.php
1800
1801 * Consider not storing a NULL bitmap on disk if all the NULLs are
1802   trailing
1803
1804   http://archives.postgresql.org/pgsql-hackers/2007-12/msg00624.php
1805   http://archives.postgresql.org/pgsql-patches/2007-12/msg00109.php
1806
1807 * Sort large UPDATE/DELETEs so it is done in heap order
1808
1809   http://archives.postgresql.org/pgsql-hackers/2008-01/msg01119.php
1810
1811 * -Avoid tuple some tuple copying in sort routines
1812 * SMP scalability improvements
1813
1814   http://archives.postgresql.org/pgsql-hackers/2007-07/msg00439.php
1815   http://archives.postgresql.org/pgsql-hackers/2007-09/msg00206.php
1816   http://archives.postgresql.org/pgsql-hackers/2008-03/msg00361.php
1817
1818 * Research reducing deTOASTing in more places
1819
1820   http://archives.postgresql.org/pgsql-hackers/2007-09/msg00895.php
1821
1822 * Consider being smarter about memory and external files used during
1823   sorts
1824
1825   http://archives.postgresql.org/pgsql-hackers/2007-11/msg01101.php
1826   http://archives.postgresql.org/pgsql-hackers/2007-12/msg00045.php
1827
1828 * Allow one transaction to see tuples using the snapshot of another
1829   transaction
1830
1831   This would assist multiple backends in working together.
1832   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00400.php
1833
1834
1835 Source Code
1836 ===========
1837
1838 * Add use of 'const' for variables in source tree
1839 * Move some things from contrib into main tree
1840 * %Remove warnings created by -Wcast-align
1841 * Move platform-specific ps status display info from ps_status.c to ports
1842 * Add optional CRC checksum to heap and index pages
1843 * Improve documentation to build only interfaces (Marc)
1844 * Remove or relicense modules that are not under the BSD license, if possible
1845 * Acquire lock on a relation before building a relcache entry for it
1846 * Allow cross-compiling by generating the zic database on the target system
1847 * Improve NLS maintenance of libpgport messages linked onto applications
1848 * Clean up casting in contrib/isn
1849
1850   http://archives.postgresql.org/pgsql-hackers/2006-11/msg00245.php
1851
1852 * Use UTF8 encoding for NLS messages so all server encodings can
1853   read them properly
1854 * Update Bonjour to work with newer cross-platform SDK
1855
1856   http://archives.postgresql.org/pgsql-hackers/2006-09/msg02238.php
1857   http://archives.postgresql.org/pgsql-patches/2006-10/msg00048.php
1858
1859 * Consider detoasting keys before sorting
1860 * Consider GnuTLS if OpenSSL license becomes a problem
1861
1862   http://archives.postgresql.org/pgsql-patches/2006-05/msg00040.php
1863   http://archives.postgresql.org/pgsql-hackers/2006-12/msg01213.php
1864
1865 * Consider changing documentation format from SGML to XML
1866
1867   http://archives.postgresql.org/pgsql-docs/2006-12/msg00152.php
1868
1869 * Consider making NAMEDATALEN more configurable in future releases
1870 * Update our code to handle 64-bit timezone files to match the zic
1871   source code, which now uses them
1872 * Have configure choose integer datetimes by default
1873
1874   http://archives.postgresql.org/pgsql-patches/2007-05/msg00046.php
1875
1876 * Support scoped IPv6 addresses
1877
1878   http://archives.postgresql.org/pgsql-bugs/2007-05/msg00111.php
1879
1880 * Consider allowing 64-bit integers and floats to be passed by value on
1881   64-bit platforms
1882
1883   Also change 32-bit floats (float4) to be passed by value at the same
1884   time.
1885
1886 * Research use of signals and sleep wake ups
1887
1888   http://archives.postgresql.org/pgsql-hackers/2007-07/msg00003.php
1889
1890 * Add automated check for invalid C++ source code constructs
1891
1892   http://archives.postgresql.org/pgsql-patches/2007-07/msg00056.php
1893
1894 * Consider simplifying how memory context resets handle child contexts
1895
1896   http://archives.postgresql.org/pgsql-patches/2007-08/msg00067.php
1897
1898 * Remove use of MAKE_PTR and MAKE_OFFSET macros
1899
1900   http://archives.postgresql.org/pgsql-general/2007-08/msg01510.php
1901
1902 * Convert single quotes to apostrophes in the PDF documentation
1903
1904   http://archives.postgresql.org/pgsql-docs/2007-12/msg00059.php
1905
1906 * Create three versions of libpgport to simplify client code
1907
1908   http://archives.postgresql.org/pgsql-hackers/2007-10/msg00154.php
1909
1910 * Remove old-style routines for manipulating tuples
1911
1912   http://archives.postgresql.org/pgsql-hackers/2007-10/msg00851.php
1913
1914 * Improve detection of shared memory segments being used by other
1915   FreeBSD jails
1916
1917   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00656.php
1918
1919 * Implement the non-threaded Avahi service discovery protocol
1920
1921   http://archives.postgresql.org/pgsql-hackers/2008-02/msg00939.php
1922   http://archives.postgresql.org/pgsql-patches/2008-02/msg00097.php
1923   http://archives.postgresql.org/pgsql-hackers/2008-03/msg01211.php
1924   http://archives.postgresql.org/pgsql-patches/2008-04/msg00001.php
1925
1926 * Win32
1927
1928         o Remove configure.in check for link failure when cause is found
1929         o Remove readdir() errno patch when runtime/mingwex/dirent.c rev
1930           1.4 is released
1931         o Remove psql newline patch when we find out why mingw outputs an
1932           extra newline
1933         o Allow psql to use readline once non-US code pages work with
1934           backslashes
1935         o Fix problem with shared memory on the Win32 Terminal Server
1936         o Diagnose problem where shared memory can sometimes not be
1937           attached by postmaster children
1938
1939           http://archives.postgresql.org/pgsql-general/2007-08/msg01377.php
1940
1941         o Improve signal handling
1942
1943           http://archives.postgresql.org/pgsql-patches/2005-06/msg00027.php
1944
1945         o Convert MSVC build system to remove most batch files
1946
1947           http://archives.postgresql.org/pgsql-hackers/2007-08/msg00961.php
1948
1949         o Prevent SSL from sending network packets to avoid interference
1950           with Win32 signal emulation
1951
1952           http://archives.postgresql.org/pgsql-hackers/2007-12/msg00455.php
1953
1954         o Support pgxs when using MSVC
1955
1956         o Fix MSVC NLS support, like for to_char()
1957
1958           http://archives.postgresql.org/pgsql-hackers/2008-02/msg00485.php
1959           http://archives.postgresql.org/pgsql-patches/2008-02/msg00038.php
1960
1961         o Find a correct rint() substitute on Windows
1962
1963           http://archives.postgresql.org/pgsql-hackers/2008-01/msg00808.php
1964
1965
1966
1967 * Wire Protocol Changes
1968
1969         o Allow dynamic character set handling
1970         o Add decoded type, length, precision
1971         o Use compression?
1972         o Update clients to use data types, typmod, schema.table.column names
1973           of result sets using new statement protocol
1974
1975
1976 Exotic Features
1977 ===============
1978
1979 * Add pre-parsing phase that converts non-ISO syntax to supported
1980   syntax
1981
1982   This could allow SQL written for other databases to run without
1983   modification.
1984
1985 * Allow plug-in modules to emulate features from other databases
1986 * Add features of Oracle-style packages  (Pavel)
1987
1988   A package would be a schema with session-local variables,
1989   public/private functions, and initialization functions.  It
1990   is also possible to implement these capabilities
1991   in any schema and not use a separate "packages"
1992   syntax at all.
1993
1994   http://archives.postgresql.org/pgsql-hackers/2006-08/msg00384.php
1995
1996 * Consider allowing control of upper/lower case folding of unquoted
1997   identifiers
1998
1999   http://archives.postgresql.org/pgsql-hackers/2004-04/msg00818.php
2000   http://archives.postgresql.org/pgsql-hackers/2006-10/msg01527.php
2001   http://archives.postgresql.org/pgsql-hackers/2008-03/msg00849.php
2002
2003 * Add autonomous transactions
2004
2005   http://archives.postgresql.org/pgsql-hackers/2008-01/msg00893.php
2006
2007
2008
2009 Features We Do _Not_ Want
2010 =========================
2011
2012 * All backends running as threads in a single process (not wanted)
2013
2014   This eliminates the process protection we get from the current setup.
2015   Thread creation is usually the same overhead as process creation on
2016   modern systems, so it seems unwise to use a pure threaded model.
2017
2018 * Optimizer hints (not wanted)
2019
2020   Optimizer hints are used to work around problems in the optimizer.  We
2021   would rather have the problems reported and fixed.
2022
2023   http://archives.postgresql.org/pgsql-hackers/2006-08/msg00506.php
2024   http://archives.postgresql.org/pgsql-hackers/2006-10/msg00517.php
2025   http://archives.postgresql.org/pgsql-hackers/2006-10/msg00663.php
2026
2027
2028   Because we support postfix operators, it isn't possible to make AS
2029   optional and continue to use bison.
2030   http://archives.postgresql.org/pgsql-hackers/2003-04/msg00436.php
2031
2032   http://archives.postgresql.org/pgsql-sql/2006-08/msg00164.php
2033
2034 * Embedded server (not wanted)
2035
2036   While PostgreSQL clients runs fine in limited-resource environments, the
2037   server requires multiple processes and a stable pool of resources to
2038   run reliabily and efficiently.  Stripping down the PostgreSQL server
2039   to run in the same process address space as the client application
2040   would add too much complexity and failure cases.