Tom Lane [Thu, 12 Jan 2006 21:48:53 +0000 (21:48 +0000)]
Repair "Halloween problem" in EvalPlanQual: a tuple that's been inserted by
our own command (or more generally, xmin = our xact and cmin >= current
command ID) should not be seen as good. Else we may try to update rows
we already updated. This error was inserted last August while fixing the
even bigger problem that the old coding wouldn't see *any* tuples inserted
by our own transaction as good. Per report from Euler Taveira de Oliveira.
Tom Lane [Thu, 12 Jan 2006 19:23:22 +0000 (19:23 +0000)]
Use a more bulletproof test for whether finite() and isinf() are present.
It seems that recent gcc versions can optimize away calls to these functions
even when the functions do not exist on the platform, resulting in a bogus
positive result. Avoid this by using a non-constant argument and ensuring
that the function result is not simply discarded. Per report from
François Laupretre.
Neil Conway [Wed, 11 Jan 2006 22:16:39 +0000 (22:16 +0000)]
Documentation tweak: add spaces around the brackets in the description
of the CREATE CONVERSION syntax, for consistency with the other SQL
reference pages.
Tom Lane [Wed, 11 Jan 2006 20:12:43 +0000 (20:12 +0000)]
Create a standard function pg_sleep() to sleep for a specified amount of time.
Replace the former ad-hoc implementation used in the regression tests.
Joachim Wieland
Neil Conway [Wed, 11 Jan 2006 08:43:13 +0000 (08:43 +0000)]
Cosmetic code cleanup: fix a bunch of places that used "return (expr);"
rather than "return expr;" -- the latter style is used in most of the
tree. I kept the parentheses when they were necessary or useful because
the return expression was complex.
Neil Conway [Tue, 10 Jan 2006 18:50:43 +0000 (18:50 +0000)]
Minor code clarity improvement: AFAICS, estate.eval_econtext must be
non-NULL during the guts of plpgsql_exec_trigger() and
plpgsql_exec_function(). Therefore, we can remove the NULL check,
per discussion on -patches.
Tom Lane [Tue, 10 Jan 2006 17:35:52 +0000 (17:35 +0000)]
Improve patternsel() by applying the operator itself to each value
listed in the column's most-common-values statistics entry. This gives
us an exact selectivity result for the portion of the column population
represented by the MCV list, which can be a big leg up in accuracy if
that's a large fraction of the population. The heuristics involving
pattern contents and prefix are applied only to the part of the population
not included in the MCV list.
Neil Conway [Tue, 10 Jan 2006 00:33:12 +0000 (00:33 +0000)]
In PLy_function_build_args(), the code loops repeatedly, constructing
one argument at a time and then inserting the argument into a Python
list via PyList_SetItem(). This "steals" the reference to the argument:
that is, the reference to the new list member is now held by the Python
list itself. This works fine, except if an elog occurs. This causes the
function's PG_CATCH() block to be invoked, which decrements the
reference counts on both the current argument and the list of arguments.
If the elog happens to occur during the second or subsequent iteration
of the loop, the reference count on the current argument will be
decremented twice.
The fix is simple: set the local pointer to the current argument to NULL
immediately after adding it to the argument list. This ensures that the
Py_XDECREF() in the PG_CATCH() block doesn't double-decrement.
Tom Lane [Mon, 9 Jan 2006 21:16:17 +0000 (21:16 +0000)]
Fix pg_dump to add the required OPERATOR() decoration to schema-qualified
operator names. This is needed when dumping operator definitions that have
COMMUTATOR (or similar) links to operators in other schemas.
Apparently Daniel Whitter is the first person ever to try this :-(
Neil Conway [Mon, 9 Jan 2006 02:47:09 +0000 (02:47 +0000)]
Minor code cleanup for PL/Python: fixup some strangely formatted comments,
and change two elogs into ereports because they could actually occur
in practice.
Tom Lane [Sun, 8 Jan 2006 21:24:37 +0000 (21:24 +0000)]
Fix the assert_enabled issue properly. This eliminates the former ABI
difference between USE_ASSERT_CHECKING and not: the assert_enabled
variable is always there.
Tom Lane [Sun, 8 Jan 2006 20:04:41 +0000 (20:04 +0000)]
Avoid leaking memory while reading toasted entries from pg_rewrite,
and nail a couple more system indexes into cache. This doesn't make
any difference in normal system operation, but when forcing constant
cache resets it's difficult to get through the rules regression test
without these changes.
Neil Conway [Sun, 8 Jan 2006 07:00:27 +0000 (07:00 +0000)]
Add a new system view, pg_prepared_statements, that can be used to
access information about the prepared statements that are available
in the current session. Original patch from Joachim Wieland, various
improvements by Neil Conway.
The "statement" column of the view contains the literal query string
sent by the client, without any rewriting or pretty printing. This
means that prepared statements created via SQL will be prefixed with
"PREPARE ... AS ", whereas those prepared via the FE/BE protocol will
not. That is unfortunate, but discussion on -patches did not yield an
efficient way to improve this, and there is some merit in returning
exactly what the client sent to the backend.
Tom Lane [Sat, 7 Jan 2006 22:45:41 +0000 (22:45 +0000)]
Add RelationOpenSmgr() calls to ensure rd_smgr is valid when we try to
use it. While it normally has been opened earlier during btree index
build, testing shows that it's possible for the link to be closed again
if an sinval reset occurs while the index is being built.
Tom Lane [Sat, 7 Jan 2006 21:16:10 +0000 (21:16 +0000)]
During CatCacheRemoveCList, we must now remove any members that are
dead and have become unreferenced. Before 8.1, such members were left
for AtEOXact_CatCache() to clean up, but now AtEOXact_CatCache isn't
supposed to have anything to do. In an assert-enabled build this bug
leads to an assertion failure at transaction end, but in a non-assert
build the dead member is effectively just a small memory leak.
Per report from Jeremy Drake.
Tom Lane [Fri, 6 Jan 2006 02:58:25 +0000 (02:58 +0000)]
Fix Windows-only postmaster code to reject a connection request and continue,
rather than elog(FATAL), when there is no more room in ShmemBackendArray.
This is a security issue since too many connection requests arriving close
together could cause the postmaster to shut down, resulting in denial of
service. Reported by Yoshiyuki Asaba, fixed by Magnus Hagander.
Tom Lane [Fri, 6 Jan 2006 00:15:50 +0000 (00:15 +0000)]
Convert Assert checking for empty page into a regular test and elog.
The consequences of overwriting a non-empty page are bad enough that
we should not omit this test in production builds.
Tom Lane [Fri, 6 Jan 2006 00:04:20 +0000 (00:04 +0000)]
Fix ReadBuffer() to correctly handle the case where it's trying to extend
the relation but it finds a pre-existing valid buffer. The buffer does not
correspond to any page known to the kernel, so we *must* do smgrextend to
ensure that the space becomes allocated. The 7.x branches all do this
correctly, but the corner case got lost somewhere during 8.0 bufmgr rewrites.
(My fault no doubt :-( ... I think I assumed that such a buffer must be
not-BM_VALID, which is not so.)
Bruce Momjian [Thu, 5 Jan 2006 16:35:19 +0000 (16:35 +0000)]
Update wording:
< STABLE | DEFAULT ]. [wallog]
> STABLE | DEFAULT ]. Tables using non-default logging should not use
> referential integrity with default-logging tables, and tables using
> stable logging probably can not have indexes. [wallog]
Bruce Momjian [Thu, 5 Jan 2006 16:26:49 +0000 (16:26 +0000)]
Update wording:
< the table. Another option is to avoid transaction logging entirely
< and truncate or drop the table on crash recovery. These should be
< implemented using ALTER TABLE, e.g. ALTER TABLE PERSISTENCE [ DROP |
< TRUNCATE | STABLE | DEFAULT ]. [wallog]
> the table. This would affect COPY, and perhaps INSERT/UPDATE too.
> Another option is to avoid transaction logging entirely and truncate
> or drop the table on crash recovery. These should be implemented
> using ALTER TABLE, e.g. ALTER TABLE PERSISTENCE [ DROP | TRUNCATE |
> STABLE | DEFAULT ]. [wallog]
Bruce Momjian [Thu, 5 Jan 2006 16:23:48 +0000 (16:23 +0000)]
Add:
>
> * Allow control over which tables are WAL-logged
>
> Allow tables to bypass WAL writes and just fsync() dirty pages on
> commit. To do this, only a single writer can modify the table, and
> writes must happen only on new pages. Readers can continue accessing
> the table. Another option is to avoid transaction logging entirely
> and truncate or drop the table on crash recovery. These should be
> implemented using ALTER TABLE, e.g. ALTER TABLE PERSISTENCE [ DROP |
> TRUNCATE | STABLE | DEFAULT ]. [wallog]
Make all command-line options of postmaster and postgres the same. See
http://archives.postgresql.org/pgsql-hackers/2006-01/msg00151.php for the
complete plan.
Tom Lane [Wed, 4 Jan 2006 21:06:32 +0000 (21:06 +0000)]
Rearrange backend startup sequence so that ShmemIndexLock can become
an LWLock instead of a spinlock. This hardly matters on Unix machines
but should improve startup performance on Windows (or any port using
EXEC_BACKEND). Per previous discussion.
Tom Lane [Tue, 3 Jan 2006 23:46:24 +0000 (23:46 +0000)]
There is a signedness bug in Openwall gen_salt code that pgcrypto uses.
This makes the salt space for md5 and xdes algorithms a lot smaller than
it should be.
Joe Conway [Tue, 3 Jan 2006 23:45:52 +0000 (23:45 +0000)]
When the remote query result has a different number of columns
than the local query specifies (e.g. in the FROM clause),
throw an ERROR (instead of crashing). Fix for bug #2129 reported
by Akio Iwaasa.
Tom Lane [Tue, 3 Jan 2006 22:48:10 +0000 (22:48 +0000)]
Add checks to verify that a plpgsql function returning a rowtype is actually
returning the rowtype it's supposed to return. Per reports from David Niblett
and Michael Fuhr.
Bruce Momjian [Tue, 3 Jan 2006 16:42:17 +0000 (16:42 +0000)]
Use setitimer() for stats file write, rather than do a gettimeofday()
call for every stats packet read to adjust select() timeout. Other
stylistic improvements.
Andrew Dunstan [Mon, 2 Jan 2006 16:45:12 +0000 (16:45 +0000)]
Remove the nexus between trial_buffs and trial_conns, and don't test shared buffers lower than or equal to a value we already know is good, but use that value instead. This will make it easier to adjust the trial values and/or formulae in future if necessary.
Tom Lane [Sun, 1 Jan 2006 19:52:40 +0000 (19:52 +0000)]
Rewrite ProcessConfigFile() to avoid misbehavior at EOF, as per report
from Andrus Moor. The former state-machine-style coding wasn't actually
doing much except obscuring the control flow, and it didn't extend
readily to fix this case, so I just took it out. Also, add a
YY_FLUSH_BUFFER call to ensure the lexer is reset correctly if the
previous scan failed partway through the file.
Neil Conway [Sun, 1 Jan 2006 10:13:56 +0000 (10:13 +0000)]
Remove DOS line endings ("\r\n") from several .po files. DOS line endings
are inconsistent with the rest of the .po files, and apparently cause
problems for Sun's cc. Per report on IRC from "bitvector2".
Tom Lane [Sat, 31 Dec 2005 23:50:59 +0000 (23:50 +0000)]
Clean up initdb's code for selecting max_connections and shared_buffers
a little bit, and set the minimum buffers-per-connection ratio to 10 not
5. I folded the two test routines into one to counteract the illusion
that the tests can be twiddled independently, and added some documentation
pointing out the necessary connection between the sets of values tested.
Fixes strange choices of parameters that I noticed CVS tip making on
Darwin with Apple's undersized default SHMMAX.
Tom Lane [Fri, 30 Dec 2005 18:34:22 +0000 (18:34 +0000)]
Repair EXPLAIN failure when trying to display a plan condition that involves
selection of a field from the result of a function returning RECORD.
I believe this case is new in 8.1; it's due to the addition of OUT parameters.
Per example from Michael Fuhr.
Neil Conway [Thu, 29 Dec 2005 21:47:32 +0000 (21:47 +0000)]
Index: src/pl/plpython/plpython.c
===================================================================
RCS file: /Users/neilc/postgres/cvs_root/pgsql/src/pl/plpython/plpython.c,v
retrieving revision 1.67
diff -c -r1.67 plpython.c
*** src/pl/plpython/plpython.c 26 Dec 2005 04:28:48 -0000 1.67
--- src/pl/plpython/plpython.c 29 Dec 2005 16:54:57 -0000
***************
*** 2,8 ****
* plpython.c - python as a procedural language for PostgreSQL
*
* This software is copyright by Andrew Bosma
! * but is really shameless cribbed from pltcl.c by Jan Weick, and
* plperl.c by Mark Hollomon.
*
* The author hereby grants permission to use, copy, modify,
--- 2,8 ----
* plpython.c - python as a procedural language for PostgreSQL
*
* This software is copyright by Andrew Bosma
! * but is really shamelessly cribbed from pltcl.c by Jan Wieck, and
* plperl.c by Mark Hollomon.
*
* The author hereby grants permission to use, copy, modify,
***************
*** 1996,2002 ****
int i,
rv;
PLyPlanObject *plan;
- char *nulls;
MemoryContext oldcontext;
Tom Lane [Thu, 29 Dec 2005 18:08:05 +0000 (18:08 +0000)]
Get rid of the SpinLockAcquire/SpinLockAcquire_NoHoldoff distinction
in favor of having just one set of macros that don't do HOLD/RESUME_INTERRUPTS
(hence, these correspond to the old SpinLockAcquire_NoHoldoff case).
Given our coding rules for spinlock use, there is no reason to allow
CHECK_FOR_INTERRUPTS to be done while holding a spinlock, and also there
is no situation where ImmediateInterruptOK will be true while holding a
spinlock. Therefore doing HOLD/RESUME_INTERRUPTS while taking/releasing a
spinlock is just a waste of cycles. Qingqing Zhou and Tom Lane.
Andrew Dunstan [Thu, 29 Dec 2005 14:28:31 +0000 (14:28 +0000)]
Move declaration of check_function_bodies to where the perl headers
haven't had a chance to mangle the definition of DLLIMPORT (thanks again, perl guys).
Tom Lane [Wed, 28 Dec 2005 23:22:51 +0000 (23:22 +0000)]
Arrange to set the LC_XXX environment variables to match our locale
setup. This protects against undesired changes in locale behavior
if someone carelessly does setlocale(LC_ALL, "") (and we know who
you are, perl guys).
Tom Lane [Wed, 28 Dec 2005 18:34:16 +0000 (18:34 +0000)]
Fix plperl validator to honor check_function_bodies: when that is OFF,
we want it to check the argument/result data types and no more. In
particular, libperl shouldn't get initialized in this case.
Tom Lane [Wed, 28 Dec 2005 18:11:25 +0000 (18:11 +0000)]
Move plpgsql's fetchArgInfo() into funcapi.c, and rename to
get_func_arg_info() for consistency with other names there.
This code will probably be useful to other PLs when they start to
support OUT parameters, so better to have it in the main backend.
Also, fix plpgsql validator to detect bogus OUT parameters even when
check_function_bodies is off.
Bruce Momjian [Wed, 28 Dec 2005 16:47:21 +0000 (16:47 +0000)]
Mention "table" in "violates foreign key constraint" message that was
lacking it. Perhaps it was suppressed because of line length
considerations, but "table" should appear.
Bruce Momjian [Wed, 28 Dec 2005 03:25:32 +0000 (03:25 +0000)]
Add regression tests for CSV and \., and add automatic quoting of a
single column dump that has a \. value, so the load works properly. I
also added documentation describing this issue.
Tom Lane [Wed, 28 Dec 2005 01:30:02 +0000 (01:30 +0000)]
Implement SQL-compliant treatment of row comparisons for < <= > >= cases
(previously we only did = and <> correctly). Also, allow row comparisons
with any operators that are in btree opclasses, not only those with these
specific names. This gets rid of a whole lot of indefensible assumptions
about the behavior of particular operators based on their names ... though
it's still true that IN and NOT IN expand to "= ANY". The patch adds a
RowCompareExpr expression node type, and makes some changes in the
representation of ANY/ALL/ROWCOMPARE SubLinks so that they can share code
with RowCompareExpr.
I have not yet done anything about making RowCompareExpr an indexable
operator, but will look at that soon.
Andrew Dunstan [Tue, 27 Dec 2005 23:54:01 +0000 (23:54 +0000)]
Increase amount of shared buffers initdb tries to allocate to 4000,
and add logic to try max_fsm_pages up to 200000, plus accompanying minor
docs changes.
Bruce Momjian [Tue, 27 Dec 2005 18:10:48 +0000 (18:10 +0000)]
Our code had:
if (c == '\\' && cstate->line_buf.len == 0)
The problem with that is the because of the input and _output_
buffering, cstate->line_buf.len could be zero even if we are not on the
first character of a line. In fact, for a typical line, it is zero for
all characters on the line. The proper solution is to introduce a
boolean, first_char_in_line, that we set as we enter the loop and clear
once we process a character.
I have restructured the line-reading code in copy.c by:
o merging the CSV/non-CSV functions into a single function
o used macros to centralize and clarify the buffering code
o updated comments
o renamed client_encoding_only to encoding_embeds_ascii
o added a high-bit test to the encoding_embeds_ascii test for
performance
o in CSV mode, allow a backslash followed by a non-period to
continue being processed as a data value
There should be no performance impact from this patch because it is
functionally equivalent. If you apply the patch you will see copy.c is
much clearer in this area now and might suggest additional
optimizations.
I have also attached a 8.1-only patch to fix the CSV \. handling bug
with no code restructuring.