Subject: Re: pgsql: Harden new test case against force_parallel_mode = regress.

From: Tom Lane <[email-masked]>
Date: Fri, 03 Mar 2023 12:46:42 -0500

Robert Haas <[email-masked]> writes:
> On Fri, Mar 3, 2023 at 11:37 AM Tom Lane <[email-masked]> wrote:
>> +ERROR:  role "regress_psql_user" does not exist
>> +CONTEXT:  while setting parameter "session_authorization" to "regress_psql_user"

> Oh, that's interesting (and sad). A parallel worker has a "startup
> transaction" that is used to restore library and GUC state, and then
> after that transaction commits, it starts up a new transaction that
> uses the same snapshot and settings as the transaction in the parallel
> leader. So the problem here is that the startup transaction can't see
> the uncommitted work of some unrelated (as far as it knows)
> transaction, and that prevents restoring the session_authorization
> GUC.

Got it.

> That startup transaction has broken stuff before, and it would be nice
> to get rid of it. Unfortunately, I don't remember right now why we
> need it in the first place. I'm fairly sure that if you load the
> library and GUC state without any transaction, that doesn't work,
> because a bunch of important processing gets skipped. And I think if
> you try to do those things in the "real" transaction that fails for
> some reason too, maybe that there's no guarantee that all the relevant
> GUCs can be changed at that point, but I'm fuzzy on the details at the
> moment.

Couldn't we install the leader's snapshot into both transactions?

			regards, tom lane

---

From: Robert Haas <[email-masked]>
Date: Fri, 3 Mar 2023 12:56:23 -0500

> Couldn't we install the leader's snapshot into both transactions?

Yeah, maybe that would Just Work. Not sure.

-- 
Robert Haas
EDB: http://www.enterprisedb.com

---

From: Tom Lane <[email-masked]>
Date: Fri, 03 Mar 2023 13:03:31 -0500

> Yeah, maybe that would Just Work. Not sure.

Well, IIUC the worker is currently getting a brand new snapshot
for its startup transaction, which is exactly what you said upthread
it should never do.  Seems like that could have more failure modes
than just this one.

			regards, tom lane