Good. So we seem to agree that GUCS are transactional?
The logic depends on transactions and on nesting level (nesting doesn't depends on transactions only)
Yep, it probably also happens with LOCAL which hides the previous value and restores the initial one when exiting.
void AtEOXact_GUC(bool isCommit, int nestLevel)
Probably we should to use CallXactCallbacks instead - then is not a performance impact when there are not transactional variables.
I do not understand your point.
It is on critical path, so every check increase computer time for transaction end.
Regards
Pavel
It is a very good thing that GUCs are transactional, and this should not be changed, it is a useful feature! Much more useful than non transactional.
Personally, I never used - although I using often nesting
regards
Pavel
Moreover I think that transactional is expensive when writing things to disk, but in memory the overhead is reduced, and if you need it then you need it.