Tom Lane [Wed, 7 Nov 2007 22:37:24 +0000 (22:37 +0000)]
Improve the performance of LIKE/regex estimation in non-C locales, by making
make_greater_string() try harder to generate a string that's actually greater
than its input string. Before we just assumed that making a string that was
memcmp-greater was enough, but it is easy to generate examples where this is
not so when the locale is not C. Instead, loop until the relevant comparison
function agrees that the generated string is greater than the input.
Unfortunately this is probably not enough to guarantee that the generated
string is greater than all extensions of the input, so we cannot relax the
restriction to C locale for the LIKE/regex index optimization. But it should
at least improve the odds of getting a useful selectivity estimate in
prefix_selectivity(). Per example from Guillaume Smet.
Backpatch to 8.1, mainly because that's what the complainant is using...
Tom Lane [Wed, 7 Nov 2007 21:00:37 +0000 (21:00 +0000)]
Fix patternsel() and callers to do the right thing for NOT LIKE and the other
negated-match operators. patternsel had been using the supplied operator as
though it were a positive-match operator, and thus obtaining a wrong result,
which was even more wrong after the caller subtracted it from 1. Seems
cleanest to give patternsel an explicit "negate" argument so that it knows
what's going on. Also install the same factorization scheme for pattern
join selectivity estimators; even though they are just stubs at the
moment, this may keep someone from making the same type of mistake when
they get filled out. Per report from Greg Mullane.
Backpatch to 8.2 --- previous releases do not show the problem because
patternsel() doesn't actually use the operator directly.
Tom Lane [Tue, 6 Nov 2007 03:06:28 +0000 (03:06 +0000)]
Some code review for xml.c:
Add some more xml_init() calls that might not be necessary, but seem like a
good idea to avoid possible problems like we saw in xmlelement().
Fix unsafe assumption that you can keep using the tupledesc of a relcache
entry you don't have open.
Add missing error checks for SearchSysCache failure.
Get rid of handwritten array traversal in xpath() and O(N^2), broken-for-nulls
array access code in map_sql_value_to_xml_value(), in favor of using
deconstruct_array.
Manually adjust a lot of line breaks in places where the code is otherwise
gonna look pretty awful after pg_indent hacks it up (original author seems to
have liked to lay out code for a 200-column window).
Tom Lane [Mon, 5 Nov 2007 22:23:07 +0000 (22:23 +0000)]
Fix xmlelement() to initialize libxml correctly before using it, and to avoid
assuming that evaluation of its input expressions won't change the state of
libxml. This requires refactoring xml_init() to not call xmlInitParser(),
since now not all of its callers want that. I also tweaked things to avoid
repeated execution of one-time-only tests inside xml_init(), though this is
mostly for clarity rather than in hopes of saving any noticeable amount of
runtime. Per report from Sheikh Amjad and subsequent discussion.
In passing, fix a couple of inadequately schema-qualified queries.
Tom Lane [Mon, 5 Nov 2007 19:00:25 +0000 (19:00 +0000)]
Improve conversion of legacy CREATE CONSTRAINT TRIGGER representation of
foreign keys, one more time. Insist on matching up all three triggers before
we create a constraint; this will avoid creation of duplicate constraints
in scenarios where a broken FK constraint was repaired by re-adding the
constraint without removing the old partial trigger set. Basically, this will
work nicely in all cases where the FK was actually functioning correctly in
the database that was dumped. It will fail to restore an FK in just one case
where we theoretically could restore it: where we find the referenced table's
triggers and not the referencing table's trigger. However, in such a scenario
it's likely that the user doesn't even realize he still has an FK at all
(since the more-likely-to-fail cases aren't enforced), and we'd probably not
accomplish much except to cause the reload to fail because the data doesn't
meet the FK constraint. Also make the NOTICE logging still more verbose, by
adding detail about which of the triggers were found. This seems about all
we can do without solving the problem of getting the user's attention at
session end.
Tom Lane [Mon, 5 Nov 2007 17:40:21 +0000 (17:40 +0000)]
Minor editorial improvements to txid functions' documentation: put back
some text that got dropped, improve markup, improve descriptions of
snapshot components.
Neil Conway [Mon, 5 Nov 2007 00:00:34 +0000 (00:00 +0000)]
Use LOG instead of DEBUG2 for logging invalid cancel requests. (That is,
cancel requests with an incorrect key, or with a non-existent PID). Per
recent discussion on -hackers.
Tom Lane [Sun, 4 Nov 2007 21:25:55 +0000 (21:25 +0000)]
Minor improvements to code for converting legacy CREATE CONSTRAINT TRIGGER
commands into proper foreign-key constraints. Believe the constraint name
given in the trigger arguments in preference to the trigger name --- to judge
from Olivier Prenant's example, pg_dump must at some time have used the
autogenerated trigger name there, though AFAICT no current release branch tip
does. Improve the emitted NOTICEs to provide more detail (PK table's name and
column names). Handle the case where pg_dump forgot to provide the FROM table
(a bug that never did get fixed in 7.0.x apparently). This commit doesn't
do anything about the question of what to do with incomplete trigger groups.
Bruce Momjian [Sun, 4 Nov 2007 19:23:24 +0000 (19:23 +0000)]
Mention "replication" in the title of the high availability and load
balancing chapter because some people were looking for 'replication' and
didn't realize that chapter addressed it.
Tom Lane [Sun, 4 Nov 2007 17:55:15 +0000 (17:55 +0000)]
Prevent continuing disk-space bloat when profiling (with PROFILE_PID_DIR
enabled) and autovacuum is on. Since there will be a steady stream of autovac
worker processes exiting and dropping gmon.out files, allowing them to make
separate subdirectories results in serious bloat; and it seems unlikely that
anyone will care about those profiles anyway. Limit the damage by forcing all
autovac workers to dump in one subdirectory, PGDATA/gprof/avworker/.
Per report from J\9arg Beyer and subsequent discussion.
Tom Lane [Sun, 4 Nov 2007 01:16:19 +0000 (01:16 +0000)]
Teach CREATE CONSTRAINT TRIGGER to convert old-style foreign key
trigger definitions into regular foreign key constraints. This seems
necessary given that some people evidently never did get around to
running adddepend on their schemas, and without some sort of hack the
old definitions will no longer work. Per report from Olivier Prenant
and subsequent investigation.
Tom Lane [Fri, 2 Nov 2007 18:54:15 +0000 (18:54 +0000)]
Ensure that EquivalenceClasses generated from ORDER BY keys contain proper
RelabelType nodes when the sort key is binary-compatible with the sort
operator rather than having exactly its input type. We did this correctly
for index columns but not sort keys, leading to failure to notice that
a varchar index matches an ORDER BY request. This requires a bit more work
in make_sort_from_pathkeys, but not anyplace else that I can find.
Per bug report and subsequent discussion.
Tom Lane [Tue, 30 Oct 2007 19:43:30 +0000 (19:43 +0000)]
Update some obsolete stuff in the GRANT and REVOKE reference pages:
simplify the syntax examples by unifying user and group cases, and fix
no-longer-correct example of psql \z output. Per Erwin Brandstetter.
Tom Lane [Tue, 30 Oct 2007 19:06:56 +0000 (19:06 +0000)]
Add a note pointing out that some other databases make GREATEST and
LEAST handle NULL arguments differently than we do. Per a discussion
on 30-Jun that somehow didn't get done.
Marc G. Fournier [Tue, 30 Oct 2007 02:34:48 +0000 (02:34 +0000)]
simple script to pull together a very small (<500k) tar file that builds
*just* libpq ... its not perfect, as it pulls in more files then is
necessarily required to build, but as it is, it requires one simple patch
to configure.in in order to work ...
Tested on FreeBSD ... patch for configure.in hasn't been applied, but
putting the script in place so that it doesn't get lost ...
Tom Lane [Mon, 29 Oct 2007 19:40:40 +0000 (19:40 +0000)]
Remove the hack in the grammar that "optimized away" DEFAULT NULL clauses.
Instead put in a test to drop a NULL default at the last moment before
storing the catalog entry. This changes the behavior in a couple of ways:
* Specifying DEFAULT NULL when creating an inheritance child table will
successfully suppress inheritance of any default expression from the
parent's column, where formerly it failed to do so.
* Specifying DEFAULT NULL for a column of a domain type will correctly
override any default belonging to the domain; likewise for a sub-domain.
The latter change happens because by the time the clause is checked,
it won't be a simple null Const but a CoerceToDomain expression.
Personally I think this should be back-patched, but there doesn't seem to
be consensus for that on pgsql-hackers, so refraining.
Teodor Sigaev [Mon, 29 Oct 2007 19:26:57 +0000 (19:26 +0000)]
- Add check of already changed page while replay WAL. This touches only
ginRedoInsert(), because other ginRedo* functions rewrite whole page or
make changes which could be applied several times without consistent's loss
- Remove check of identifying of corresponding split record:
it's possible that replaying of WAL starts after actual page split, but before
removing of that split from incomplete splits list. In this case, that check
cause FATAL error.
Per stress test which reproduces bug reported by Craig McElroy
<craig.mcelroy@contegix.com>
Teodor Sigaev [Mon, 29 Oct 2007 13:49:21 +0000 (13:49 +0000)]
Fix coredump during replay WAL after crash. Change entrySplitPage() to prevent
usage of any information from system catalog, because it could be called during
replay of WAL.
Per bug report from Craig McElroy <craig.mcelroy@contegix.com>. Patch doesn't
change on-disk storage.
Magnus Hagander [Mon, 29 Oct 2007 12:35:41 +0000 (12:35 +0000)]
Add compat file for dynamically loading the functions that MinGW is missing
the imports for. Add RegisterWaitForSingleObject() to the list of such
functions, which should take care of the current buildfarm breakage.
Tom Lane [Mon, 29 Oct 2007 01:55:11 +0000 (01:55 +0000)]
Remove claim that ts_headline knows how to generate multiple ellipsis-separated
excerpts of a document. That's clearly desirable, but the functionality
is not there yet.
Tom Lane [Sun, 28 Oct 2007 22:33:25 +0000 (22:33 +0000)]
Ooops, fat-fingered last commit message. Should have
mentioned updating FAQ_IRIX for information about buggy MIPSPro
compiler version, now confirmed by Herve Boulouis.
Tom Lane [Sun, 28 Oct 2007 21:55:52 +0000 (21:55 +0000)]
Make pg_dump and friends consistently report both the filename and the
errno string when complaining of fopen failures. Per gripe from Bob
Pawley, it's not always instantly obvious to the user which name we
tried to open.
Tom Lane [Sun, 28 Oct 2007 19:08:02 +0000 (19:08 +0000)]
Fix a couple of issues with pg_dump's handling of inheritance child tables
that have default expressions different from their parent. First, if the
parent table's default expression has to be split out as a separate
ALTER TABLE command, we need a dependency constraint to ensure that the
child's command is given second. This is because the ALTER TABLE on the
parent will propagate to the child. (We can't prevent that by using ONLY on
the parent's command, since it's possible that other children exist that
should receive the inherited default.) Second, if the child has a NULL
default where the parent does not, we have to explicitly say DEFAULT NULL on
the child in order for this state to be preserved after reload. (The latter
actually doesn't work right because of a backend bug, but that is a separate
issue.)
Backpatch as far as 8.0. 7.x pg_dump has enough issues with altered tables
(due to lack of dependency analysis) that trying to fix this one doesn't seem
very productive.
Tom Lane [Sat, 27 Oct 2007 19:03:45 +0000 (19:03 +0000)]
Change text search parsing rules for hyphenated words so that digit strings
containing decimal points aren't considered part of a hyphenated word.
Sync the hyphenated-word lookahead states with the subsequent part-by-part
reparsing states so that we don't get different answers about how much text
is part of the hyphenated word. Per my gripe of a few days ago.
Tom Lane [Sat, 27 Oct 2007 17:53:15 +0000 (17:53 +0000)]
Add some rudimentary tracing code to the default text search parser, to help
in debugging its state-machine rules. Const-ify all the constant tables.
Minor other code cleanup, including using "token" rather than "lexeme" to
describe the output strings.
Tom Lane [Sat, 27 Oct 2007 16:01:09 +0000 (16:01 +0000)]
Rename default text search parser's "uri" token type to "url_path",
per recommendation from Alvaro. This doesn't force initdb since the
numeric token type in the catalogs doesn't change; but note that
the expected regression test output changed.
Tom Lane [Sat, 27 Oct 2007 05:45:43 +0000 (05:45 +0000)]
Avoid considering both sort directions as equally useful for merging.
This doubles the planning workload for mergejoins while not actually
accomplishing much. The only useful case is where one of the directions
matches the query's ORDER BY request; therefore, put a thumb on the scales
in that direction, and otherwise arbitrarily consider only the ASC direction.
(This is a lot easier now than it would've been before 8.3, since we have
more semantic knowledge embedded in PathKeys now.)
Magnus Hagander [Fri, 26 Oct 2007 21:50:10 +0000 (21:50 +0000)]
Change win32 child-death tracking code to use a threadpool to wait for
childprocess deaths instead of using one thread per child. This drastastically
reduces the address space usage and should allow for more backends running.
Also change the win32_waitpid functionality to use an IO Completion Port for
queueing child death notices instead of using a fixed-size array.
Alvaro Herrera [Fri, 26 Oct 2007 20:45:10 +0000 (20:45 +0000)]
Allow an autovacuum worker to be interrupted automatically when it is found
to be locking another process (except when it's working to prevent Xid
wraparound problems).
Tom Lane [Fri, 26 Oct 2007 18:10:50 +0000 (18:10 +0000)]
Change have_join_order_restriction() so that we do not force a clauseless join
if either of the input relations can legally be joined to any other rels using
join clauses. This avoids uselessly (and expensively) considering a lot of
really stupid join paths when there is a join restriction with a large
footprint, that is, lots of relations inside its LHS or RHS. My patch of
15-Feb-2007 had been causing the code to consider joining *every* combination
of rels inside such a group, which is exponentially bad :-(. With this
behavior, clauseless bushy joins will be done if necessary, but they'll be
put off as long as possible. Per report from Jakub Ouhrabka.
Backpatch to 8.2. We might someday want to backpatch to 8.1 as well, but 8.1
does not have the problem for OUTER JOIN nests, only for IN-clauses, so it's
not clear anyone's very likely to hit it in practice; and the current patch
doesn't apply cleanly to 8.1.
Tom Lane [Thu, 25 Oct 2007 20:22:53 +0000 (20:22 +0000)]
Make initdb's selection of default text search configuration depend
only on the 'language' part of the locale name, ignoring the country code.
We may need to be smarter later when there are more built-in configurations,
but for now this is good enough and avoids having to bloat the table.
Alvaro Herrera [Thu, 25 Oct 2007 19:13:37 +0000 (19:13 +0000)]
Fix memory management for new variables -- they must actually survive
transaction end, in case we decide to do a vacuum analyze (which is done in two
xacts).
Tom Lane [Thu, 25 Oct 2007 18:54:03 +0000 (18:54 +0000)]
Fix ALTER SEQUENCE so that it does not affect the value of currval() for
the sequence. Also, make setval() with is_called = false not affect the
currval state, either. Per report from Kris Jurka that an implicit
ALTER SEQUENCE OWNED BY unexpectedly caused currval() to become valid.
Since this isn't 100% backwards compatible, it will go into HEAD only;
I'll put a more limited patch into 8.2.
Tom Lane [Thu, 25 Oct 2007 13:48:57 +0000 (13:48 +0000)]
Tweak new error messages to match the actual syntax of DECLARE CURSOR.
(Last night I copied-and-pasted from the WITH HOLD case, but that's
wrong because of the bizarrely irregular syntax specified by the standard.)
Tom Lane [Wed, 24 Oct 2007 23:27:08 +0000 (23:27 +0000)]
Disallow scrolling of FOR UPDATE/FOR SHARE cursors, so as to avoid problems
in corner cases such as re-fetching a just-deleted row. We may be able to
relax this someday, but let's find out how many people really care before
we invest a lot of work in it. Per report from Heikki and subsequent
discussion.
While in the neighborhood, make the combination of INSENSITIVE and FOR UPDATE
throw an error, since they are semantically incompatible. (Up to now we've
accepted but just ignored the INSENSITIVE option of DECLARE CURSOR.)
Alvaro Herrera [Wed, 24 Oct 2007 20:55:36 +0000 (20:55 +0000)]
Rearrange vacuum-related bits in PGPROC as a bitmask, to better support
having several of them. Add two more flags: whether the process is
executing an ANALYZE, and whether a vacuum is for Xid wraparound (which
is obviously only set by autovacuum).
Sneakily move the worker's recently-acquired PostAuthDelay to a more useful
place.