Re: Add PortalDrop in exec_execute_message
Alvaro Herrera <alvherre@alvh.no-ip.org>
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Yura Sokolov <y.sokolov@postgrespro.ru>, pgsql-hackers@lists.postgresql.org
Date: 2021-06-09T19:34:53Z
Lists: pgsql-hackers
On 2021-Jun-09, Tom Lane wrote: > I wrote: > > It turns out that the problem is specific to SELECT FOR UPDATE, and > > it happens because nodeLockRows is not careful to shut down the > > EvalPlanQual mechanism it uses before returning NULL at the end of > > a scan. If EPQ has been fired, it'll be holding a tuple slot > > referencing whatever tuple it was last asked about. The attached > > trivial patch seems to take care of the issue nicely, while adding > > little if any overhead. (A repeat call to EvalPlanQualEnd doesn't > > do much.) Thanks for researching that -- good find. > BTW, to be clear: I think Alvaro's change is also necessary. > If libpq is going to silently do something different in pipeline > mode than it does in normal mode, it should strive to minimize > the semantic difference. exec_simple_query includes a PortalDrop, > so we'd best do the same in pipeline mode. But this LockRows > misbehavior would be visible in other operating modes anyway. Agreed. I'll get it pushed after the patch I'm currently looking at. -- Álvaro Herrera 39°49'30"S 73°17'W
Commits
-
Add 'Portal Close' message to pipelined PQsendQuery()
- 4efcf47053ea 14.0 landed
-
Shut down EvalPlanQual machinery when LockRows node reaches the end.
- bb4aed46a5ae 14.0 landed
-
Update libpq to make new features of FE/BE protocol available to
- efc3a25bb02a 7.4.1 cited
-
Extended query protocol: parse, bind, execute, describe FE/BE messages.
- 16503e6fa4a1 7.4.1 cited