I wrote: > The only readily-reachable error case in BeginInternalSubTransaction > is this specific one about IsInParallelMode, which was added later > than the original design and evidently with not a lot of thought or > testing. The comment for it speculates about whether we could get > rid of it, so I wonder if our thoughts about this ought to go in that > direction.
After thinking a bit more I wonder why we need that error check at all. Why isn't it sufficient to rely on GetNewTransactionId()'s check that throws an error if a parallelized subtransaction tries to obtain an XID? I don't see why we'd need to "synchronize transaction state" about anything that never acquires an XID. regards, tom lane