Tom Lane [Sat, 20 Jan 2007 20:45:41 +0000 (20:45 +0000)]
Refactor planner's pathkeys data structure to create a separate, explicit
representation of equivalence classes of variables. This is an extensive
rewrite, but it brings a number of benefits:
* planner no longer fails in the presence of "incomplete" operator families
that don't offer operators for every possible combination of datatypes.
* avoid generating and then discarding redundant equality clauses.
* remove bogus assumption that derived equalities always use operators
named "=".
* mergejoins can work with a variety of sort orders (e.g., descending) now,
instead of tying each mergejoinable operator to exactly one sort order.
* better recognition of redundant sort columns.
* can make use of equalities appearing underneath an outer join.
Neil Conway [Sat, 20 Jan 2007 18:43:35 +0000 (18:43 +0000)]
Refactor the index AM API slightly: move currentItemData and
currentMarkData from IndexScanDesc to the opaque structs for the
AMs that need this information (currently gist and hash).
Patch from Heikki Linnakangas, fixes by Neil Conway.
Peter Eisentraut [Sat, 20 Jan 2007 15:26:28 +0000 (15:26 +0000)]
The libpq library directory was mentioned here in the wrong place, which
might lead to a previously installed libpq being used instead. But we
don't actually have to link with libpq here at all, so remove it.
Bruce Momjian [Fri, 19 Jan 2007 21:36:07 +0000 (21:36 +0000)]
Add items:
> o Allow multiple vacuums so large tables do not starve small
> tables
>
> http://archives.postgresql.org/pgsql-general/2007-01/msg00031.php
>
> o Improve control of auto-vacuum
>
> http://archives.postgresql.org/pgsql-hackers/2006-12/msg00876.php
Peter Eisentraut [Fri, 19 Jan 2007 16:58:46 +0000 (16:58 +0000)]
Add support for converting binary values (i.e. bytea) into xml values,
with new GUC parameter "xmlbinary" that controls the output encoding, as
per SQL/XML standard.
Alvaro Herrera [Fri, 19 Jan 2007 16:42:24 +0000 (16:42 +0000)]
Change the sed rules in the regression test for pg_regress hackery to create
the generated files, to help Visual C++ to run these tests. The tests still
pass in VPATH and normal builds.
Peter Eisentraut [Thu, 18 Jan 2007 13:59:11 +0000 (13:59 +0000)]
Clean up encoding issues in the xml type: In text mode, encoding
declarations are ignored and removed, in binary mode they are honored as
specified by the XML standard.
Neil Conway [Wed, 17 Jan 2007 16:19:08 +0000 (16:19 +0000)]
Tweak the width_bucket() regression tests to avoid an unnecessary
dependency on the platform's floating point implementation. Per
report from Stefan Kaltenbrunner.
Tom Lane [Wed, 17 Jan 2007 00:17:21 +0000 (00:17 +0000)]
Revise bgwriter fsync-request mechanism to improve robustness when a table
is deleted. A backend about to unlink a file now sends a "revoke fsync"
request to the bgwriter to make it clean out pending fsync requests. There
is still a race condition where the bgwriter may try to fsync after the unlink
has happened, but we can resolve that by rechecking the fsync request queue
to see if a revoke request arrived meanwhile. This eliminates the former
kluge of "just assuming" that an ENOENT failure is okay, and lets us handle
the fact that on Windows it might be EACCES too without introducing any
questionable assumptions. After an idea of mine improved by Magnus.
The HEAD patch doesn't apply cleanly to 8.2, but I'll see about a back-port
later. In the meantime this could do with some testing on Windows; I've been
able to force it through the code path via ENOENT, but that doesn't prove that
it actually fixes the Windows problem ...
Neil Conway [Tue, 16 Jan 2007 21:43:19 +0000 (21:43 +0000)]
vcbuild updates from Magnus:
* After Markos patch, now builds pgcrypto without zlib again
* Updates README with xml info
* xml requires xslt and iconv
* disable unnecessary warning about __cdecl()
* Add a buildenv.bat called from all other bat files to set up things
like PATH for flex/bison. (Can't just set it before calling, doesn't
always work when building from the GUI)
AFAICS SQL:2003 does not define a NaN value, so it doesn't address how
width_bucket() should behave here. The patch changes width_bucket() so
that ereport(ERROR) is raised if NaN is specified for the operand or the
lower or upper bounds to width_bucket(). For float8, NaN is disallowed
for any of the floating-point inputs, and +/- infinity is disallowed
for the histogram bounds (but allowed for the operand).
Update docs and regression tests, bump the catversion.
Tom Lane [Tue, 16 Jan 2007 18:32:26 +0000 (18:32 +0000)]
Fix incorrect permissions check in information_schema.key_column_usage view:
it was checking a pg_constraint OID instead of pg_class OID, resulting in
"relation with OID nnnnn does not exist" failures for anyone who wasn't
owner of the table being examined. Per bug #2848 from Laurence Rowe.
Note: for existing 8.2 installations a simple version update won't fix this;
the easiest fix is to CREATE OR REPLACE this view with the corrected
definition.
Alvaro Herrera [Tue, 16 Jan 2007 13:28:57 +0000 (13:28 +0000)]
Arrange for autovacuum to be killed when another operation wants to be alone
accessing it, like DROP DATABASE. This allows the regression tests to pass
with autovacuum enabled, which open the gates for finally enabling autovacuum
by default.
Neil Conway [Sun, 14 Jan 2007 22:37:59 +0000 (22:37 +0000)]
Add a note to the docs describing NaN's equality and ordering behavior.
Per recent -hackers thread, this is noteworthy because Postgres behaves
differently from most implementations of NaN, including IEEE754.
Bruce Momjian [Sat, 13 Jan 2007 15:13:44 +0000 (15:13 +0000)]
Remove completed items, and the last is unwanted:
< o Fix memory leak from exceptions
<
< http://archives.postgresql.org/pgsql-performance/2006-06/msg00305.php
<
< * Allow constraint_exclusion to work for UNIONs like it does for
< inheritance, allow it to work for UPDATE and DELETE statements, and allow
< it to be used for all statements with little performance impact
<
< * Add estimated_count(*) to return an estimate of COUNT(*)
<
< This would use the planner ANALYZE statistics to return an estimated
< count.
< http://archives.postgresql.org/pgsql-hackers/2005-11/msg00943.php
Tom Lane [Fri, 12 Jan 2007 23:34:55 +0000 (23:34 +0000)]
Fix handling of CC (century) format spec in to_date/to_char. According to
standard convention the 21st century runs from 2001-2100, not 2000-2099,
so make it work like that. Per bug #2885 from Akio Iwaasa.
Backpatch to 8.2, but no further, since this is really a definitional
change; users of older branches are probably more interested in stability.
Tom Lane [Fri, 12 Jan 2007 17:04:54 +0000 (17:04 +0000)]
Add some notes about the basic mathematical laws that the system presumes
hold true for operators in a btree operator family. This is mostly to
clarify my own thinking about what the planner can assume for optimization
purposes. (blowing dust off an old abstract-algebra textbook...)
Peter Eisentraut [Fri, 12 Jan 2007 16:29:24 +0000 (16:29 +0000)]
Allow for arbitrary data types as content in XMLELEMENT. The original
coercion to type xml was a mistake. Escape values so they are valid
XML character data.
Tom Lane [Thu, 11 Jan 2007 23:06:03 +0000 (23:06 +0000)]
Fix a performance problem in databases with large numbers of tables
(or other types of pg_class entry): the function pgstat_vacuum_tabstat,
invoked during VACUUM startup, had runtime proportional to the number of
stats table entries times the number of pg_class rows; in other words
O(N^2) if the stats collector's information is reasonably complete.
Replace list searching with a hash table to bring it back to O(N)
behavior. Per report from kim at myemma.com.
Back-patch as far as 8.1; 8.0 and before use different coding here.
Michael Meskes [Thu, 11 Jan 2007 15:47:34 +0000 (15:47 +0000)]
Applied Joachim's patch for a --regression option.
Made this option mark the .c files, so the environment variable is no longer needed.
Created a special MinGW file with the special error message.
Do not print port into log file when running regression tests.
Bruce Momjian [Thu, 11 Jan 2007 04:27:29 +0000 (04:27 +0000)]
Add:
> o Extend timezone code to allow 64-bit values so we can
> represent years beyond 2038
>
> http://archives.postgresql.org/pgsql-hackers/2006-09/msg01363.php
>
Peter Eisentraut [Wed, 10 Jan 2007 20:33:54 +0000 (20:33 +0000)]
Use libxml's xmlwriter API for producing XML elements, instead of doing
our own printing dance. This does a better job of quoting and escaping the
values.
Tom Lane [Wed, 10 Jan 2007 18:06:05 +0000 (18:06 +0000)]
Change the planner-to-executor API so that the planner tells the executor
which comparison operators to use for plan nodes involving tuple comparison
(Agg, Group, Unique, SetOp). Formerly the executor looked up the default
equality operator for the datatype, which was really pretty shaky, since it's
possible that the data being fed to the node is sorted according to some
nondefault operator class that could have an incompatible idea of equality.
The planner knows what it has sorted by and therefore can provide the right
equality operator to use. Also, this change moves a couple of catalog lookups
out of the executor and into the planner, which should help startup time for
pre-planned queries by some small amount. Modify the planner to remove some
other cavalier assumptions about always being able to use the default
operators. Also add "nulls first/last" info to the Plan node for a mergejoin
--- neither the executor nor the planner can cope yet, but at least the API is
in place.
Neil Conway [Wed, 10 Jan 2007 04:02:05 +0000 (04:02 +0000)]
Attached patch fixes two problems:
1) gendef works from inside visual studio - use a tempfile instead of
redirection, because for some reason you can't redirect dumpbin from
inside (patch from Joachim Wieland)
2) gendef must process only *.obj, or you get weird errors in some build
scenarios when it tries to process a logfile
Neil Conway [Wed, 10 Jan 2007 03:54:35 +0000 (03:54 +0000)]
This patch enables verbose output when building all projects. This is
the same output level that was used when building a single project
before, and really needed to get reasonable information about what
happens (non-verbose just says "starting build of foo" and "done
building foo", more or less).
Tom Lane [Tue, 9 Jan 2007 16:59:20 +0000 (16:59 +0000)]
Marginal tweaks in the documentation for ORDER BY; in particular point
out the common error that ORDER BY x, y DESC does not mean the same as
ORDER BY x DESC, y DESC.
Tom Lane [Tue, 9 Jan 2007 07:30:49 +0000 (07:30 +0000)]
Add a citation to Seltzer and Yigit's Usenix '91 paper about hash table
management. The paper clearly describes many of the ideas embodied in
our current hashing code, but as far as I could find out there is not
a direct code heritage. (Mike Olsen recalls discussion of this paper
at Postgres meetings but believes it "informed the Postgres implementation
probably just at the design level". Margo herself says she wasn't
involved with Postgres' hash code.) Credit where credit is due 'n all
that, even if fifteen years after the fact.
Bruce Momjian [Tue, 9 Jan 2007 03:43:32 +0000 (03:43 +0000)]
Done:
< * 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.
<
Tom Lane [Tue, 9 Jan 2007 02:14:16 +0000 (02:14 +0000)]
Support ORDER BY ... NULLS FIRST/LAST, and add ASC/DESC/NULLS FIRST/NULLS LAST
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.
Tom Lane [Mon, 8 Jan 2007 16:47:30 +0000 (16:47 +0000)]
Tweak joinlist creation to avoid generating useless one-element subproblems
when collapsing of JOIN trees is stopped by join_collapse_limit. For instance
a list of 11 LEFT JOINs with limit 8 now produces something like
((1 2 3 4 5 6 7 8) 9 10 11 12)
instead of
(((1 2 3 4 5 6 7 8) (9)) 10 11 12)
The latter structure is really only required for a FULL JOIN.
Noted while studying an example from Shane Ambler.
Tom Lane [Mon, 8 Jan 2007 16:09:22 +0000 (16:09 +0000)]
Remove cost_hashjoin's very ancient hack to discourage (once, entirely forbid)
hash joins with the estimated-larger relation on the inside. There are
several cases where doing that makes perfect sense, and in cases where it
doesn't, the regular cost computation really ought to be able to figure that
out. Make some marginal tweaks in said computation to try to get results
approximating reality a bit better. Per an example from Shane Ambler.
Also, fix an oversight in the original patch to add seq_page_cost: the costs
of spilling a hash join to disk should be scaled by seq_page_cost.
Allow XML fragment to contain a XML declaration. For that, we need a small
hand-crafted parser for the XML declaration, because libxml doesn't seem
to allow this.
Bruce Momjian [Sat, 6 Jan 2007 22:24:16 +0000 (22:24 +0000)]
Updates for MONEY data type:
< * 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
Bruce Momjian [Sat, 6 Jan 2007 22:18:24 +0000 (22:18 +0000)]
Add:
>
> * 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.