>>>>> "Robert" == Robert Haas <[email protected]> writes:
Robert> I don't see a reason why MakeTransitionCaptureState needs to
Robert> force the tuplestores into TopTransactionContext or make them
Robert> owned by TopTransactionResourceOwner.
Nor do I, and I'm pretty sure it's leaking memory wholesale within a
transaction if you have aborted subxacts.
e.g. a few iterations of this, on a table with an appropriate trigger:
savepoint s1;
insert into foo
select i, case when i < 100000 then repeat('a',100)
else repeat('a',1/(i-100000)) end
from generate_series(1,100000) i;
rollback to s1;
This is a bit contrived of course but it shows that there's missing
cleanup somewhere, either in the form of poor choice of context or
missing code in the subxact cleanup.
Robert> I mean, it was like that before, but afterTriggers is a global
Robert> variable and, potentially, there could still be a pointer
Robert> accessible through it to a tuplestore linked from it even after
Robert> the corresponding subtransaction aborted, possibly causing some
Robert> cleanup code to trip and fall over. But that can't be used to
Robert> justify this case, because the TransitionCaptureState is only
Robert> reached through the PlanState tree; if that goes away, how is
Robert> anybody going to accidentally follow a pointer to the
Robert> now-absent tuplestore?
For per-row triggers with transition tables, a pointer to the transition
capture state ends up in the shared-data record in the event queue?
--
Andrew.
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers