Thread: Re: postgres_fdw: Provide better emulation of READ COMMITTED behavior

Robert Haas <robertmhaas@gmail.com> writes:

> On Thu, Dec 5, 2024 at 4:41 AM Etsuro Fujita <etsuro.fujita@gmail.com> wrote:
>> Comments welcome!  Maybe I am missing something, though.
>
> I have a hard time seeing how this would work if cursors are in use on
> the main server. Say I do this:
>
> DECLARE foo CURSOR FOR SELECT * FROM ft1 UNION ALL SELECT * FROM ft2;
> ...fetch some rows from cursor foo but few enough that we only scan ft1...
> ...do something that causes a snapshot refresh like issue another query...
> ...fetch more rows from cursor foo until we start scanning ft2...

Apart from the above issue, what do you think about that we are using a
'SELECT pg_catalog.pg_refresh_snapshot()' to let the remote do the
refresh_snapshot VS 'a new message type for this'?  There are lots of
things happen in the 'SELECT' way like 'a extra network communication',
'a complete parser-planner-executor workflow.' With a new message type
for this, we can send the message character with the next query
together. if so, can the two overheads removed?


--
Best Regards
Andy Fan




Re: postgres_fdw: Provide better emulation of READ COMMITTED behavior

From
Etsuro Fujita
Date:
On Fri, Dec 6, 2024 at 7:50 PM Andy Fan <zhihuifan1213@163.com> wrote:
> Apart from the above issue, what do you think about that we are using a
> 'SELECT pg_catalog.pg_refresh_snapshot()' to let the remote do the
> refresh_snapshot VS 'a new message type for this'?  There are lots of
> things happen in the 'SELECT' way like 'a extra network communication',
> 'a complete parser-planner-executor workflow.' With a new message type
> for this, we can send the message character with the next query
> together. if so, can the two overheads removed?

I think it might be a good idea to extend simple/extend query
protocols that way, but even if so, I would like to leave that for
future work, because even without that, I think this is still an
improvement, and I do not want to set the goal for the first cut too
high.

Having said that, if the next query uses simple query protocol, we can
avoid the extra communication by sending the two queries in a single
function call.  I will do that in the next version.

Thanks for the comment!

Best regards,
Etsuro Fujita