saves nearly 700kB in the default shared memory segment size, which seems
worthwhile, and it is a feature that many users won't use anyway. Per
Heikki's argument, there is no point in a compromise value --- those who
are using 2PC at all will probably want it at least equal to max_connections.
But we can't set it to zero by default without breaking the prepared_xacts
regression test.
so that the latter estimates the number of groups that grouping will
produce. This is needed because it is primarily query_planner that
makes the decision between fast-start and fast-finish plans, and in the
original coding it was unable to make more than a crude rule-of-thumb
choice when the query involved grouping. This revision helps us make
saner choices for queries like SELECT ... GROUP BY ... LIMIT, as in a
recent example from Mark Kirkwood. Also move the responsibility for
canonicalizing sort_pathkeys and group_pathkeys into query_planner;
this information has to be available anyway to support the first change,
and doing it this way lets us get rid of compare_noncanonical_pathkeys
entirely.
to copy the whole plan tree before invoking adjust_plan_varnos(); else
if there is any multiply-linked substructure, the latter might increment
some Var's varno twice. Previously there were some retail copyObject
calls inside adjust_plan_varnos, but it seems a lot safer to just dup the
whole tree first. Also, set_inner_join_references was trying to avoid
work by not recursing if a BitmapHeapScan's bitmapqualorig contained no
outer references; which was OK at the time the code was written, I think,
but now that create_bitmap_scan_plan removes duplicate clauses from
bitmapqualorig it is possible for that field to be NULL while outer
references still remain in the qpqual and/or contained indexscan nodes.
For safety, always recurse even if the BitmapHeapScan looks to be outer
reference free. Per reports from Michael Fuhr and Oleg Bartunov.
>
> 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.
> o Issue a warning if a change-on-restart-only postgresql.conf value
> is modified and the server config files are reloaded
> o Mark change-on-restart-only values in postgresql.conf
205a209
> o Fix SELECT '0.01 years'::interval, '0.01 months'::interval
>
> Currently, while \e saves a single query as one entry, interactive
> queries are saved one line at a time. Ideally all queries
> whould be saved like \e does.
>
> o Allow multi-line column values to align in the proper columns
>
> If the second output column value is 'a\nb', the 'b' should appear
> in the second display column, rather than the first column as it
> does now.
< in PL/PgSQL is to use EXECUTE.
> in PL/PgSQL is to use EXECUTE. One complexity is that a function
> might itself drop and recreate dependent tables, causing it to
> invalidate its own query plan.
< inheritance, and allow it to work for UPDATE and DELETE queries
> inheritance, allow it to work for UPDATE and DELETE queries, and allow
> it to be used for all queries with little performance impact
< * Allow constraint_elimination to be automatically performed
<
< This requires additional code to reduce the performance loss caused by
< constraint elimination.
< * -Allow limits on per-db/role connections
43d41
< * -Prevent dropping user that still owns objects, or auto-drop the objects
49d46
< * -Add the client IP address and port to pg_stat_activity
< * -Add session start time and last statement time to pg_stat_activity
< * -Add a function that returns the start time of the postmaster
230d224
< o -Allow MIN()/MAX() on arrays
< o -Modify array literal representation to handle array index lower bound
< of other than one
253d244
< * -Add function to return compressed length of TOAST data values
< * -Prevent to_char() on interval from returning meaningless values
<
< For example, to_char('1 month', 'mon') is meaningless. Basically,
< most date-related parameters to to_char() are meaningless for
< intervals because interval is not anchored to a date.
<
< * -Have views on temporary tables exist in the temporary namespace
< * -Allow temporary views on non-temporary tables
329d311
< * -Add BETWEEN SYMMETRIC/ASYMMETRIC
< * -Add E'' escape string marker so eventually ordinary strings can treat
< backslashes literally, for portability
<
< * -Allow additional tables to be specified in DELETE for joins
<
< UPDATE already allows this (UPDATE...FROM) but we need similar
< functionality in DELETE. It's been agreed that the keyword should
< be USING, to avoid anything as confusing as DELETE FROM a FROM b.
<
341d313
< * -Allow REINDEX to rebuild all database indexes
< * -Add an option to automatically use savepoints for each statement in a
< multi-statement transaction.
<
< When enabled, this would allow errors in multi-statement transactions
< to be automatically ignored.
<
426d391
< o -Allow FOR UPDATE queries to do NOWAIT locks
473d437
< o -Allow COPY to understand \x as a hex byte
< o -Allow COPY to optionally include column headings in the first line
< o -Allow COPY FROM ... CSV to interpret newlines and carriage
< returns in data
525d485
< o -Have SHOW ALL show descriptions for server-side variables
< o -Allow PL/PgSQL's RAISE function to take expressions
<
< Currently only constants are supported.
<
< o -Change PL/PgSQL to use palloc() instead of malloc()
545d499
< o -Allow PL/pgSQL EXECUTE query_var INTO record_var;
550d503
< o -Pass arrays natively instead of as text between plperl and postgres
598d550
< o -Add dumping and restoring of LOB comments
638d589
< * -Implement shared row locks and use them in RI triggers
642d592
< * -Allow triggers to be disabled
< * -Add two-phase commit
<
<
< * -Prevent inherited tables from expanding temporary subtables of other
< sessions
< * -Use indexes for MIN() and MAX()
<
< MIN/MAX queries can already be rewritten as SELECT col FROM tab ORDER
< BY col {DESC} LIMIT 1. Completing this item involves doing this
< transformation automatically.
<
< * -Use index to restrict rows returned by multi-key index when used with
< non-consecutive keys to reduce heap accesses
<
< For an index on col1,col2,col3, and a WHERE clause of col1 = 5 and
< col3 = 9, spin though the index checking for col1 and col3 matches,
< rather than just col1; also called skip-scanning.
<
< * -Fetch heap pages matching index entries in sequential order
<
< Rather than randomly accessing heap pages based on index entries, mark
< heap pages needing access in a bitmap and do the lookups in sequential
< order. Another method would be to sort heap ctids matching the index
< before accessing the heap rows.
<
< * -Allow non-bitmap indexes to be combined by creating bitmaps in memory
<
< This feature allows separate indexes to be ANDed or ORed together. This
< is particularly useful for data warehousing applications that need to
< query the database in an many permutations. This feature scans an index
< and creates an in-memory bitmap, and allows that bitmap to be combined
< with other bitmap created in a similar way. The bitmap can either index
< all TIDs, or be lossy, meaning it records just page numbers and each
< page tuple has to be checked for validity in a separate pass.
<
< * -Fix incorrect rtree results due to wrong assumptions about "over"
< operator semantics
782d694
< o -Add concurrency to GIST
813d724
< * -Allow multiple blocks to be written to WAL with one write()
< * -Consider use of open/fcntl(O_DIRECT) to minimize OS caching,
< for WAL writes
<
< O_DIRECT doesn't have the same media write guarantees as fsync, so it
< is in addition to the fsync method, not in place of it.
<
< * -Cache last known per-tuple offsets to speed long tuple access
< * -Allow the size of the buffer cache used by temporary objects to be
< specified as a GUC variable
<
< Larger local buffer cache sizes requires more efficient handling of
< local cache lookups.
<
< * -Improve the background writer
<
< Allow the background writer to more efficiently write dirty buffers
< from the end of the LRU cache and use a clock sweep algorithm to
< write other dirty buffers to reduced checkpoint I/O
<
897d788
< * -Add a warning when the free space map is too small
917d807
< o -Move into the backend code
< * -Make locking of shared data structures more fine-grained
<
< This requires that more locks be acquired but this would reduce lock
< contention, improving concurrency.
<
< * -Improve SMP performance on i386 machines
<
< i386-based SMP machines can generate excessive context switching
< caused by lock failure in high concurrency situations. This may be
< caused by CPU cache line invalidation inefficiencies.
<
979d857
< o -Add ability to turn off full page writes
< * -Eliminate WAL logging for CREATE TABLE AS when not doing WAL archiving
< * -Change WAL to use 32-bit CRC, for performance reasons
<
< * -Use CHECK constraints to influence optimizer decisions
<
< CHECK constraints contain information about the distribution of values
< within the table. This is also useful for implementing subtables where
< a tables content is distributed across several subtables.
<
1045d913
< * -ANALYZE should record a pg_statistic entry for an all-NULL column
1099d966
< * -Remove kerberos4 from source tree
1103d969
< * -Make src/port/snprintf.c thread-safe
1118d983
< * -Add C code on Unix to copy directories for use in creating new databases
1133d997
< o -Improve dlerror() reporting string
< Currently SIGTERM of a backend can lead to lock table corruption.
> 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.
< o Allow postgresql.conf values to be set so they can not be changed
< by the user
166c167,171
< * %Remove Money type, add money formatting for decimal type
> * Improve the MONEY data type
>
> Change the MONEY data type to use DECIMAL internally, with special
> locale-aware output formatting.
>
225c230
< o %Allow MIN()/MAX() on arrays
> o -Allow MIN()/MAX() on arrays
228c233
< o Modify array literal representation to handle array index lower bound
> o -Modify array literal representation to handle array index lower bound
235a241
> o Auto-delete large objects when referencing row is deleted
< Currently large objects entries do not have owners. Permissions can
< only be set at the pg_largeobject table level.
> /contrib/lo offers this functionality.
240d244
< o Auto-delete large objects when referencing row is deleted
< * %Have views on temporary tables exist in the temporary namespace
< * Allow temporary views on non-temporary tables
< * %Allow RULE recompilation
> * -Have views on temporary tables exist in the temporary namespace
> * -Allow temporary views on non-temporary tables
> * Allow VIEW/RULE recompilation when the underlying tables change
340a345,347
>
> This is like DELETE CASCADE, but truncates.
>
381c388
< * Make row-wise comparisons work per SQL spec
> * %Make row-wise comparisons work per SQL spec
< o Currently the system uses the operating system COPY command to
< create a new database. Add ON COMMIT capability to CREATE TABLE AS
< SELECT
> o Add ON COMMIT capability to CREATE TABLE AS ... SELECT
427c432
< o %Add ALTER DOMAIN TYPE
> o Add ALTER DOMAIN to modify the underlying data type
< o %Disallow dropping of an inherited constraint
< o -Allow objects to be moved to different schemas
> o Add missing object types for ALTER ... SET SCHEMA
< o %Prevent child tables from altering constraints like CHECK that were
< inherited from the parent table
> o %Disallow dropping of an inherited constraint
> o %Prevent child tables from altering or dropping constraints
> like CHECK that were inherited from the parent table
< o Handle references to temporary tables that are created, destroyed,
< then recreated during a session, and EXECUTE is not used
<
< This requires the cached PL/PgSQL byte code to be invalidated when
< an object referenced in the function is changed.
<
< o Add table function support to pltcl, plperl, plpython?
< o Allow PL/pgSQL to name columns by ordinal position, e.g. rec.(3)
> o Add table function support to pltcl, plpython
549a548
> o Allow function argument names to be queries from PL/PgSQL
< o Pass arrays natively instead of as text between plperl and postgres
< o Add support for polymorphic arguments and return types to plperl
> o -Pass arrays natively instead of as text between plperl and postgres
> o Add support for polymorphic arguments and return types to
> languages other than PL/PgSQL
> o Add support for OUT and INOUT parameters to languages other
> than PL/PgSQL
< * Allow libpq to access SQLSTATE so pg_ctl can test for connection failure
<
< This would be used for checking if the server is up.
<
565c563
< * Have initdb set DateStyle based on locale?
> * Have initdb set the input DateStyle (MDY or DMY) based on locale?
567d564
< * Add a schema option to createlang
< o Add pg_dumpall custom format dumps.
<
< This is probably best done by combining pg_dump and pg_dumpall
< into a single binary.
<
> o Add pg_dumpall custom format dumps?
612c605,606
< o Remove unnecessary abstractions in pg_dump source code
> o Remove unnecessary function pointer abstractions in pg_dump source
> code
< * %Remove CREATE CONSTRAINT TRIGGER
<
< This was used in older releases to dump referential integrity
< constraints.
<
682a672,675
> This is particularly important for references to temporary tables
> in PL/PgSQL because PL/PgSQL caches query plans. The only workaround
> in PL/PgSQL is to use EXECUTE.
>
748c741
< * Fetch heap pages matching index entries in sequential order
> * -Fetch heap pages matching index entries in sequential order
797c790
< Currently no only one hash bucket can be stored on a page. Ideally
> Currently only one hash bucket can be stored on a page. Ideally
806a800,802
> o Add WAL logging for crash recovery
> o Allow multi-column hash indexes
>
812a809,812
>
> Ideally this requires a separate test program that can be run
> at initdb time or optionally later.
>
867c867
< * Improve the background writer
> * -Improve the background writer
< For large table adjustements during vacuum, it is faster to reindex
< rather than update the index.
> For large table adjustements during VACUUM FULL, it is faster to
> reindex rather than update the index.
< * Reduce lock time by moving tuples with read lock, then write
< lock and truncate table
> * Reduce lock time during VACUUM FULL by moving tuples with read lock,
> then write lock and truncate table
919c919,920
< o %Suggest VACUUM FULL if a table is nearly empty
> o %Issue log message to suggest VACUUM FULL if a table is nearly
> empty?
995d995
< * Add WAL index reliability improvement to non-btree indexes
1045c1045
< * ANALYZE should record a pg_statistic entry for an all-NULL column
> * -ANALYZE should record a pg_statistic entry for an all-NULL column
1047a1048,1051
> * Allow constraint_elimination to be automatically performed
>
> This requires additional code to reduce the performance loss caused by
> constraint elimination.
1090c1094
< * Remove memory/file descriptor freeing before ereport(ERROR)
> * %Remove memory/file descriptor freeing before ereport(ERROR)
< * Promote debug_query_string into a server-side function current_query()
< * Allow the identifier length to be increased via a configure option
> * %Promote debug_query_string into a server-side function current_query()
> * %Allow the identifier length to be increased via a configure option
1113d1116
< * Fix cross-compiling of time zone database via 'zic'
1130c1133
< o Improve dlerror() reporting string
> o -Improve dlerror() reporting string
1132c1135
< o Add support for Unicode
> o %Add support for Unicode
the parent table, even if the command that creates them is executed by
someone else (such as a superuser or a member of the owning role).
Per gripe from Michael Fuhr.
in interval_mul and interval_div. This avoids an optimization bug
in A Certain Company's compiler (and given their explanation, I wouldn't
be surprised if other compilers blow it too). Besides the code seems
more clear this way --- in the original formulation, you had to mentally
recognize the common subexpression in order to understand what was going
on.