Tom Lane [Tue, 13 Nov 2007 21:02:29 +0000 (21:02 +0000)]
Replace the now-incompatible-with-core contrib/tsearch2 module with a
compatibility package. This supports importing dumps from past versions
using tsearch2, and provides the old names and API for most functions
that were changed. (rewrite(ARRAY[...]) is a glaring omission, though.)
Tom Lane [Tue, 13 Nov 2007 06:29:04 +0000 (06:29 +0000)]
Fix a few contrib regression test scripts that hadn't gotten the word
about best practice for including the module creation scripts: to wit
that you should suppress NOTICE messages. This avoids creating
regression failures by adding or removing comment lines in the module
scripts.
Tom Lane [Tue, 13 Nov 2007 01:55:49 +0000 (01:55 +0000)]
Fix insufficient search-path paranoia in SQL function definitions.
Remove setting of search_path in install/uninstall scripts, since unlike
other contrib modules this one does not want to let you change the
installation schema.
Tom Lane [Tue, 13 Nov 2007 00:13:19 +0000 (00:13 +0000)]
I find that an out-of-the-box installation of OSSP uuid 1.6.0 installs
itself as libuuid, not libossp-uuid which was the only case expected by
our build support. Install a configure test to determine which name
to use (and to check that the library is present at all).
Tom Lane [Sun, 11 Nov 2007 19:22:49 +0000 (19:22 +0000)]
Ensure that typmod decoration on a datatype name is validated in all cases,
even in code paths where we don't pay any subsequent attention to the typmod
value. This seems needed in view of the fact that 8.3's generalized typmod
support will accept a lot of bogus syntax, such as "timestamp(foo)" or
"record(int, 42)" --- if we allow such things to pass without comment,
users will get confused. Per a recent example from Greg Stark.
To implement this in a way that's not very vulnerable to future
bugs-of-omission, refactor the API of parse_type.c's TypeName lookup routines
so that typmod validation is folded into the base lookup operation. Callers
can still choose not to receive the encoded typmod, but we'll check the
decoration anyway if it's present.
Tom Lane [Sat, 10 Nov 2007 20:14:36 +0000 (20:14 +0000)]
Add an example of a SQL function with output parameters returning
multiple rows. I had thought this case was covered, but there was
no example in the obvious section to look in.
Tom Lane [Sat, 10 Nov 2007 19:29:54 +0000 (19:29 +0000)]
Add missing closing / in xsd:restriction, and remove some unnecessary
spaces for consistency. Per bug #3734 from Ben Leslie; fix by
Euler Taveira de Oliveira.
Tom Lane [Sat, 10 Nov 2007 18:51:20 +0000 (18:51 +0000)]
xmlGetUTF8Char()'s second argument is both input and output. Fix
uninitialized value, and avoid invoking the function nine separate
times in the pg_xmlIsNameChar macro. Should resolve buildfarm failures.
Per report from Ben Leslie.
Joe Conway [Sat, 10 Nov 2007 05:00:41 +0000 (05:00 +0000)]
Have crosstab variants treat NULL rowid as a category in its own right,
per suggestion from Tom Lane. This fixes crash-bug reported by Stefan
Schwarzer.
Tom Lane [Fri, 9 Nov 2007 23:58:32 +0000 (23:58 +0000)]
Recognize RETURN QUERY via a textual test, so that QUERY doesn't need to be
a plpgsql keyword. This avoids springing a new reserved word on plpgsql
programmers.
For consistency, handle RETURN NEXT the same way.
Tom Lane [Fri, 9 Nov 2007 22:37:35 +0000 (22:37 +0000)]
Clean up ts_locale.h/.c. Fix broken and not-consistent-across-platforms
behavior of wchar2char/char2wchar; this should resolve bug #3730. Avoid
excess computations of pg_mblen in t_isalpha and friends. Const-ify
APIs where possible.
Tom Lane [Fri, 9 Nov 2007 20:10:02 +0000 (20:10 +0000)]
Second pass at improving LIKE/regex estimation in non-C locales. It turns
out that it's actually quite likely that a string that is an extension of
the given prefix will sort as larger than the "greater" string our previous
code created. To provide some defense against that, do the comparisons
against a modified string instead of just the bare prefix. We tack on
"Z", "z", "y", or "9", whichever is seen as largest in the current locale.
Testing suggests that this is sufficient at least for cases involving
ASCII data.
Magnus Hagander [Fri, 9 Nov 2007 17:31:07 +0000 (17:31 +0000)]
Add parameter krb_realm used by GSSAPI, SSPI and Kerberos
to validate the realm of the connecting user. By default
it's empty meaning no verification, which is the way
Kerberos authentication has traditionally worked in
PostgreSQL.
Tom Lane [Thu, 8 Nov 2007 23:22:54 +0000 (23:22 +0000)]
If an index depends on no columns of its table, give it a dependency on the
whole table instead, to ensure that it goes away when the table is dropped.
Per bug #3723 from Sam Mason.
Backpatch as far as 7.4; AFAICT 7.3 does not have the issue, because it doesn't
have general-purpose expression indexes and so there must be at least one
column referenced by an index.
Tom Lane [Thu, 8 Nov 2007 21:49:48 +0000 (21:49 +0000)]
Fix EquivalenceClass code to handle volatile sort expressions in a more
predictable manner; in particular that if you say ORDER BY output-column-ref,
it will in fact sort by that specific column even if there are multiple
syntactic matches. An example is
SELECT random() AS a, random() AS b FROM ... ORDER BY b, a;
While the use-case for this might be a bit debatable, it worked as expected
in earlier releases, so we should preserve the behavior for 8.3. Per my
recent proposal.
While at it, fix convert_subquery_pathkeys() to handle RelabelType stripping
in both directions; it needs this for the same reasons make_sort_from_pathkeys
does.
Tom Lane [Thu, 8 Nov 2007 19:25:37 +0000 (19:25 +0000)]
Last week's patch for make_sort_from_pathkeys wasn't good enough: it has
to be able to discard top-level RelabelType nodes on *both* sides of the
equivalence-class-to-target-list comparison, since make_pathkey_from_sortinfo
might either add or remove a RelabelType. Also fix the latter to do the
removal case cleanly. Per example from Peter.
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.