Tom Lane [Wed, 16 Jan 2002 20:29:02 +0000 (20:29 +0000)]
TOAST needs to do at least minimal time-qual checking in order not to
mess up after an aborted VACUUM FULL, per today's pghackers discussion.
Add a suitable HeapTupleSatisfiesToast routine. Remove useless special-
case test in HeapTupleSatisfiesVisibility macro for xmax =
BootstrapTransactionId; perhaps that was needed at one time, but it's
a waste of cycles now, not to mention actively wrong for SnapshotAny.
Along the way, add some much-needed comments to tqual.c, and simplify
toast_fetch_datum, which no longer needs to assume it may see chunks
out-of-order.
Tom Lane [Wed, 16 Jan 2002 17:34:42 +0000 (17:34 +0000)]
Fix init_irels to close the pg_internal.init file before returning.
This saves one open file descriptor per backend, and avoids an
annoying NOTICE on Cygwin (which has trouble deleting open files).
Bug appears to date back to original coding of init_irels, circa 1992.
Tom Lane [Tue, 15 Jan 2002 22:33:20 +0000 (22:33 +0000)]
If we fail to rename pg_internal.init into place, delete the useless
temporary file. This seems to be a known failure mode under Cygwin,
so we might as well expend the extra line of code to be tidy.
Tom Lane [Tue, 15 Jan 2002 22:14:17 +0000 (22:14 +0000)]
Add more sanity-checking to PageAddItem and PageIndexTupleDelete,
to prevent spreading of corruption when page header pointers are bad.
Merge PageZero into PageInit, since it was never used separately, and
remove separate memset calls used at most other PageInit call points.
Remove IndexPageCleanup, which wasn't used at all.
Tom Lane [Tue, 15 Jan 2002 16:52:47 +0000 (16:52 +0000)]
Fix typo that caused equalTriggerDescs() to return false in cases where
the two trigger sets were logically equal, but not in the same order.
Caught by Holger Krug (hkrug@rationalizer.com).
Barry Lind [Tue, 15 Jan 2002 07:37:33 +0000 (07:37 +0000)]
Applied patch submitted by Ryouichi Matsuda (r-matuda@sra.co.jp) that fixed a problem with leading zeros being lost on fractional seconds when setting a timestamp value on a PreparedStatement.
Barry Lind [Tue, 15 Jan 2002 06:55:13 +0000 (06:55 +0000)]
Applied patch from Ryouichi Matsuda <r-matuda@sra.co.jp> where the jdbc
driver was not properly handling timestamptz datatype when using the
getObject() method on ResultSet. Fix adds this datatype to the object mappings.
Tom Lane [Mon, 14 Jan 2002 17:55:57 +0000 (17:55 +0000)]
Reduce severity of 'XLogFlush: request is not satisfied' error condition,
per my proposal of a couple days ago. This will eliminate the unable-
to-restart-database class of problem that we have seen reported half a
dozen times with 7.1.*.
Repair bugs in declarations of routines to add timestamptz and interval.
Thanks to Bruce for spotting it and Tom Lane for diagnosing it.
Since horology test output is changing anyway, add some date/time input
tests to horology.sql. Some of these should move to the tests for the
individual data types, and we perhaps should add an entire new test
for "timezone" to allow manipulating the current time zone without
risking damage to the results of other tests.
Tom Lane [Fri, 11 Jan 2002 23:21:55 +0000 (23:21 +0000)]
Fix pg_dump to read-lock all tables to be dumped as soon as it's read
their names from pg_class. This considerably reduces the window wherein
someone could DROP or ALTER a table that pg_dump is intending to dump.
Not a perfect solution, but definitely an improvement. Per complaints
from Marc Fournier; patch by Brent Verner with some kibitzing by Tom Lane.
Tom Lane [Fri, 11 Jan 2002 20:07:03 +0000 (20:07 +0000)]
VACUUM must make sure that a HEAP_MARKED_FOR_UPDATE tuple gets marked
as either HEAP_XMAX_COMMITTED or HEAP_XMAX_INVALID once the updating
transaction is gone. Otherwise some other transaction may come along
and try to test the commit status of t_xmax later --- which could be
after VACUUM has recycled the CLOG status for that xact. Bug introduced
in post-beta4 bug fix.
Tom Lane [Fri, 11 Jan 2002 18:16:04 +0000 (18:16 +0000)]
Fix sequence creation to set the t_xmin of a sequence's tuple to
FrozenTransactionId, not the XID of the creating transaction. Without
this it's possible for a reference to a long-gone CLOG record to occur,
per Christian Meunier's bug report of 10-Jan-02. Worse, the sequence
tuple would become invisible to SELECTs after 2 billion transactions.
Since the fix is applied during sequence creation it does not help
existing databases, unless you drop and recreate every sequence.
However, we intend to force initdb for 7.2RC1 anyway, to fix a pg_proc
error, so I see no need to do more for this problem.
Tom Lane [Wed, 9 Jan 2002 23:38:06 +0000 (23:38 +0000)]
Describe type casts under the heading of Value Expressions, and explain
the difference between a run-time type cast and casting a literal string
to a specific type. Minor editorial work in same area.
Tom Lane [Mon, 7 Jan 2002 16:33:00 +0000 (16:33 +0000)]
Tweak LWLock algorithms so that an awakened waiter for a lock is not
granted the lock when awakened; the signal now only means that the lock
is potentially available. The waiting process must retry its attempt
to get the lock when it gets to run. This allows the lock releasing
process to re-acquire the lock later in its timeslice. Since LWLocks
are usually held for short periods, it is possible for a process to
acquire and release the same lock many times in a timeslice. The old
spinlock-based implementation of these locks allowed for that; but the
original coding of LWLock would force a process swap for each acquisition
if there was any contention. Although this approach reopens the door to
process starvation (a waiter might repeatedly fail to get the lock),
the odds of that being a big problem seem low, and the performance cost
of the previous approach is considerable.
Tom Lane [Sun, 6 Jan 2002 21:40:02 +0000 (21:40 +0000)]
If we fail to fork a new backend process, (try to) report the failure
to the client before closing the connection. Before 7.2 this was done
correctly, but new code would simply close the connection with no report
to the client.