Tom Lane [Thu, 2 Dec 2004 23:20:21 +0000 (23:20 +0000)]
Code review for recent libpq changes. Be more careful about error
handling in SIGPIPE processing; avoid unnecessary pollution of application
link-symbol namespace; spell 'pointer to function' in the conventional
way.
Bruce Momjian [Thu, 2 Dec 2004 22:51:28 +0000 (22:51 +0000)]
> I have installed your patch and adjusted the names of the standards
> throughout to the spellings suggested by your book.
Great.
A follow-up patch for current CVS HEAD is attached, and available at
http://troels.arvin.dk/db/pgsql/conformance/pgsql-sql-conformance-
followup.patch
The patch
- includes a core feature ID that had been left
out by mistake (C011)
- updates the sql_feature_packages.txt table to
reflect changes in SQL:2003 which were not
covered properly in my last patch
Bruce Momjian [Thu, 2 Dec 2004 22:48:10 +0000 (22:48 +0000)]
> > 8.0beta3 has pg_autovacuum included, when I want to run this as a
> > Windows service, it says you can use the -I and -R options.
> >
> > When I do that and I specify a password with '-P'
> (uppercase) then in
> > the registry it's saved as '-p' (lowercase) in the
> service-commandline
> > (ImagePath).
This was fixed in v1.21 of pg_autovacuum.c, That rev is tagged for
beta3, so you should not be seeing this issue unless you actually have
an older version for some reason.
> > Also it removes the quotes I added and I'm not so sure it
> would work
> > the way it's supposed to, without it.
It's not so much that it strips them (that happens automagically), more
that it doesn't re-add them when it writes the command line in the
registry. The attached patch fixes that by simply quoting all options
that may need it.
> > If you add DependOnService (a REG_MULTI_SZ an
> array-like-thingie) and
> > have the name (in this case: pgsql-8.0-beta2-dev3) of a service it
> > depends on, it will not fail to start (it will not even try, as
> > PostgreSQL is not running), when PostgreSQL already failed.
> >
> > Maybe it's an idea to specify it on the commandline (what
> service to
> > depend on).
A -E <service> option is added in the attached patch.
Bruce Momjian [Thu, 2 Dec 2004 22:40:18 +0000 (22:40 +0000)]
> I enclose a short patch to reduce the PGARCH_RESTART_INTERVAL from 60
> seconds to 10 seconds. The original number was plucked from thin air
> some months ago, and I'd like to review that now based upon further
> thought, observation and experience.
>
> This change has little or no effect on performance, since the interval
> is there mainly to avoid repeated respawn attempts if archiver fails at
> startup. Archiver start-up time is very quick, so there is little danger
> of exceeding 10 seconds.
>
> On a busy system, if the archiver does die, then many files can build up
> in the 60 seconds before respawning. That xlog file backlog could take
> some time to clear. This then leaves a larger than normal window of data
> loss for a possibly long period.
>
> It's a minor change only, with no other effect on function.
Bruce Momjian [Thu, 2 Dec 2004 22:28:22 +0000 (22:28 +0000)]
On win32, there is currently no way to get the equivalent function of
the "ps" argument list on Unix - meaning that there is no way to
identify for example the stats processors or the bgwriter.
This patch adds this functionality, in a bit of a crufty way. It creates
a kernel Event object with the name of what would be in the title. This
can be viewed using for example Process Explorer.
It's been very handy for me during both debugging and using. I haven't
figured a better way, but perhaps someone has one that's less crufty? If
not, here is at least a working patch :-)
Tom Lane [Thu, 2 Dec 2004 20:04:20 +0000 (20:04 +0000)]
Hack to work around broken linker on older NetBSD/OpenBSD/Irix assumed
that readline must depend on libcurses, but it seems more recent ones
use libtermcap instead. Allow that case.
Tom Lane [Thu, 2 Dec 2004 19:28:49 +0000 (19:28 +0000)]
Disallow the combination VACUUM FULL FREEZE for safety's sake, for the
reasons I outlined in pghackers a few days ago.
Also, undo someone's overly optimistic decision to reduce tuple state
checks from if (...) elog() to Asserts. If I trusted this code more,
I might think it was a good idea to disable these checks in production
installations. But I don't.
Bruce Momjian [Thu, 2 Dec 2004 15:32:54 +0000 (15:32 +0000)]
Rework libpq threaded SIGPIPE handling to avoid interference with
calling applications. This is done by blocking sigpipe in the libpq
thread and using sigpending/sigwait to possibily discard any sigpipe we
generated.
Neil Conway [Thu, 2 Dec 2004 06:14:50 +0000 (06:14 +0000)]
Fix a potential free() of string literal in oid2name, per report from
Michael Fuhr. Along the way, fix a bunch of accesses to uninitialized
memory, add a mystrdup() routine and use it to cleanup some code.
Neil Conway [Thu, 2 Dec 2004 04:12:12 +0000 (04:12 +0000)]
This is a little patch to correct the documentation on CVS. The URL for
downloading CVS at cyclic.com site is long defunct, and I changed the text
to not overtly recommend CVS 1.10, a now fairly old version.
Tom Lane [Thu, 2 Dec 2004 02:45:07 +0000 (02:45 +0000)]
Teach regex_fixed_prefix() the correct handling of advanced regex
escapes --- they aren't simply quoted characters. Problem noted by
Antti Salmela. Also fix problem with incorrect handling of multibyte
characters when followed by a quantifier.
Tom Lane [Thu, 2 Dec 2004 01:34:18 +0000 (01:34 +0000)]
Make some adjustments to reduce platform dependencies in plan selection.
In particular, there was a mathematical tie between the two possible
nestloop-with-materialized-inner-scan plans for a join (ie, we computed
the same cost with either input on the inside), resulting in a roundoff
error driven choice, if the relations were both small enough to fit in
sort_mem. Add a small cost factor to ensure we prefer materializing the
smaller input. This changes several regression test plans, but with any
luck we will now have more stability across platforms.
Tom Lane [Wed, 1 Dec 2004 19:00:56 +0000 (19:00 +0000)]
Change planner to use the current true disk file size as its estimate of
a relation's number of blocks, rather than the possibly-obsolete value
in pg_class.relpages. Scale the value in pg_class.reltuples correspondingly
to arrive at a hopefully more accurate number of rows. When pg_class
contains 0/0, estimate a tuple width from the column datatypes and divide
that into current file size to estimate number of rows. This improved
methodology allows us to jettison the ancient hacks that put bogus default
values into pg_class when a table is first created. Also, per a suggestion
from Simon, make VACUUM (but not VACUUM FULL or ANALYZE) adjust the value
it puts into pg_class.reltuples to try to represent the mean tuple density
instead of the minimal density that actually prevails just after VACUUM.
These changes alter the plans selected for certain regression tests, so
update the expected files accordingly. (I removed join_1.out because
it's not clear if it still applies; we can add back any variant versions
as they are shown to be needed.)
Bruce Momjian [Tue, 30 Nov 2004 19:32:24 +0000 (19:32 +0000)]
Removed:
< * Make log_min_duration_statement output when the duration is reached rather
< than when the statement completes
<
< This prints long queries while they are running, making trouble shooting
< easier. Also, it eliminates the need for log_statement because it
< would now be the same as a log_min_duration_statement of zero.
Bruce Momjian [Tue, 30 Nov 2004 18:20:35 +0000 (18:20 +0000)]
Add:
> * Make log_min_duration_statement output when the duration is reached rather
> than when the statement completes
>
> This prints long queries while they are running, making trouble shooting
> easier. Also, it eliminates the need for log_statement because it
> would now be the same as a log_min_duration_statement of zero.
Tom Lane [Tue, 30 Nov 2004 06:13:04 +0000 (06:13 +0000)]
Fix readline/libedit selection code to prefer readline over libedit
reliably (ie, regardless of which libraries they depend on). Also
make sure that we don't select headers that obviously belong to the
wrong one of the two libraries. This was discussed back around 4-Sep
but seems to have slipped through the cracks. The header selection
could be checked more closely, perhaps, but let's see if this is good
enough.
Bruce Momjian [Tue, 30 Nov 2004 05:03:47 +0000 (05:03 +0000)]
Updated TODO list description:
9c5
< Last updated: Mon Nov 29 23:33:09 EST 2004
> Last updated: Tue Nov 30 00:03:37 EST 2004
13a10,16
> #A hyphen, "-", marks changes that will appear in the upcoming 8.1 release.#
>
> Bracketed items, "[]", have more detail.
>
> This list contains all known PostgreSQL bugs and feature requests. If
> you would like to work on an item, please read the developer's FAQ
> first.
Tom Lane [Mon, 29 Nov 2004 20:11:06 +0000 (20:11 +0000)]
Update plperl to use ereport() not elog() for user-facing messages,
so that they will be translatable. Give messages some semblance of
conformance to the style guide.
Tom Lane [Mon, 29 Nov 2004 03:05:03 +0000 (03:05 +0000)]
Clean up initdb's error handling so that it prints something more
useful than just \'failed\' when there's a problem. Per gripe from
Chris Albertson.
In an unrelated change, use VACUUM FULL; VACUUM FREEZE; rather than
a single VACUUM FULL FREEZE command, to respond to my worries of a
couple days ago about the reliability of doing this in one go.
Bruce Momjian [Mon, 29 Nov 2004 03:01:54 +0000 (03:01 +0000)]
Add comment explaining possible compiler warning:
/*
* Some compilers with throw a warning knowing this test can never be
* true because off_t can't exceed the compared maximum.
*/
if (th->fileLen > MAX_TAR_MEMBER_FILELEN)
die_horribly(AH, modulename, "archive member too large for tar format\n");
Bruce Momjian [Mon, 29 Nov 2004 02:29:28 +0000 (02:29 +0000)]
Add:
> * Auto-vacuum
> o Move into the backend code
> o Scan the buffer cache to find free space or use background writer
> o Use free-space map information to guide refilling
Tom Lane [Sun, 28 Nov 2004 22:16:31 +0000 (22:16 +0000)]
Avoid scribbling on original parsetree during DECLARE CURSOR. This
prevents problems when the DECLARE is in a portal and is executed
repeatedly, as is possible in v3 protocol. Per analysis by Oliver
Jowett, though I didn't use his patch exactly.
Bruce Momjian [Sun, 28 Nov 2004 05:12:19 +0000 (05:12 +0000)]
Add description:
< information, either by name or offset from UTC
> information, either zone name or offset from UTC
>
> If the TIMESTAMP value is stored with a time zone name, interval
> computations should adjust based on the time zone rules, e.g. adding
> 24 hours to a timestamp would yield a different result from adding one
> day.
>
Peter Eisentraut [Sat, 27 Nov 2004 22:44:15 +0000 (22:44 +0000)]
Work around lack of NLS support in libpgport by making those components
who use it scan the relevant source files for their own catalog. It
creates a bit of duplicate work for translators, but it gets the job done
for now.
Tom Lane [Sat, 27 Nov 2004 00:01:02 +0000 (00:01 +0000)]
This adds mention of my latest tweak to the tsearch2/pg_trgm
integration. It is much better to create a word list of unstemmed words
than stemmed ones.
Tom Lane [Wed, 24 Nov 2004 22:56:54 +0000 (22:56 +0000)]
Install Tcl regex fixes to sync our regex engine with Tcl 8.4.8 (up from
8.4.1). This corrects some curious regex bugs, though not the greediness
issue I was hoping to find a solution for :-(
Tom Lane [Wed, 24 Nov 2004 22:44:07 +0000 (22:44 +0000)]
Our interface code for Spencer's regexp package was checking for regexp
error conditions during regexp compile, but not during regexp execution;
any sort of "can't happen" errors would be treated as no-match instead
of being reported as they should be. Noticed while trying to duplicate
a reported Tcl bug.
Tom Lane [Wed, 24 Nov 2004 19:51:05 +0000 (19:51 +0000)]
A client_encoding specification coming from the connection request has
to be processed by GUC before InitPostgres, because any required lookup
of the encoding conversion function has to be done during InitializeClientEncoding.
So, I broke this last week by moving GUC processing to after InitPostgres :-(.
What we can do as a compromise is process non-SUSET variables during
command line scanning (the same as before), and postpone the processing
of only SUSET variables. None of the SUSET variables need to be set
before InitPostgres.
Neil Conway [Wed, 24 Nov 2004 04:58:42 +0000 (04:58 +0000)]
Trivial fix for a bug introduced in r1.94 of help.c: we want to only
include "\s" in \? output when readline is enabled, but that commit
supressed "\s" whether readline was enabled or not.
Tom Lane [Tue, 23 Nov 2004 00:21:24 +0000 (00:21 +0000)]
Further plperl cleanup: be more paranoid about checking the type of
data returned from Perl. Consolidate multiple bits of code to convert
a Perl hash to a tuple, and drive the conversion off the keys present
in the hash rather than the tuple column names, so we detect error if
the hash contains keys it shouldn't. (This means keys not in the hash
will silently default to NULL, which seems ok to me.) Fix a bunch of
reference-count leaks too.
Tom Lane [Mon, 22 Nov 2004 20:31:53 +0000 (20:31 +0000)]
Try to instill some sanity in plperl's function result processing.
Get rid of static variables for SETOF result, don't crash when called
from non-FROM context, eliminate dead code, etc.
Tom Lane [Sun, 21 Nov 2004 22:57:00 +0000 (22:57 +0000)]
Fix rounding problem in dynahash.c's decision about when the target
fill factor has been exceeded. We usually run with ffactor == 1, but
the way the test was coded, it wouldn't split a bucket until the actual
fill factor reached 2.0, because of use of integer division. Change
from > to >= so that it will split more aggressively when the table
starts to get full.
Tom Lane [Sun, 21 Nov 2004 22:48:01 +0000 (22:48 +0000)]
Reduce the default size of the PortalHashTable in order to save a
few cycles during transaction exit. A typical session probably
wouldn't have as many as half a dozen portals open at once, so the
original value of 64 seems far larger than needed.
Tom Lane [Sun, 21 Nov 2004 22:27:34 +0000 (22:27 +0000)]
While fixing plperl and pltcl, I realized plpgsql wasn't doing
subtransactions quite right either: the ReleaseCurrentSubTransaction
call should occur inside the PG_TRY, so that the proper path is taken
if an error occurs during subtransaction commit. This assumes that
AbortSubTransaction can cope with the state left behind if
CommitSubTransaction fails partway through, but we were already
requiring that.