< * Allow the creation of indexes with mixed ascending/descending
> * -Allow the creation of indexes with mixed ascending/descending
<
< This is possible now by creating an operator class with reversed sort
< operators. One complexity is that NULLs would then appear at the start
< of the result set, and this might affect certain sort types, like
< merge join.
<
per-column options for btree indexes. The planner's support for this is still
pretty rudimentary; it does not yet know how to plan mergejoins with
nondefault ordering options. The documentation is pretty rudimentary, too.
I'll work on improving that stuff later.
Note incompatible change from prior behavior: ORDER BY ... USING will now be
rejected if the operator is not a less-than or greater-than member of some
btree opclass. This prevents less-than-sane behavior if an operator that
doesn't actually define a proper sort ordering is selected.
< * Improve the MONEY data type
> * -Make 64-bit version of the MONEY data type
> * Add locale-aware MONEY type, and support multiple currencies
< Change the MONEY data type to use DECIMAL internally, with special
< locale-aware output formatting.
< http://archives.postgresql.org/pgsql-hackers/2006-09/msg01107.php
>
> * Make consistent use of long/short command options --- pg_ctl needs
> long ones, pg_config doesn't have short ones, postgres doesn't have
> enough long ones, etc.
> o Consider parsing the -c string into individual queries so each
> is run in its own transaction
>
> o Consider disallowing multiple queries in PQexec() as an
> additional barrier to SQL injection attacks
< * Allow inherited tables to inherit index, UNIQUE constraint, and primary
< key, foreign key
< * UNIQUE INDEX on base column not honored on INSERTs/UPDATEs from
< inherited table: INSERT INTO inherit_table (unique_index_col) VALUES
< (dup) should fail
<
< The main difficulty with this item is the problem of creating an index
< that can span more than one table.
<
< * Allow SELECT ... FOR UPDATE on inherited tables
> * Inheritance
>
> o Allow inherited tables to inherit indexes, UNIQUE constraints,
> and primary/foreign keys
> o Honor UNIQUE INDEX on base column in INSERTs/UPDATEs
> on inherited table, e.g. INSERT INTO inherit_table
> (unique_index_col) VALUES (dup) should fail
>
> The main difficulty with this item is the problem of
> creating an index that can span multiple tables.
>
> o Allow SELECT ... FOR UPDATE on inherited tables
>
>
>
an optarg). Add some comments noting that code in three different files has
to be kept in sync. Fix erroneous description of -S switch (it sets work_mem
not silent_mode), and do some light copy-editing elsewhere in postgres-ref.
< * Move some /contrib modules out to their own project sites
<
< Particularly, move GPL-licensed /contrib/userlock and
< /contrib/dbmirror/clean_pending.pl.
<
the XmlExpr code in various lists, use a representation that has some hope
of reverse-listing correctly (though it's still a de-escaping function
shy of correctness), generally try to make it look more like Postgres
coding conventions.
cases. Operator classes now exist within "operator families". While most
families are equivalent to a single class, related classes can be grouped
into one family to represent the fact that they are semantically compatible.
Cross-type operators are now naturally adjunct parts of a family, without
having to wedge them into a particular opclass as we had done originally.
This commit restructures the catalogs and cleans up enough of the fallout so
that everything still works at least as well as before, but most of the work
needed to actually improve the planner's behavior will come later. Also,
there are not yet CREATE/DROP/ALTER OPERATOR FAMILY commands; the only way
to create a new family right now is to allow CREATE OPERATOR CLASS to make
one by default. I owe some more documentation work, too. But that can all
be done in smaller pieces once this infrastructure is in place.
operator strategy numbers, ie, GiST and GIN. This is almost cosmetic
enough to not need a catversion bump, but since the opr_sanity regression
test has to change in sync with the catalog entry, I figured I'd better
do one.
properly.
Remove SGML docs about openjade performance patch, and instead add
comment in style sheet where indenting code is commented out.
Backpatch to 8.2.X.
>
> * Embedded server (not wanted)
>
> While PostgreSQL clients runs fine limited-resource environments, the
> server requires multiple processes and a stable pool of resources to
> run reliabily and efficiently. Stripping down the PostgreSQL server
> to run in the same process address space as the client application
> would add too much complexity and failure cases.
< * Have EXPLAIN ANALYZE highlight poor optimizer estimates
> * Have EXPLAIN ANALYZE issue NOTICE messages when the estimated and
> actual row counts differ by a specified percentage
in normal operation, and we can avoid rewriting pg_control at every log
segment switch if we don't insist that these values be valid. Reducing
the number of pg_control updates is a good idea for both performance and
reliability. It does make pg_resetxlog's life a bit harder, but that seems
a good tradeoff; and anyway the change to pg_resetxlog amounts to automating
something people formerly needed to do by hand, namely look at the existing
pg_xlog files to make sure the new WAL start point was past them.
In passing, change the wording of xlog.c's "database system was interrupted"
messages: describe the pg_control timestamp as "last known up at" rather than
implying it is the exact time of service interruption. With this change the
timestamp will generally be the time of the last checkpoint, which could be
many minutes before the failure; and we've already seen indications that
people tend to misinterpret the old wording.
initdb forced due to change in pg_control layout. Simon Riggs and Tom Lane
identify long-running transactions. Since we already need to record
the transaction-start time (e.g. for now()), we don't need any
additional system calls to report this information.
Catversion bumped, initdb required.
locks that logically should not be released, because when a subtransaction
overwrites XMAX all knowledge of the previous lock state is lost. It seems
unlikely that we will be able to fix this before 8.3...
subtransaction are released if the subtransaction aborts --- in user-level
terminology, this means either rolling back to a savepoint or escaping from
a plpgsql exception block. Per recent suggestion from Simon.
vacuum/analyze timestamp columns at the end, rather than at a random
spot in the middle as in the original patch. This was deemed more usable
as well as less likely to break existing application code. initdb forced
accordingly. In passing, remove former kluge for initializing
pg_stat_file()'s pg_proc entry --- bootstrap mode was fixed recently
so that this can be done without any hacks, but I overlooked this usage.
This patch, against xfunc.sgml, adds a new subsection 33.9.12, Shared
Memory and LWLocks in C-Language Functions, describing how shared memory
and lwlocks may be requested by C add-in functions.
Marc Munro
of caveats in different places, but close together. One called caveats,
one not. That looks like it just led to somebody not reading some
appropriate caveats in the second group of caveats (on -admin).
Simon Riggs
want to direct MSI downloads to main download site, NT4 not supported
anymore, msvc build env in progress, pgsql-hackers-win32 is no more.
Magnus Hagander
the variabelist with a more concise table, add a URL for each project,
remove some orphaned projects, add PL/Py, and various other changes.
Initial patch from Robert Treat, subsequent work by Neil Conway.
that discusses CVS. Remove the recommendation to use cvs 1.10. Remove
discussion of alleged CVSup binaries on postgresql.org, because they
have not existed for several years. Remove discussion of how to
build cvsup from source because the existing text is outdated, and
more accurate information is available from the CVSup homepage.
consistently capitalize the content of the "Description" column but do
not include a terminating period, as is the convention elsewhere in the
docs. Also, remove the "References" column from catalog that do not
have any referencing columns, for the sake of brevity. Make various
other SGML and grammar fixes.
in PITR scenarios. We now WAL-log the replacement of old XIDs with
FrozenTransactionId, so that such replacement is guaranteed to propagate to
PITR slave databases. Also, rather than relying on hint-bit updates to be
preserved, pg_clog is not truncated until all instances of an XID are known to
have been replaced by FrozenTransactionId. Add new GUC variables and
pg_autovacuum columns to allow management of the freezing policy, so that
users can trade off the size of pg_clog against the amount of freezing work
done. Revise the already-existing code that forces autovacuum of tables
approaching the wraparound point to make it more bulletproof; also, revise the
autovacuum logic so that anti-wraparound vacuuming is done per-table rather
than per-database. initdb forced because of changes in pg_class, pg_database,
and pg_autovacuum catalogs. Heikki Linnakangas, Simon Riggs, and Tom Lane.
command strings inserts relative not absolute path of file to process.
This is a side-effect of 2005-07-04 change that makes the server use
relative paths in general. Noted by Bernd Helmle.
reference pages documenting that these commands cannot be used within
a transaction block. Also make some minor improvements to the psql
reference page. Patch from Simon Riggs, minor editorialization by
myself.
< * Improve port/qsort() to handle sorts with 50% unique and 50% duplicate
< value [qsort]
<
< This involves choosing better pivot points for the quicksort.
<
timezone actually has a daylight-savings rule. This avoids breaking
cases that used to work because they went through the DecodePosixTimezone
code path. Per contrib regression failures (mea culpa for not running
those yesterday...). Also document the already-applied change to allow
GMT offsets up to 14 hours.
input routines. Remove the former "DecodePosixTimezone" function in favor of
letting the zic code handle POSIX-style zone specs (see tzparse()). In
particular this means that "PST+3" now means the same as "-03", whereas it
used to mean "-11" --- the zone abbreviation is effectively just a noise word
in this syntax. Make sure that all named and POSIX-style zone names will be
parsed as a single token. Fix long-standing bogosities in printing and input
of fractional-hour timezone offsets (since the tzparse() code will accept
these, we'd better make 'em work). Also correct an error in the original
coding of the zic-zone-name patch: in "timestamp without time zone" input,
zone names are supposed to be allowed but ignored, but the coding was such
that the zone changed the interpretation anyway.
example SET TIME ZONE 'america/new_york' works now. This seems a good
idea on general user-friendliness grounds, and is part of the solution
to the timestamp-input parsing problems I noted recently.
one of the program's core data structures, make use of the existing
ability to selectively exclude TOC items by ID. Slightly more code but
much less likely to create future maintenance problems.
to process all inclusion switches then all exclusion switches, so that the
behavior is independent of switch ordering.
Use of -T does not cause non-table objects to be suppressed. And
the patterns are now interpreted the same way psql's \d commands do it,
rather than as pure regex commands; this allows for example -t schema.tab
to do what it should have been doing all along. Re-enable the --blobs
switch to do something useful, ie, add back blobs into a dump they were
otherwise suppressed from.
portable long options. But we have had portable long options for a long
time now, so this is obsolete. Now people have added options which *only*
work with -X but not as regular long option, so I'm putting a stop to this:
-X is deprecated; it still works, but it has been removed from the
documentation, and please don't add more of them.
max_stack_depth is not set to an unsafe value.
This commit also provides configure-time checking for <sys/resource.h>,
and cleans up some perhaps-unportable code associated with use of that
include file and getrlimit().
> * Allow more complex user/database default GUC settings
> Currently, ALTER USER and ALTER DATABASE support per-user and
> per-database defaults. Consider adding per-user-and-database
> defaults so things like search_path can be defaulted for a
> specific user connecting to a specific database.
>
>
present; intervening positions are filled with nulls. This behavior
is required by SQL99 but was not implementable before 8.2 due to lack
of support for nulls in arrays. I have only made it work for the
one-dimensional case, which is all that SQL99 requires. It seems quite
complex to get it right in higher dimensions, and since we never allowed
extension at all in higher dimensions, I think that must count as a
future feature addition not a bug fix.
the SQL spec, viz IS NULL is true if all the row's fields are null, IS NOT
NULL is true if all the row's fields are not null. The former coding got
this right for a limited number of cases with IS NULL (ie, those where it
could disassemble a ROW constructor at parse time), but was entirely wrong
for IS NOT NULL. Per report from Teodor.
I desisted from changing the behavior for arrays, since on closer inspection
it's not clear that there's any support for that in the SQL spec. This
probably needs more consideration.
< o Add command to archive partially filled write-ahead logs? [pitr]
<
< Currently only full WAL files are archived. This means that the
< most recent transactions aren't available for recovery in case
< of a disk failure.
<
Reorder:
< o %Create dump tool for write-ahead logs for use in determining
< transaction id for point-in-time recovery
> o %Create dump tool for write-ahead logs for use in determining
> transaction id for point-in-time recovery
not in the character set supported by DocBook nor standard HTML. (Sorry
Volkan.) Also replace random character-set references by a pointer to
the actual standard.
Stark, additional fixes and editorialization by Neil Conway. Greg's patch
description:
Some more doc patches for partitioned tables. In particular replace
the caveat that INCLUDING CONSTRAINTS doesn't exist and replace it
with documentation of, well, INCLUDING CONSTRAINTS.
Also, there was an instance of "LIKE WITH DEFAULTS" which is
actually spelled "LIKE INCLUDING DEFAULTS".
< #A hyphen, "-", marks changes that will appear in the upcoming 8.2 release.#
> #A hyphen, "-", marks changes that will appear in the upcoming 8.3 release.#
< * -Make postmater and postgres options distinct so the postmaster -o
< option is no longer needed
< * -Allow pooled connections to list all prepared statements
<
< This would allow an application inheriting a pooled connection to know
< the statements prepared in the current session.
<
< * -Re-enable the GUC full_page_writes in 8.2 when reliability issues have
< been addressed
< o -Add "include file" functionality in postgresql.conf
< o -Allow per-database permissions to be set via GRANT
<
< Allow database connection checks based on GRANT rules in
< addition to the existing access checks in pg_hba.conf.
<
< o -Issue a warning if a change-on-restart-only postgresql.conf value
> o Issue a warning if a change-on-restart-only postgresql.conf value
< o -Automatically force archiving of partially-filled WAL files when
< pg_stop_backup() is called or the server is stopped
< o -Add reporting of the current WAL file and offset, perhaps as
< part of partial log file archiving
< * -Allow server logs to be remotely read and removed using SQL commands
< * -Allow protocol-level BIND parameter values to be logged
< * -Zero umasked bits in conversion from INET cast to CIDR
< * -Prevent INET cast to CIDR from dropping netmask, SELECT '1.1.1.1'::inet::cidr
< * -Allow INET + INT8 to increment the host part of the address or
< throw an error on overflow
< * -Add 'tid != tid ' operator for use in corruption recovery
< o -Allow customization of the known set of TZ names (generalize the
< present australian_timezones hack)
< o -Allow timezone names in SQL strings, '2006-05-24 21:11
< Americas/New_York'::timestamptz
< o -Add support for day-time syntax, INTERVAL '1 2:03:04' DAY TO
< SECOND
< o -Allow NULLs in arrays
< * -Add transaction_timestamp(), statement_timestamp(), clock_timestamp()
< functionality
<
< Current CURRENT_TIMESTAMP returns the start time of the current
< transaction, and gettimeofday() returns the wallclock time. This will
< make time reporting more consistent and will allow reporting of
< the statement start time.
<
< * -Allow to_char() to print localized month names
< * -Add sleep() function, remove from regress.c
< * -Allow user-defined functions retuning a domain value to enforce domain
< constraints
< * -Allow TRUNCATE ... CASCADE/RESTRICT
<
< This is like DELETE CASCADE, but truncates.
<
< * -Add COMMENT ON for all cluster global objects (roles, databases
< and tablespaces)
< * -Make row-wise comparisons work per SQL spec
<
< Right now, '(a, b) < (1, 2)' is processed as 'a < 1 and b < 2', but
< the SQL standard requires it to be processed as a column-by-column
< comparison, so the proper comparison is '(a < 1) OR (a = 1 AND b < 2)'.
<
< * -Enable escape_string_warning and standard_conforming_strings
> * Enable standard_conforming_strings
< o -Add ON COMMIT capability to CREATE TABLE AS ... SELECT
< o -Allow an alias to be provided for the target table in
< UPDATE/DELETE (Neil)
< o -Allow UPDATE tab SET ROW (col, ...) = (val, ...) for updating
< multiple columns
< o -Add ALTER TABLE tab INHERIT / NO INHERIT parent
< o -Have COPY return the number of rows loaded/unloaded?
< o -Allow COPY (SELECT ...) TO 'filename'
<
< o -Allow pooled connections to list all open WITH HOLD cursors
<
< Because WITH HOLD cursors exist outside transactions, this allows
< them to be listed so they can be closed.
<
< o -Allow INSERT INTO tab (col1, ..) VALUES (val1, ..), (val2, ..)
< o -Allow INSERT/UPDATE ... RETURNING new.col or old.col
< o -Allow PL/python to return composite types and result sets
<
< * -Have initdb set the input DateStyle (MDY or DMY) based on locale
< o -Improve psql's handling of multi-line statements
<
< Currently, while \e saves a single statement as one entry, interactive
< statements are saved one line at a time. Ideally all statements
< would 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.
<
< o -Display IN, INOUT, and OUT parameters in \df
< o -Allow pg_dump to use multiple -t and -n switches, exclusion
< ability, and regular expression object matching
< o -Update pg_dump and psql to use the new COPY libpq API (Christopher)
< o -Add a function to support Parse/DescribeStatement capability
< * -Add fillfactor to control reserved free space during index creation
< * -Add system view to show free space map contents
< * -Allow installing to directories containing spaces
<
< This is possible if proper quoting is added to the makefiles for the
< install targets. Because PostgreSQL supports relocatable installs, it
< is already possible to install into a directory that doesn't contain
< spaces and then copy the install to a directory with spaces.
<
< * -%Clean up compiler warnings (especially with gcc version 4)
< * -Remove BeOS and QNX-specific code
< o -Port contrib/xml2
an SQL dump if an error occurs. Along the way, make some improvements and
copy-edits to the surrounding text. Patch from Simon Riggs, additional
fixes by Neil Conway.
contrib functionality. Along the way, remove the USER_LOCKS configuration
symbol, since it no longer makes any sense to try to compile that out.
No user documentation yet ... mmoncure has promised to write some.
Thanks to Abhijit Menon-Sen for creating a first draft to work from.
>
> * Set client encoding based on the client operating system encoding
>
> Currently client_encoding is set in postgresql.conf, which
> defaults to the server encoding.
the table being analyzed. This prevents two ANALYZEs from running
concurrently on the same table and possibly suffering concurrent-update
failures while trying to store their results into pg_statistic. The
downside is that a database-wide ANALYZE executed within a transaction
block will hold ShareUpdateExclusiveLock on many tables simultaneously,
which could lead to concurrency issues or even deadlock against another
such ANALYZE. However, this seems a corner case of less importance
than getting unexpected errors from a foreground ANALYZE when autovacuum
elects to analyze the same table concurrently. Per discussion.
< o Reorder physical storage order to reduce padding?
<
< This involves having the user-specified order of columns
< be different from the physical order. SELECT * would
< need to reorder the physical values to match the
< user-specified ordering.
<
< o Store disk pages with no alignment/padding?
<
< This necessitates adding CPU-required padding when moving
< rows from disk to memory.
<
< One idea is to store the header in network byte order (high bits
< first), and read the high bits to determine the header length.
< http://archives.postgresql.org/pgsql-hackers/2006-09/msg00848.php
> One idea is to create zero-or-one-byte-header versions
> of varlena data types. In involves setting the high-bit and
> 0-127 length in the single-byte header, or clear the high bit
> and store the 7-bit ASCII value in the rest of the byte.
> The small-header versions have no alignment requirements.
> http://archives.postgresql.org/pgsql-hackers/2006-09/msg01372.php
and create a new view pg_timezone_names that provides information about
the zones known in the 'zic' database. Magnus Hagander, with some
additional work by Tom Lane.
alias with the old name for backwards compatibility. Per discussion,
the old name is actively wrong because validity and well-formedness
have different meanings in XML.
a schema is our own temp schema or another backend's temp schema, and use
these in place of some former kluges in information_schema. Per my
proposal of yesterday.
< o Store disk pages with no alignment/padding?
>
> This involves having the user-specified order of columns
> be different from the physical order. SELECT * would
> need to reorder the physical values to match the
> user-specified ordering.
>
> o Store disk pages with no alignment/padding?
>
> This necessitates adding CPU-required padding when moving
> rows from disk to memory.
>
>
> http://archives.postgresql.org/pgsql-hackers/2006-09/msg00848.php
>
< * Research storing disk pages with no alignment/padding
> * Consider ways of storing rows more compactly on disk
>
> o Store disk pages with no alignment/padding?
> o Reorder physical storage order to reduce padding?
> o Support a smaller header for short variable-length fields?
> o Reduce the row header size?
agreed these symbols are less easily confused. I made new pg_operator
entries (with new OIDs) for the old names, so as to provide backward
compatibility while making it pretty easy to remove the old names in
some future release cycle. This commit only touches the core datatypes,
contrib will be fixed separately.
than being equivalent to setting log_min_duration_statement to zero, this
option now forces logging of all query durations, but doesn't force logging
of query text. Also, add duration logging coverage for fastpath function
calls.
proposal. Parameter logging works even for binary-format parameters, and
logging overhead is avoided when disabled.
log_statement = all output for the src/test/examples/testlibpq3.c example
now looks like
LOG: statement: execute <unnamed>: SELECT * FROM test1 WHERE t = $1
DETAIL: parameters: $1 = 'joe''s place'
LOG: statement: execute <unnamed>: SELECT * FROM test1 WHERE i = $1::int4
DETAIL: parameters: $1 = '2'
and log_min_duration_statement = 0 results in
LOG: duration: 2.431 ms parse <unnamed>: SELECT * FROM test1 WHERE t = $1
LOG: duration: 2.335 ms bind <unnamed> to <unnamed>: SELECT * FROM test1 WHERE t = $1
DETAIL: parameters: $1 = 'joe''s place'
LOG: duration: 0.394 ms execute <unnamed>: SELECT * FROM test1 WHERE t = $1
DETAIL: parameters: $1 = 'joe''s place'
LOG: duration: 1.251 ms parse <unnamed>: SELECT * FROM test1 WHERE i = $1::int4
LOG: duration: 0.566 ms bind <unnamed> to <unnamed>: SELECT * FROM test1 WHERE i = $1::int4
DETAIL: parameters: $1 = '2'
LOG: duration: 0.173 ms execute <unnamed>: SELECT * FROM test1 WHERE i = $1::int4
DETAIL: parameters: $1 = '2'
(This example demonstrates the folly of ignoring parse/bind steps for duration
logging purposes, BTW.)
Along the way, create a less ad-hoc mechanism for determining which commands
are logged by log_statement = mod and log_statement = ddl. The former coding
was actually missing quite a few things that look like ddl to me, and it
did not handle EXECUTE or extended query protocol correctly at all.
This commit does not do anything about the question of whether log_duration
should be removed or made less redundant with log_min_duration_statement.