Tom Lane [Thu, 10 Nov 2005 00:31:34 +0000 (00:31 +0000)]
When in transaction-aborted state, reject Bind message for portals containing
anything but transaction-exiting commands (ROLLBACK etc). We already rejected
Parse and Execute in such cases, so there seems little point in allowing Bind.
This prevents at least an Assert failure, and probably worse things, since
there's a lot of infrastructure that doesn't work when not in a live
transaction. We can also simplify the Bind logic a bit by rejecting messages
with a nonzero number of parameters, instead of the former kluge to silently
substitute NULL for each parameter. Per bug #2033 from Joel Stevenson.
Teodor Sigaev [Tue, 8 Nov 2005 17:08:46 +0000 (17:08 +0000)]
New features for tsearch2:
1 Comparison operation for tsquery
2 Btree index on tsquery
3 numnode(tsquery) - returns 'length' of tsquery
4 tsquery @ tsquery, tsquery ~ tsquery - contains, contained for tsquery.
Note: They don't gurantee exact result, only MAY BE, so it
useful only for speed up rewrite functions
5 GiST index support for @,~
6 rewrite():
select rewrite(orig, what, to);
select rewrite(ARRAY[orig, what, to]) from tsquery_table;
select rewrite(orig, 'select what, to from tsquery_table;');
7 significantly improve cover algorithm
Tom Lane [Sun, 6 Nov 2005 19:29:01 +0000 (19:29 +0000)]
Add defenses to btree and hash index AMs to do simple sanity checks
on every index page they read; in particular to catch the case of an
all-zero page, which PageHeaderIsValid allows to pass. It turns out
hash already had this idea, but it was just Assert()ing things rather
than doing a straight error check, and the Asserts were partially
redundant with PageHeaderIsValid anyway. Per recent failure example
from Jim Nasby. (gist still needs the same treatment.)
Tom Lane [Sat, 5 Nov 2005 21:19:47 +0000 (21:19 +0000)]
Clean up representation of SLRU page state. This is the cleaner fix
for the SLRU race condition that I posted a few days ago, but we decided
not to use in 8.1 and older branches.
Tom Lane [Sat, 5 Nov 2005 03:04:53 +0000 (03:04 +0000)]
Repair an error introduced by log_line_prefix patch: it is not acceptable
to assume that the string pointer passed to set_ps_display is good forever.
There's no need to anyway since ps_status.c itself saves the string, and
we already had an API (get_ps_display) to return it.
I believe this explains Jim Nasby's report of intermittent crashes in
elog.c when %i format code is in use in log_line_prefix.
While at it, repair a previously unnoticed problem: on some platforms such as
Darwin, the string returned by get_ps_display was blank-padded to the maximum
length, meaning that lock.c's attempt to append " waiting" to it never worked.
Tom Lane [Fri, 4 Nov 2005 18:35:40 +0000 (18:35 +0000)]
Ensure that we only create one ConsoleCtrlHandler per psql process,
so as to avoid performance issues and possible ultimate crash on long
psql scripts. Per Merlin Moncure.
Bruce Momjian [Fri, 4 Nov 2005 18:16:50 +0000 (18:16 +0000)]
We haven't seen any agreement emerge as to what is causing AIX 5.3 ML3
to fail to successfully build the release candidates.
However, a patch has emerged (thanks, Seneca!) that does allow it to
work, and which I'd expect to be portable (better still!).
We are still actively pursuing why it breaks, but supposing that still
remains outstanding, at least the following would allow AIX users to
better survive a build...
Tom Lane [Fri, 4 Nov 2005 17:25:15 +0000 (17:25 +0000)]
Disregard superuserness when checking to see if a role GRANT would
create circularity of role memberships. This is a minimum-impact fix
for the problem reported by Florian Pflug. I thought about removing
the superuser_arg test from is_member_of_role() altogether, as it seems
redundant for many of the callers --- but not all, and it's way too late
in the 8.1 cycle to be making large changes. Perhaps reconsider this
later.
Tom Lane [Fri, 4 Nov 2005 02:56:31 +0000 (02:56 +0000)]
Avoid referring to a specific version of the SQL standard except where
necessary, and be careful to refer to the right version where it is
useful to do so. This partially reverts an ill-considered search and
replace from a few months ago.
Tom Lane [Thu, 3 Nov 2005 17:45:29 +0000 (17:45 +0000)]
Thinking further, it seems we had better also copy down resorigtbl/resorigcol
to ensure that SubqueryScan elimination doesn't change the behavior of
reporting of original column sources.
Tom Lane [Thu, 3 Nov 2005 17:34:03 +0000 (17:34 +0000)]
Fix the recently-added code that eliminates unnecessary SubqueryScan nodes
from a finished plan tree. We have to copy the output column names
(resname fields) from the SubqueryScan down to its child plan node;
else, if this is the topmost level of the plan, the wrong column names
will be delivered to the client. Per bug #2017 reported by Jolly Chen.
Alvaro Herrera [Thu, 3 Nov 2005 17:11:40 +0000 (17:11 +0000)]
Rename the members of CommandDest enum so they don't collide with other uses of
those names. (Debug and None were pretty bad names anyway.) I hope I catched
all uses of the names in comments too.
Tom Lane [Thu, 3 Nov 2005 00:23:36 +0000 (00:23 +0000)]
Fix longstanding race condition in transaction log management: there was a
very narrow window in which SimpleLruReadPage or SimpleLruWritePage could
think that I/O was needed when it wasn't (and indeed the buffer had already
been assigned to another page). This would result in an Assert failure if
Asserts were enabled, and probably in silent data corruption if not.
Reported independently by Jim Nasby and Robert Creager.
I intend a more extensive fix when 8.2 development starts, but this is a
reasonably low-impact patch for the existing branches.
Andrew Dunstan [Tue, 1 Nov 2005 15:09:11 +0000 (15:09 +0000)]
Provide a --no-locale option for pg_regress and a corresponding NOLOCALE=1
setting for the regression makefile, allowing Windows users to force locale
settings since Windows does not get its locale from the environment.
Tom Lane [Fri, 28 Oct 2005 19:00:19 +0000 (19:00 +0000)]
Reorder code so that we don't have to hold a critical section while
reserving SLRU space for a new MultiXact. The original coding would have
treated out-of-disk-space as a PANIC condition, which is unnecessary.
Tom Lane [Fri, 28 Oct 2005 17:32:22 +0000 (17:32 +0000)]
Clean up AIX build to avoid 'duplicate symbol' warnings, by moving use
of postgres.imp file into BE_DLLLIBS macro. This makes the AIX build
work more like the Windows and Darwin builds, which have similar requirements
to mention a backend library when linking shared libraries that will be
dynamically loaded into the backend.
Tom Lane [Fri, 28 Oct 2005 17:27:29 +0000 (17:27 +0000)]
Fix race condition in multixact code: it's possible to try to read a
multixact's starting offset before the offset has been stored into the
SLRU file. A simple fix would be to hold the MultiXactGenLock until the
offset has been stored, but that looks like a big concurrency hit. Instead
rely on knowledge that unset offsets will be zero, and loop when we see
a zero. This requires a little extra hacking to ensure that zero is never
a valid value for the offset. Problem reported by Matteo Beccati, fix
ideas from Martijn van Oosterhout, Alvaro Herrera, and Tom Lane.
Tom Lane [Thu, 27 Oct 2005 20:45:29 +0000 (20:45 +0000)]
Add an ifneq to avoid make warning on AIX --- there is a separate rule
for postgres: on line 86, and line 43 shouldn't be used. Noted while
looking at kookaburra buildfarm results.
Tom Lane [Thu, 27 Oct 2005 17:07:58 +0000 (17:07 +0000)]
Tweak buffer manager so that 'internal' accesses to a buffer do not
advance its usage_count. This includes writes of dirty buffers triggered
by bgwriter, checkpoint, or FlushRelationBuffers, as well as various
corner cases that really ought not count as accesses to the page.
Should make for some marginal improvement in the quality of our decisions
about when to recycle buffers. Per suggestion from ITAGAKI Takahiro.
Bruce Momjian [Thu, 27 Oct 2005 02:33:31 +0000 (02:33 +0000)]
Add items from Tom:
< o Add a GUC variable to allow output of interval values in ISO8601
< format 212a211,223
> o Add a GUC variable to allow output of interval values in ISO8601
> format
> o Improve timestamptz subtraction to be DST-aware
>
> Currently, subtracting one date from another that crosses a
> daylight savings time adjustment can return '1 day 1 hour', but
> adding that back to the first date returns a time one hour in
> the future. This is caused by the adjustment of '25 hours' to
> '1 day 1 hour', and '1 day' is the same time the next day, even
> if daylight savings adjustments are involved.
>
> o Fix interval display to support values exceeding 2^31 hours
> o Add overflow checking to timestamp and interval arithmetic
Tom Lane [Wed, 26 Oct 2005 19:21:55 +0000 (19:21 +0000)]
Adjust parser so that POSTQUEL-style implicit RTEs are stored with
inFromCl true, meaning that they will list out as explicit RTEs if they
are in a view or rule. Update comments about inFromCl to reflect the way
it's now actually used. Per recent discussion.
Tom Lane [Tue, 25 Oct 2005 20:30:30 +0000 (20:30 +0000)]
Fix longstanding bug that would sometimes let the planner generate a bad plan
for an outer join; symptom is bogus error "RIGHT JOIN is only supported with
merge-joinable join conditions". Problem was that select_mergejoin_clauses
did its tests in the wrong order. We need to force left join not right join
for a merge join when there are non-mergeable join clauses; but the test for
this only accounted for mergejoinability of the clause operator, and not
whether the left and right Vars were of the proper relations. Per report
from Jean-Pierre Pelletier.
Bruce Momjian [Tue, 25 Oct 2005 18:50:56 +0000 (18:50 +0000)]
Add:
>
> o Add auto-expanded mode so expanded output is used if the row
> length is wider than the screen width.
>
> Consider using auto-expanded mode for backslash commands like \df+.
Tom Lane [Tue, 25 Oct 2005 17:13:07 +0000 (17:13 +0000)]
Remove justify_hours call from interval_mul and interval_div, and make
some small stylistic improvements in these functions. Also fix several
places where TMODULO() was being used with wrong-sized quotient argument,
creating a risk of overflow --- interval2tm was actually capable of going
into an infinite loop because of this.
Tom Lane [Tue, 25 Oct 2005 15:15:16 +0000 (15:15 +0000)]
Fix Windows setitimer() emulation to not depend on delivering an APC
to the main thread. This allows removal of WaitForSingleObjectEx() calls
from the main thread, thereby allowing us to re-enable Qingqing Zhou's
CHECK_FOR_INTERRUPTS performance improvement. Qingqing, Magnus, et al.
Andrew Dunstan [Mon, 24 Oct 2005 15:39:50 +0000 (15:39 +0000)]
Fix incorrect wording about function failure time on unsafe ops - these
are now caught by the validator. And a small visit from the perl style police:
check the return value from open().
Bruce Momjian [Mon, 24 Oct 2005 15:38:37 +0000 (15:38 +0000)]
I have applied the following patch to document PQinitSSL() and
PQregisterThreadLock().
I also remove the crypt() mention in the libpq threading section and
added a single sentence in the client-auth manual page under crypt().
Crypt authentication is so old now that a separate paragraph about it
seemed unwise.
I also added a comment about our use of locking around pqGetpwuid().
Tom Lane [Mon, 24 Oct 2005 15:10:22 +0000 (15:10 +0000)]
Ensure that a plpgsql LOOP with an empty body still executes at least
one CHECK_FOR_INTERRUPTS() call, so that you can control-C out of the
loop. Reported by Merlin Moncure.
Tom Lane [Sat, 22 Oct 2005 22:09:49 +0000 (22:09 +0000)]
Add a note about GNU tar's propensity to complain if a file changes
while tar is copying it. This behavior is unhelpful when taking a base
backup. Per gripe from Pallav Kalva back in April.
Tom Lane [Sat, 22 Oct 2005 19:33:57 +0000 (19:33 +0000)]
Fix documentation to specify the correct range of timezone offsets for
type time with time zone, ie, +/- 13:59 not +/- 12:00. Also some minor
wording improvements.
Tom Lane [Sat, 22 Oct 2005 17:09:48 +0000 (17:09 +0000)]
Temporarily disable Qingqing's Windows signal processing patch, so that
WaitForSingleObjectEx is always called by CHECK_FOR_INTERRUPTS. This
should be reinstated but the setitimer() emulation will have to be
redesigned first.
Tom Lane [Fri, 21 Oct 2005 21:43:46 +0000 (21:43 +0000)]
Improve performance of CHECK_FOR_INTERRUPTS() macro on Windows by not doing
a kernel call unless there's some evidence of a pending signal. This should
bring its performance on Windows into line with the Unix version. Problem
diagnosis and patch by Qingqing Zhou. Minor stylistic tweaks by moi ...
if it's broken, it's my fault.
Tom Lane [Fri, 21 Oct 2005 19:39:08 +0000 (19:39 +0000)]
Clean up autovacuum documentation, which was a bit out of sync with what
the code actually does, and needed copy-editing anyway. Also take the
opportunity to expand the section on routine reindexing.
Tom Lane [Fri, 21 Oct 2005 16:43:33 +0000 (16:43 +0000)]
Fix EXPLAIN ANALYZE bug noted by Wiebe Cazemier: although we were
properly advancing the CommandCounter between multiple sub-queries
generated by rules, we forgot to update the snapshot being used, so
that the successive sub-queries didn't actually see each others'
results. This is still not *exactly* like the semantics of normal
execution of the same queries, in that we don't take new transaction
snapshots and hence don't see changes from concurrently committed
commands, but I think that's OK and probably even preferable for
EXPLAIN ANALYZE.