Ok, I've finally coded solutions to most problems regarding nested
transactions. This means:
- reversing for the lock manager, catcache, relcache, buffer manager,
asynchronous notifies, storage manager.
- transaction block state support, including appropiate XLog recording
- pg_subtrans subsystem (including changing state from SUBTRANS
COMMITTED to COMMITTED when appropiate). Also pg_clog XLog recovery
was handed to SLRU so pg_subtrans and pg_clog share a rmgr identity.
- visibility rules.
I'm missing one item: deferred triggers. The problem with this is that
the deftrig queue is not implemented using normal Lists, so there's no
efficient way to reassign to the parent when the subtransaction commits.
Also I'm not sure what should happen to the "immediate" pointer --- a
subtransaction should have it's own private copy, or it should inherit
the parent's? Please whoever implemented this speak up (Stephan
Szabo?), as I'm not sure of the semantics.
I have tested it and it passes all regression tests (including ones I
added), plus some more tests I threw at it mainly for concurrency.
Everything behaves as expected. At this time I'd like to have it
reviewed by the critic eye of the committers, and tested by whoever
would be using it.
I'm open for comments and suggestions and general input. Thank you.
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
La web junta la gente porque no importa que clase de mutante sexual seas,
tienes millones de posibles parejas. Pon "buscar gente que tengan sexo con
ciervos incendiánse", y el computador dirá "especifique el tipo de ciervo"
pgsql-hackers by date
|Next:||From: Tom Lane||Date: 2004-05-26 22:17:55|
|Subject: Re: SELECT * FROM <table> LIMIT 1; is really slow |
|Previous:||From: David Blasby||Date: 2004-05-26 21:55:27|
|Subject: Re: SELECT * FROM <table> LIMIT 1; is really slow|