Tom Lane wrote:
> "Florian G. Pflug" <fgp@phlo.org> writes:
>> I came up with the following plan for both inval events and locks
>> .) Store two flags in the commit record of a transaction, for
>> "transaction generated inval events" and "transaction held an
>> access exlusive lock".
>> .) Upon replay, block until no transactions are running (for
>> "transaction held an exclusive lock") before replaying the
>> record, or flush the caches after replaying it (for
>> "transaction generated inval events").
>
> This does not work; the lock has to be taken earlier than that.
> (See for instance VACUUM's truncate calls.) Not to mention that
> you have converted "exclusive lock on one table" to "exclusive lock
> on every table", which is even worse than the idea of converting
> per-table cache flushes to system-wide ones.
I'll check what VACUUM is doing.. I primarily had CLUSTER and TRUNCATE
in mind.
That "exclusive lock on one table becomes exclusive lock on all tables"
issue can (as I wrote in the part of my mail that you sniped) be
solved I think by storing a list of OIDs instead of a flag for the
locks and inval events.
greetings, Florian Pflug