Andrew Dunstan [Mon, 13 Nov 2006 17:13:57 +0000 (17:13 +0000)]
Force plperl and plperlu to run in separate interpreters. Create an error
on an attempt to create the second interpreter if this is not supported by
the perl installation. Per recent -hackers discussion.
Neil Conway [Sun, 12 Nov 2006 06:25:37 +0000 (06:25 +0000)]
Do a round of copy-editing for the system catalog chapter. In particular,
consistently capitalize the content of the "Description" column but do
not include a terminating period, as is the convention elsewhere in the
docs. Also, remove the "References" column from catalog that do not
have any referencing columns, for the sake of brevity. Make various
other SGML and grammar fixes.
Tom Lane [Sat, 11 Nov 2006 01:14:19 +0000 (01:14 +0000)]
Suppress a few 'uninitialized variable' warnings that gcc emits only at
-O3 or higher (presumably because it inlines more things). Per gripe
from Mark Mielke.
Tom Lane [Fri, 10 Nov 2006 22:59:29 +0000 (22:59 +0000)]
Fix pg_get_serial_sequence(), which could incorrectly return the name
of an index on a serial column, rather than the name of the associated
sequence. Fallout from recent changes in dependency setup for serials.
Per bug #2732 from Basil Evseenko.
Tom Lane [Fri, 10 Nov 2006 20:52:18 +0000 (20:52 +0000)]
Emphasize that immutable and stable functions are not allowed to modify
the database. xfunc.sgml was already pretty definite on the point, but
it doesn't hurt to make it clear here too.
Tom Lane [Fri, 10 Nov 2006 18:10:10 +0000 (18:10 +0000)]
Fix errors in key_column_usage.position_in_unique_constraint column recently
added to information_schema (per a SQL2003 addition). The original coding
failed if a referenced column participated in more than one pg_constraint
entry. Also, it did not work if an FK relied directly on a unique index
without any constraint syntactic sugar --- this case is outside the SQL spec,
but PG has always supported it, so it's reasonable for our information_schema
to handle it too. Per bug#2750 from Stephen Haberman.
Although this patch changes the initial catalog contents, I didn't force
initdb. Any beta3 testers who need the fix can install it via CREATE OR
REPLACE VIEW, so forcing them to initdb seems an unnecessary imposition.
Tom Lane [Fri, 10 Nov 2006 01:21:41 +0000 (01:21 +0000)]
Fix set_joinrel_size_estimates() to estimate outer-join sizes more
accurately: we have to distinguish the effects of the join's own ON
clauses from the effects of pushed-down clauses. Failing to do so
was a quick hack long ago, but it's time to be smarter. Per example
from Thomas H.
Tom Lane [Wed, 8 Nov 2006 20:12:05 +0000 (20:12 +0000)]
Change Windows rename and unlink substitutes so that they time out after
30 seconds instead of retrying forever. Also modify xlog.c so that if
it fails to rename an old xlog segment up to a future slot, it will
unlink the segment instead. Per discussion of bug #2712, in which it
became apparent that Windows can handle unlinking a file that's being
held open, but not renaming it.
Tom Lane [Wed, 8 Nov 2006 19:27:24 +0000 (19:27 +0000)]
Modify aset.c to track the next intended block allocation size explicitly.
The former coding relied on the actual allocated size of the last block,
which made it behave strangely if the first allocation in a context was
larger than ALLOC_CHUNK_LIMIT: subsequent allocations would be referenced
to that and not to the intended series of block sizes. Noted while
studying a memory wastage gripe from Tatsuo.
Tom Lane [Wed, 8 Nov 2006 19:24:38 +0000 (19:24 +0000)]
Tweak accumArrayResult() to double the size of its working arrays when
more space is needed, instead of incrementing by a fixed amount; the old
method wastes lots of space and time when the ultimate size is large.
Per gripe from Tatsuo.
Tom Lane [Wed, 8 Nov 2006 19:22:25 +0000 (19:22 +0000)]
Fix performance issues in replace_text(), replace_text_regexp(), and
text_to_array(): they all had O(N^2) behavior on long input strings in
multibyte encodings, because of repeated rescanning of the input text to
identify substrings whose positions/lengths were computed in characters
instead of bytes. Fix by tracking the current source position as a char
pointer as well as a character-count. Also avoid some unnecessary palloc
operations. text_to_array() also leaked memory intracall due to failure
to pfree temporary strings. Per gripe from Tatsuo Ishii.
Neil Conway [Wed, 8 Nov 2006 01:22:55 +0000 (01:22 +0000)]
Fix a memory leak in psql: we'd leak a few PGresult handles if
a connectivity error occurred while executing one of the queries
for "\d <table>". Not serious, but still worth fixing. Patch from
Brendan Jurd.
Neil Conway [Wed, 8 Nov 2006 00:45:30 +0000 (00:45 +0000)]
Remove a 15-year old comment questioning behavior that is now well-
established: referencing an undefined parameter should result in an
error, not NULL.
Tom Lane [Mon, 6 Nov 2006 18:21:31 +0000 (18:21 +0000)]
Repair bug #2694 concerning an ARRAY[] construct whose inputs are empty
sub-arrays. Per discussion, if all inputs are empty arrays then result
must be an empty array too, whereas a mix of empty and nonempty arrays
should (and already did) draw an error. In the back branches, the
construct was strict: any NULL input immediately yielded a NULL output;
so I left that behavior alone. HEAD was simply ignoring NULL sub-arrays,
which doesn't seem very sensible. For lack of a better idea it now
treats NULL sub-arrays the same as empty ones.
Tom Lane [Mon, 6 Nov 2006 17:10:22 +0000 (17:10 +0000)]
Remove temporary Windows-specific debugging code; it seems the problem
with fopen() not using FILE_SHARE_DELETE was indeed the bug we were after,
given lack of recent reports.
Tom Lane [Mon, 6 Nov 2006 03:44:38 +0000 (03:44 +0000)]
Revert to the pre-8.2 method of probing for libm, that is, always
include it if it links properly. It seems too risky to assume that
standard functions like pow() are not special-cased by the compiler.
Per report from Andreas Lange that build fails on Solaris cc compiler
with -fast. Even though we don't consider that a supported option,
I'm worried that similar issues will arise with other compilers.
Tom Lane [Mon, 6 Nov 2006 03:06:41 +0000 (03:06 +0000)]
Get rid of some unnecessary dependencies on DataDir: wherever possible,
the backend should rely on its working-directory setting instead.
Also do some message-style police work in contrib/adminpack.
Neil Conway [Mon, 6 Nov 2006 01:27:52 +0000 (01:27 +0000)]
Minor fix for LDAP authentication: if an error occurs, we need to
manually release the LDAP handle via ldap_unbind(). This isn't a
significant problem in practice because an error eventually results
in exiting the process, but we can cleanup correctly without too
much pain.
In passing, fix an error in snprintf() usage: the "size" parameter
to snprintf() is the size of the destination buffer, including space
for the NUL terminator. Also, depending on the value of NAMEDATALEN,
the old coding could have allowed for a buffer overflow.
Tom Lane [Sun, 5 Nov 2006 23:40:31 +0000 (23:40 +0000)]
Fix recently-identified PITR recovery hazard: the base backup could contain
stale relcache init files (pg_internal.init), and there is no mechanism for
updating them during WAL replay. Easiest solution is just to delete the init
files at conclusion of startup, and let the first backend started in each
database take care of rebuilding the init file. Simon Riggs and Tom Lane.
Back-patched to 8.1. Arguably this should be fixed in 8.0 too, but it would
require significantly more code since 8.0 has no handy startup-time scan of
pg_database to piggyback on. Manual solution of the problem is possible
in 8.0 (just delete the pg_internal.init files before starting WAL replay),
so that may be a sufficient answer.
Tom Lane [Sun, 5 Nov 2006 22:42:10 +0000 (22:42 +0000)]
Fix recently-understood problems with handling of XID freezing, particularly
in PITR scenarios. We now WAL-log the replacement of old XIDs with
FrozenTransactionId, so that such replacement is guaranteed to propagate to
PITR slave databases. Also, rather than relying on hint-bit updates to be
preserved, pg_clog is not truncated until all instances of an XID are known to
have been replaced by FrozenTransactionId. Add new GUC variables and
pg_autovacuum columns to allow management of the freezing policy, so that
users can trade off the size of pg_clog against the amount of freezing work
done. Revise the already-existing code that forces autovacuum of tables
approaching the wraparound point to make it more bulletproof; also, revise the
autovacuum logic so that anti-wraparound vacuuming is done per-table rather
than per-database. initdb forced because of changes in pg_class, pg_database,
and pg_autovacuum catalogs. Heikki Linnakangas, Simon Riggs, and Tom Lane.
Tom Lane [Sat, 4 Nov 2006 18:20:27 +0000 (18:20 +0000)]
Correct documentation error: in 8.1 and 8.2, %p in archive and restore
command strings inserts relative not absolute path of file to process.
This is a side-effect of 2005-07-04 change that makes the server use
relative paths in general. Noted by Bernd Helmle.
Tom Lane [Wed, 1 Nov 2006 19:43:17 +0000 (19:43 +0000)]
Fix "failed to re-find parent key" btree VACUUM failure by revising page
deletion code to avoid the case where an upper-level btree page remains "half
dead" for a significant period of time, and to block insertions into a key
range that is in process of being re-assigned to the right sibling of the
deleted page's parent. This prevents the scenario reported by Ed L. wherein
index keys could become out-of-order in the grandparent index level.
Since this is a moderately invasive fix, I'm applying it only to HEAD.
The bug exists back to 7.4, but the back branches will get a different patch.
Tom Lane [Wed, 1 Nov 2006 15:59:26 +0000 (15:59 +0000)]
pg_restore failed on tar-format archives if they contained large objects
(blobs) with comments, per bug #2727 from Konstantin Pelepelin.
Mea culpa for not having tested this case.
Back-patch to 8.1; prior branches don't dump blob comments at all.
Neil Conway [Tue, 31 Oct 2006 01:52:31 +0000 (01:52 +0000)]
Add text to the VACUUM, REINDEX, DROP TABLESPACE and CREATE TABLESPACE
reference pages documenting that these commands cannot be used within
a transaction block. Also make some minor improvements to the psql
reference page. Patch from Simon Riggs, minor editorialization by
myself.
Peter Eisentraut [Mon, 30 Oct 2006 22:15:04 +0000 (22:15 +0000)]
Code the unknown options check without using m4 diversions. Otherwise this
code relies on the checking macro actually being called at the end, or the
automatic undiversion will produce garbage. These sort of implicit
side-effects undermine the modularity of the macros and happen to break the
ODBC driver which makes use of them.
Also put the warnings at the very end of configure, so there is an even
better chance of seeing them.
Tom Lane [Wed, 25 Oct 2006 22:11:32 +0000 (22:11 +0000)]
expression_tree_walker failed to let walker function see the immediate child
node of a SubLink or SubPlan testexpr field. Bug resulted from replacing
the old lefthand/exprs list fields with a simple expression field, and not
remembering that expression_tree_walker is coded to save a few cycles by
recursing directly to self on list fields (on the assumption the walker
isn't interested in List nodes per se). On non-list fields it must of
course call the walker. Possibly that hack isn't worth the risk of more
such bugs, but I'll leave it be for now. Per bug report from James Robinson.
Tom Lane [Tue, 24 Oct 2006 17:50:22 +0000 (17:50 +0000)]
Fix check for whether a clauseless join has to be forced in the presence of
outer joins. Originally it was only looking for overlap of the righthand
side of a left join, but we have to do it on the lefthand side too.
Per example from Jean-Pierre Pelletier.
Tom Lane [Tue, 24 Oct 2006 15:11:03 +0000 (15:11 +0000)]
Tweak zic.c to compile cleanly on MSVC: use CopyFile instead of
CopyFileEx. This avoids a warning about the function not being
present on older Windows versions. Magnus Hagander
Peter Eisentraut [Mon, 23 Oct 2006 14:13:43 +0000 (14:13 +0000)]
Fix list of environment variables for configure. Remove some variables
that are almost never used. Put documentation-related variables into the
documentation chapter.
Tom Lane [Sun, 22 Oct 2006 20:34:54 +0000 (20:34 +0000)]
Remove an unnecessary HOLD_INTERRUPTS/RESUME_INTERRUPTS pair.
This was required back when RESUME_INTERRUPTS could actually
execute ProcessInterrupts, but that hasn't been true since 2001...
Tatsuo Ishii [Sat, 21 Oct 2006 06:31:28 +0000 (06:31 +0000)]
pgbench: More fix with handling default scaling factor in the default
scenarios. With multiple clinets, only the first client got the right
scaling factor and this gave a illusion of better performance in case
of the scaling factor greater than 1.
Tom Lane [Thu, 19 Oct 2006 22:55:25 +0000 (22:55 +0000)]
Clarify note about interaction of log_statement logging with errors.
Remove obsolete note about logging of statements generated by plpgsql
function execution ... that doesn't happen anymore.
Tom Lane [Thu, 19 Oct 2006 20:56:22 +0000 (20:56 +0000)]
Rename our substitute qsort to pg_qsort at the link-symbol level (but
provide a macro so code can still just say qsort). Avoids linker warnings
on pickier platforms such as Darwin, and outright failure on MSVC.
Bruce Momjian [Thu, 19 Oct 2006 19:58:45 +0000 (19:58 +0000)]
Done:
< * Improve port/qsort() to handle sorts with 50% unique and 50% duplicate
< value [qsort]
<
< This involves choosing better pivot points for the quicksort.
<
Tom Lane [Thu, 19 Oct 2006 19:52:22 +0000 (19:52 +0000)]
Make sure that debug_query_string contains the original query text,
if available (which it usually should be), during processing of Bind
and Execute protocol messages. This improves usefulness of
log_min_error_statement logging for extended query protocol.
Tom Lane [Thu, 19 Oct 2006 17:26:32 +0000 (17:26 +0000)]
Work around reported problem that AIX's getaddrinfo() doesn't seem to zero
sin_port in the returned IP address struct when servname is NULL. This has
been observed to cause failure to bind the stats collection socket, and
could perhaps cause other issues too. Per reports from Brad Nicholson
and Chris Browne.
Tom Lane [Wed, 18 Oct 2006 22:44:12 +0000 (22:44 +0000)]
Add some code to CREATE DATABASE to check for pre-existing subdirectories
that conflict with the OID that we want to use for the new database.
This avoids the risk of trying to remove files that maybe we shouldn't
remove. Per gripe from Jon Lapham and subsequent discussion of 27-Sep.