I hope to do further review of the patch later this week, but I wanted to at least comment on this piece:
On Wed, Jan 20, 2021 at 2:48 AM Peter Eisentraut <peter.eisentr...@enterprisedb.com> wrote: > > On 2020-12-23 15:33, Simon Riggs wrote: > > Poolers such as pgbouncer would then be able to connect transaction > > mode pools by setting transaction_cleanup=on at time of connection, > > avoiding any need to issue a server_reset_query, removing the DISCARD > > ALL command from the normal execution path, while still achieving the > > same thing. > > PgBouncer does not send DISCARD ALL in transaction mode. There is a > separate setting to do that, but it's not the default, and it's more of > a workaround for bad client code. So I don't know if this feature would > be of much use for PgBouncer. Other connection poolers might have other > opinions. Yes, to have server_reset_query apply in transaction pooling mode you have to additionally configure pgbouncer with server_reset_query_always enabled. I'd mildly take issue with "a workaround for bad client code". Yes, clients in transaction pooling mode shouldn't issue (for example) `SET ...`, but there's no way I'm aware of in Postgres to prevent session-specific items like those GUCs from being set by a given user, so I view it more like a safeguard than a workaround. In our setup we have server_reset_query_always=1 as such a safeguard, because it's too easy for application code to update, for example, statement_timeout to disastrous results. But we also work to make sure those don't happen (or get cleaned up if they happen to slip in). An alternative approach that occurred to me while typing this reply: a setting in Postgres that would disallow setting session level GUCs (i.e., enforce `SET LOCAL` transaction level usage instead) would remove a large chunk of our need to set server_reset_query_always=1 (and more interestingly it'd highlight when broken code gets pushed). But even with that, I see some value in the proposed setting since there is additional session state beyond GUCs. James