Tom Lane [Thu, 4 Sep 2003 22:06:27 +0000 (22:06 +0000)]
Reimplement hash index locking algorithms, per my recent proposal to
pghackers. This fixes the problem recently reported by Markus KrÌutner
(hash bucket split corrupts the state of scans being done concurrently),
and I believe it also fixes all the known problems with deadlocks in
hash index operations. Hash indexes are still not really ready for prime
time (since they aren't WAL-logged), but this is a step forward.
Tom Lane [Tue, 2 Sep 2003 22:10:16 +0000 (22:10 +0000)]
In _bt_check_unique() loop, don't bother applying _bt_isequal() to
killed items; just skip to the next item immediately. Only check for
key equality when we reach a non-killed item or the end of the index
page. This saves key comparisons when there are lots of killed items,
as for example in a heavily-updated table that's not been vacuumed lately.
Seems to be a win for pgbench anyway.
Tom Lane [Tue, 2 Sep 2003 19:04:12 +0000 (19:04 +0000)]
Cause standalone backend (including bootstrap case) to read the GUC
config file if it exists. This was already discussed as being a good
idea, and now seems the cleanest way to deal with initdb-time failures
on machines with small SHMMAX. (The submitted patches instead modified
initdb.sh to pass the correct sizing parameters, but that would still
leave standalone backends prone to failure later. An admin who needs
to use a standalone backend has enough trouble already, he shouldn't
have to manually configure its shmem settings...)
Tom Lane [Tue, 2 Sep 2003 18:13:32 +0000 (18:13 +0000)]
Several fixes for hash indexes that involve changing the on-disk index
layout; therefore, this change forces REINDEX of hash indexes (though
not a full initdb). Widen hashm_ntuples to double so that hash space
management doesn't get confused by more than 4G entries; enlarge the
allowed number of free-space-bitmap pages; replace the useless bshift
field with a useful bmshift field; eliminate 4 bytes of wasted space
in the per-page special area.
Tom Lane [Tue, 2 Sep 2003 02:18:38 +0000 (02:18 +0000)]
Rewrite hashbulkdelete() to make it amenable to new bucket locking
scheme. A pleasant side effect is that it is *much* faster when deleting
a large fraction of the indexed tuples, because of elimination of
redundant hash_step activity induced by hash_adjscans. Various other
continuing code cleanup.
libpq, talking to an old server, should assume SQL_ASCII as the default
client encoding, because that is what the server will actually use (not
the server encoding).
Tom Lane [Mon, 1 Sep 2003 20:26:34 +0000 (20:26 +0000)]
Preliminary cleanup for hash index code (doesn't attack the locking problem
yet). Fix a couple of bugs that would only appear if multiple bitmap pages
are used, including a buffer reference leak and incorrect computation of bit
indexes. Get rid of 'overflow address' concept, which accomplished nothing
except obfuscating the code and creating a risk of failure due to limited
range of offset field. Rename some misleadingly-named fields and routines,
and improve documentation.
Tom Lane [Mon, 1 Sep 2003 20:24:49 +0000 (20:24 +0000)]
Add some internals documentation for hash indexes, including an
explanation of the remarkably confusing page addressing scheme.
The file also includes my planned-but-not-yet-implemented revision
of the hash index locking scheme.
Tom Lane [Thu, 28 Aug 2003 20:21:34 +0000 (20:21 +0000)]
pg_dump and pg_restore -r had managed to diverge on the ordering of
different object types. Fix, and centralize logic to try to prevent
the same mistake in future.
Tom Lane [Thu, 28 Aug 2003 18:59:06 +0000 (18:59 +0000)]
Ensure that FK constraints are dumped after primary/unique constraints,
rather than relying on OID order of pg_constraint entries. Per gripe
from Greg Stark.
Tom Lane [Wed, 27 Aug 2003 23:29:29 +0000 (23:29 +0000)]
Adjust date/time input parsing code to correctly distinguish the four
SQLSTATE error codes required by SQL99 (invalid format, datetime field
overflow, interval field overflow, invalid time zone displacement value).
Also emit a HINT about DateStyle in cases where it seems appropriate.
Per recent gripes.
Tom Lane [Tue, 26 Aug 2003 21:15:27 +0000 (21:15 +0000)]
Use separate SQLSTATE codes for file not found/file exists, rather than
lumping them into ERRCODE_UNDEFINED_OBJECT/ERRCODE_DUPLICATE_OBJECT.
This seems reasonable since 'object' was meant to refer to 'object in the
database' and a file is outside the database. Per request from Dave
Cramer.
Bruce Momjian [Tue, 26 Aug 2003 18:32:23 +0000 (18:32 +0000)]
This patch adds a new regression test for the UPDATE command. Right
now all that is tested is Rod Taylor's recent addition to allow
this syntax:
UPDATE ... SET <col> = DEFAULT;
If anyone else would like to add more UPDATE tests, go ahead --
I just wanted to write a test for the above functionality, and
couldn't see an existing test that it would be appropriate
to add to.
Bruce Momjian [Tue, 26 Aug 2003 15:38:42 +0000 (15:38 +0000)]
Attached is a (very small) patch to make analyze display some
interesting info in verbose mode about the analyzed relation (pages,
rows per block and rows).
Tom Lane [Tue, 26 Aug 2003 15:38:25 +0000 (15:38 +0000)]
Mop-up for previous change to determine default shared_buffers and
max_connections at initdb time. Get rid of DEF_NBUFFERS and DEF_MAXBACKENDS
macros, which aren't doing anything useful anymore, and put more likely
defaults into postgresql.conf.sample.
Barry Lind [Tue, 26 Aug 2003 06:50:39 +0000 (06:50 +0000)]
Attempt to fix setMaxFieldSize() logic that was checked in yesterday.
I think this should fix the problem, but since I don't have a reproducable test
case, I can't be sure. This problem is reported by Kim Ho of redhat, who will
test this fix. This also includes a test case for the original functionality.
Tom Lane [Mon, 25 Aug 2003 23:30:27 +0000 (23:30 +0000)]
Add the Brazilian time zone abbreviations BRT, BRST, FNT, FNST.
ACT and ACST were already present. AMT and AMST conflict with the
existing entries for Armenia; no change there for the moment.
Tom Lane [Mon, 25 Aug 2003 22:47:34 +0000 (22:47 +0000)]
Allow parsing of time and timetz inputs to accept the documented input
syntax '040506' for '04:05:06', as well as '0405' for '04:05:00'. This
has been broken since 7.2 but was only recently complained of.
Tom Lane [Mon, 25 Aug 2003 16:13:27 +0000 (16:13 +0000)]
Refactor code so that to_date() does not call to_timestamp() and then
perform a timestamp-to-date coercion. Instead both routines share a
subroutine that delivers the parsing result as a struct tm. This avoids
problems with timezone dependency of to_date's result, and should be
at least marginally faster too.
Barry Lind [Sun, 24 Aug 2003 22:10:09 +0000 (22:10 +0000)]
Applied patches from Oliver Jowett to fix the following bugs:
- adds a finalizer method to AbstractJdbc1Statement to clean up in the case of
poor user code which fails to close the statement object
- fix ant build file to correctly detect dependencies across jdbc1/jdbc2/jdbc3
- fix a coupld of server prepared statement bugs and added regression test for
them
Applied patch from Kim Ho:
- adds support for get/setMaxFieldSize().
Also fixed build.xml to provide a better error message in the event that an
older version of the driver exists in the classpath when trying to build.
Tom Lane [Fri, 22 Aug 2003 20:34:33 +0000 (20:34 +0000)]
Tweak grammar to use FastAppend rather than lappend when constructing
expr_lists. This appears to be the only remaining O(N^2) bottleneck
in processing many-way 'x IN (a,b,c,...)' conditions.
Tom Lane [Fri, 22 Aug 2003 20:26:43 +0000 (20:26 +0000)]
Tweak processing of multiple-index-scan plans to reduce overhead when
handling many-way scans: instead of re-evaluating all prior indexscan
quals to see if a tuple has been fetched more than once, use a hash table
indexed by tuple CTID. But fall back to the old way if the hash table
grows to exceed SortMem.