On Thu, Oct 15, 2015 at 04:30:01PM +0530, Amit Kapila wrote: > On Mon, Oct 12, 2015 at 9:16 PM, Robert Haas <robertmh...@gmail.com> wrote: > > plpgsql_param_fetch() assumes that it can detect whether it's being > > called from copyParamList() by checking whether params != > > estate->paramLI. I don't know why this works, but I do know that this > > test fails to detect the case where it's being called from > > SerializeParamList(), which causes failures in exec_eval_datum() as > > predicted. Calls from SerializeParamList() need the same treatment as > > calls from copyParamList() because it, too, will try to evaluate every > > parameter in the list. > > From what I understood by looking at code in this area, I think the check > params != estate->paramLI and code under it is required for parameters > that are setup by setup_unshared_param_list(). Now unshared params > are only created for Cursors and expressions that are passing a R/W > object pointer; for cursors we explicitly prohibit the parallel > plan generation > and I am not sure if it makes sense to generate parallel plans for > expressions > involving R/W object pointer, if we don't generate parallel plan where > expressions involve such parameters, then SerializeParamList() should not > be affected by the check mentioned by you.
The trouble comes from the opposite direction. A setup_unshared_param_list() list is fine under today's code, but a shared param list needs more help. To say it another way, parallel queries that use the shared estate->paramLI need, among other help, the logic now guarded by "params != estate->paramLI". -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers