Provide support for multiplexing SIGUSR1 signal. The upcoming synchronous
replication patch needs a signal, but we've already used SIGUSR1 and
SIGUSR2 in normal backends. This patch allows reusing SIGUSR1 for that,
and for other purposes too if the need arises.
Tom Lane [Mon, 8 Dec 2008 15:44:54 +0000 (15:44 +0000)]
Teach pgstat_vacuum_stat to not bother scanning pg_proc in the common case
where no function stats entries exist. Partial response to Pavel's
observation that small VACUUM operations are noticeably slower in CVS HEAD
than 8.3.
Tom Lane [Mon, 8 Dec 2008 00:16:09 +0000 (00:16 +0000)]
Don't try to optimize EXISTS subqueries with empty FROM-lists: we need to
form a join and that case doesn't have anything to join to. (We could
probably make it work if we didn't pull up the subquery, but it seems to
me that the case isn't worth extra code.) Per report from Greg Stark.
Better descriptions in pg_get_keywords(), consistent with the documentation
appendix on key words. catdesc was originally intended as computer-readable,
but since we ended up adding catcode, we can have more elaborate descriptions.
Alvaro Herrera [Thu, 4 Dec 2008 14:51:02 +0000 (14:51 +0000)]
Fix a couple of snapshot management bugs in the new ResourceOwner world:
non-writable large objects need to have their snapshots registered on the
transaction resowner, not the current portal's, because it must persist until
the large object is closed (which the portal does not). Also, ensure that the
serializable snapshot is recorded by the transaction resource owner too, even
when a subtransaction has changed the current resource owner before
serializable is taken.
Utilize the visibility map in autovacuum, too. There was an oversight in
the visibility map patch that because autovacuum always sets
VacuumStmt->freeze_min_age, visibility map was never used for autovacuum,
only for manually launched vacuums. This patch introduces a new scan_all
field to VacuumStmt, indicating explicitly whether the visibility map
should be used, or the whole relation should be scanned, to advance
relfrozenxid. Anti-wraparound vacuums still need to scan all pages.
Magnus Hagander [Wed, 3 Dec 2008 20:04:26 +0000 (20:04 +0000)]
Properly unregister OpenSSL callbacks when libpq is done with
it's connection. This is required for applications that unload
the libpq library (such as PHP) in which case we'd otherwise
have pointers to these functions when they no longer exist.
This needs a bit more testing before we can consider a backpatch,
so not doing that yet.
In passing, remove unused functions in backend/libpq.
Bruce Momjian and Magnus Hagander, per report and analysis
by Russell Smith.
Introduce visibility map. The visibility map is a bitmap with one bit per
heap page, where a set bit indicates that all tuples on the page are
visible to all transactions, and the page therefore doesn't need
vacuuming. It is stored in a new relation fork.
Lazy vacuum uses the visibility map to skip pages that don't need
vacuuming. Vacuum is also responsible for setting the bits in the map.
In the future, this can hopefully be used to implement index-only-scans,
but we can't currently guarantee that the visibility map is always 100%
up-to-date.
In addition to the visibility map, there's a new PD_ALL_VISIBLE flag on
each heap page, also indicating that all tuples on the page are visible to
all transactions. It's important that this flag is kept up-to-date. It
is also used to skip visibility tests in sequential scans, which gives a
small performance gain on seqscans.
Use PG_GETARG_TEXT_PP instead of PG_GETARG_TEXT_P in the new
gin_cmp_tslexeme and gin_cmp_prefix functions. Should shave off a few
cycles from GIN operations.
Magnus Hagander [Tue, 2 Dec 2008 10:39:31 +0000 (10:39 +0000)]
Change wildcard cerfificate mapping to be much simler - we now only match
the * character at the beginning of a pattern, and it does not match
subdomains.
Since this means we no longer need fnmatch, remove the imported implementation
from port, along with the autoconf check for it.
Tom Lane [Mon, 1 Dec 2008 21:06:13 +0000 (21:06 +0000)]
Fix an oversight in the code that makes transitive-equality deductions from
outer join clauses. Given, say,
... from a left join b on a.a1 = b.b1 where a.a1 = 42;
we'll deduce a clause b.b1 = 42 and then mark the original join clause
redundant (we can't remove it completely for reasons I don't feel like
squeezing into this log entry). However the original implementation of
that wasn't bulletproof, because clause_selectivity() wouldn't honor
this_selec if given nonzero varRelid --- which in practice meant that
it worked as desired *except* when considering index scan quals. Which
resulted in bogus underestimation of the size of the indexscan result for
an inner indexscan in an outer join, and consequently a possibly bad
choice of indexscan vs. bitmap scan. Fix by introducing an explicit test
into clause_selectivity(). Also, to make sure we don't trigger that test
in corner cases, change the convention to be that this_selec > 1, not
this_selec = 1, means it's been marked redundant. Per trouble report from
Scara Maccai.
Back-patch to 8.2, where the problem was introduced.
Modify the new to_timestamp implementation so that end-of-format-string
is treated like a non-digit separator. This fixes the inconsistency in
examples like:
to_timestamp('2008-01-2', 'YYYY-MM-DD') -- didn't work
and
to_timestamp('2008-1-02', 'YYYY-MM-DD') -- did work
Tom Lane [Mon, 1 Dec 2008 17:06:21 +0000 (17:06 +0000)]
Ensure that the contents of a holdable cursor don't depend on out-of-line
toasted values, since those could get dropped once the cursor's transaction
is over. Per bug #4553 from Andrew Gierth.
Back-patch as far as 8.1. The bug actually exists back to 7.4 when holdable
cursors were introduced, but this patch won't work before 8.1 without
significant adjustments. Given the lack of field complaints, it doesn't seem
worth the work (and risk of introducing new bugs) to try to make a patch for
the older branches.
Tom Lane [Mon, 1 Dec 2008 01:30:18 +0000 (01:30 +0000)]
Refactor crosstab() to build and return a tuplestore instead of using
value-per-call mode. This should be more efficient in normal usage,
but the real problem with the prior coding was that it returned with
a SPI call still active. That could cause problems if execution was
interleaved with anything else that might use SPI.
Tom Lane [Sun, 30 Nov 2008 20:51:25 +0000 (20:51 +0000)]
Clean up the API for DestReceiver objects by eliminating the assumption
that a Portal is a useful and sufficient additional argument for
CreateDestReceiver --- it just isn't, in most cases. Instead formalize
the approach of passing any needed parameters to the receiver separately.
One unexpected benefit of this change is that we can declare typedef Portal
in a less surprising location.
This patch is just code rearrangement and doesn't change any functionality.
I'll tackle the HOLD-cursor-vs-toast problem in a follow-on patch.
Tom Lane [Sun, 30 Nov 2008 19:01:29 +0000 (19:01 +0000)]
Add a "LIKE = typename" clause to CREATE TYPE for base types. This allows
the basic representational details (typlen, typalign, typbyval, typstorage)
to be copied from an existing type rather than listed explicitly in the
CREATE TYPE command. The immediate reason for this is to provide a simple
solution for add-on modules that want to define types represented as int8,
float4, or float8: as of 8.4 the appropriate PASSEDBYVALUE setting is
platform-specific and so it's hard for a SQL script to know what to do.
This patch fixes the contrib/isn breakage reported by Rushabh Lathia.
Tom Lane [Sun, 30 Nov 2008 18:49:36 +0000 (18:49 +0000)]
Remove inappropriate memory context switch in shutdown_MultiFuncCall().
This was a thinko introduced in a patch from last February; it results
in memory leakage if an SRF is shut down before the actual end of query,
because subsequent code will be running in a longer-lived context than
it's expecting to be.
Tom Lane [Sat, 29 Nov 2008 00:39:46 +0000 (00:39 +0000)]
Fix recently-added array_agg tests to ensure they produce stable results
regardless of plan changes. Per intermittent buildfarm failures on
"pigeon" and others.
Tom Lane [Sat, 29 Nov 2008 00:13:21 +0000 (00:13 +0000)]
Make sure we give an appropriate user-facing error when attempting
to drop a table that is referenced by an open cursor. Fix unstable
ecpg regression test result that was produced by this oversight.
Tom Lane [Fri, 28 Nov 2008 19:29:07 +0000 (19:29 +0000)]
My recent fix for semijoin planning didn't actually work for a semijoin with a
RHS that can't be unique-ified --- join_is_legal has to check that before
deciding to build a join, else we'll have an unimplementable joinrel.
Per report from Greg Stark.
Peter Eisentraut [Fri, 28 Nov 2008 12:45:34 +0000 (12:45 +0000)]
Reduce risk of accidentally running temp-install regression tests against
a mismatching installation. Pick a default port number calculated from the
version number, and try a few times with other numbers if that one doesn't
work. Check if we can connect to the port before starting our own postmaster,
to detect some other server already running there. To simplify the code,
drop --temp-port option and use --port for both temp-install and pre-installed
case.
Tom Lane [Thu, 27 Nov 2008 00:28:06 +0000 (00:28 +0000)]
Tweak wording of DISCARD ALL description to avoid giving the impression
that the presented list of equivalent operations is meant to be the
primary definition of what it does. Per comment from Guillaume Smet.
Tom Lane [Thu, 27 Nov 2008 00:10:04 +0000 (00:10 +0000)]
Fix minor memory leak introduced in recent SQL-functions hacking: the
DestReceiver created during postquel_start needs to be destroyed during
postquel_end. In a moment of brain fade I had assumed this would be taken
care of by FreeQueryDesc, but it's not (and shouldn't be).
Peter Eisentraut [Wed, 26 Nov 2008 11:26:54 +0000 (11:26 +0000)]
configure check for docbook2man program, used in the new XML-based man
page build target. This covers from-source, Debian, and Fedora
installation variants.
Tom Lane [Wed, 26 Nov 2008 00:26:23 +0000 (00:26 +0000)]
Adjust the behavior of the PQExpBuffer code to make it have well-defined
results (ie, an empty "broken" buffer) if memory overrun occurs anywhere
along the way to filling the buffer. The previous coding would just silently
discard portions of the intended buffer contents, as exhibited in trouble
report from Sam Mason. Also, tweak psql's main loop to correctly detect
and report such overruns. There's probably much more that should be done
in this line, but this is a start.
Tom Lane [Tue, 25 Nov 2008 20:47:42 +0000 (20:47 +0000)]
information_schema.key_column_usage.position_in_unique_constraint was
misdocumented as not being implemented. In reality it has worked since
the release of 8.2.
Alvaro Herrera [Tue, 25 Nov 2008 20:28:29 +0000 (20:28 +0000)]
Use ResourceOwners in the snapshot manager, instead of attempting to track them
by hand. As an added bonus, the new code is smaller and more understandable,
and the ugly loops are gone.
This had been discussed all along but never implemented. It became clear that
it really needed to be fixed after a bug report by Pavan Deolasee.
Tom Lane [Tue, 25 Nov 2008 19:30:42 +0000 (19:30 +0000)]
Remove PGINTERVALSTYLE from the set of special environment variables for
libpq. As noted by Peter, adding this variable created a risk of unexpected
connection failures when talking to older server versions, and since it
doesn't do anything you can't do with PGOPTIONS, it doesn't seem really
necessary. Removing it does occasion a few extra lines in pg_regress.c,
but saving a getenv() call per libpq connection attempt is perhaps worth
that anyway.
Peter Eisentraut [Tue, 25 Nov 2008 11:49:35 +0000 (11:49 +0000)]
If pg_ctl stop fails, print an error message and exit (instead of going out
of our way to ignore the exit status). If this ever really happens, worst
case you will not see the "score" at the bottom of the test run.
Peter Eisentraut [Mon, 24 Nov 2008 11:59:37 +0000 (11:59 +0000)]
Move FAQ_AIX information to installation instructions.
The information on why the shared libraries are built the way they are
was not relevant to end users and has been made a mailing list archive
link in Makefile.shlib.
Tom Lane [Sun, 23 Nov 2008 01:40:19 +0000 (01:40 +0000)]
Teach RequestCheckpoint() to wait and retry a few times if it can't signal
the bgwriter immediately. This covers the case where the bgwriter is still
starting up, as seen in a recent buildfarm failure. In future it might also
assist with clean recovery after a bgwriter termination and restart ---
right now the postmaster treats early bgwriter exit as a system crash,
but that might not always be so.
Tom Lane [Sat, 22 Nov 2008 22:47:06 +0000 (22:47 +0000)]
Switch the planner over to treating qualifications of a JOIN_SEMI join as
though it is an inner rather than outer join type. This essentially means
that we don't bother to separate "pushed down" qual conditions from actual
join quals at a semijoin plan node; which is okay because the restrictions of
SQL syntax make it impossible to have a pushed-down qual that references the
inner side of a semijoin. This allows noticeably better optimization of
IN/EXISTS cases than we had before, since the equivalence-class machinery can
now use those quals. Also fix a couple of other mistakes that had essentially
disabled the ability to unique-ify the inner relation and then join it to just
a subset of the left-hand relations. An example case using the regression
database is
select * from tenk1 a, tenk1 b
where (a.unique1,b.unique2) in (select unique1,unique2 from tenk1 c);
which is planned reasonably well by 8.3 and earlier but had been forcing a
cartesian join of a/b in CVS HEAD.
Peter Eisentraut [Fri, 21 Nov 2008 16:46:19 +0000 (16:46 +0000)]
Include the platform "FAQs" into the installation instructions.
I weeded out some really old information along the way.
FAQ_AIX needs separate consideration and will be dealt with later.
Tom Lane [Thu, 20 Nov 2008 19:52:54 +0000 (19:52 +0000)]
Fix breakage of bitmap scan plan creation for special index operators such
as LIKE. I oversimplified this code when removing support for plan-time
determination of index operator lossiness back in April --- I had thought
create_bitmap_subplan could stop returning two separate lists of qual
conditions, but it still must so that we can treat special operators
correctly in create_bitmap_scan_plan. Per report from Rushabh Lathia.
Rethink the way FSM truncation works. Instead of WAL-logging FSM
truncations in FSM code, call FreeSpaceMapTruncateRel from smgr_redo. To
make that cleaner from modularity point of view, move the WAL-logging one
level up to RelationTruncate, and move RelationTruncate and all the
related WAL-logging to new src/backend/catalog/storage.c file. Introduce
new RelationCreateStorage and RelationDropStorage functions that are used
instead of calling smgrcreate/smgrscheduleunlink directly. Move the
pending rel deletion stuff from smgrcreate/smgrscheduleunlink to the new
functions. This leaves smgr.c as a thin wrapper around md.c; all the
transactional stuff is now in storage.c.
This will make it easier to add new forks with similar truncation logic,
like the visibility map.
Teodor Sigaev [Wed, 19 Nov 2008 10:23:21 +0000 (10:23 +0000)]
Fix compiler warning "res may be used uninitialized in this function".
Actually, it can't but some compilers are not smart enough.
Per Peter Eisentraut gripe.