Re: Add PortalDrop in exec_execute_message

Yura Sokolov <y.sokolov@postgrespro.ru>

From: Yura Sokolov <y.sokolov@postgrespro.ru>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2021-05-25T00:58:43Z
Lists: pgsql-hackers
Tom Lane писал 2021-05-21 21:23:
> Yura Sokolov <y.sokolov@postgrespro.ru> writes:
>> I propose to add PortalDrop at the 'if (completed)' branch of
>> exec_execute_message.
> 
> This violates our wire protocol specification, which
> specifically says
> 
>     If successfully created, a named portal object lasts till the end 
> of
>     the current transaction, unless explicitly destroyed. An unnamed
>     portal is destroyed at the end of the transaction, or as soon as 
> the
>     next Bind statement specifying the unnamed portal as destination is
>     issued. (Note that a simple Query message also destroys the unnamed
>     portal.)
> 
> I'm inclined to think that your complaint would be better handled
> by having the client send a portal-close command, if it's not
> going to do something else immediately.

I thought about it as well. Then, if I understand correctly,
PQsendQueryGuts and PQsendQueryInternal in pipeline mode should send
"close portal" (CP) message after "execute" message, right?

regards,
Sokolov Yura



Commits

  1. Add 'Portal Close' message to pipelined PQsendQuery()

  2. Shut down EvalPlanQual machinery when LockRows node reaches the end.

  3. Update libpq to make new features of FE/BE protocol available to

  4. Extended query protocol: parse, bind, execute, describe FE/BE messages.