On Wed, Aug 12, 2020 at 8:11 PM Andy Fan <zhihui.fan1...@gmail.com> wrote:
> > > On Wed, Aug 12, 2020 at 5:54 PM Dave Cramer <davecramer@postgres.rocks> > wrote: > >> >> >> >> On Tue, 11 Aug 2020 at 22:33, Andy Fan <zhihui.fan1...@gmail.com> wrote: >> >>> >>> >>> On Mon, Jul 27, 2020 at 11:57 AM Andy Fan <zhihui.fan1...@gmail.com> >>> wrote: >>> >>>> >>>>> 2. Currently I want to add a new GUC parameter, if set it to true, >>>>> server will >>>>> create a holdable portal, or else nothing changed. Then let the user >>>>> set >>>>> it to true in the above case and reset it to false afterward. Is >>>>> there any issue >>>>> with this method? >>>>> >>>>> >>>> I forget to say in this case, the user has to drop the holdable >>>> portal explicitly. >>>> >>>> >>>> >>> After some days's hack and testing, I found more issues to support the >>> following case >>> >>> rs = prepared_stmt.execute(1); >>> while(rs.next()) >>> { >>> // do something with the result (mainly DML ) >>> conn.commit(); or conn.rollback(); >>> >>> // commit / rollback to avoid the long lock holding. >>> } >>> >>> The holdable portal is still be dropped in transaction >>> aborted/rollbacked case since >>> the HoldPortal doesn't happens before that and "abort/rollabck" means >>> something >>> wrong so it is risk to hold it again. What I did to fix this issue is >>> HoldPortal just after >>> we define a Holdable portal. However, that's bad for performance. >>> Originally, we just >>> needed to scan the result when needed, now we have to hold all the >>> results and then fetch >>> and the data one by one. >>> >>> The above user case looks reasonable to me IMO, I would say it is kind >>> of "tech debt" >>> in postgres. To support this completely, looks we have to decouple the >>> snapshot/locking >>> management with transaction? If so, it looks like a huge change. I >>> wonder if anybody >>> tried to resolve this issue and where do we get to that point? >>> >>> -- >>> Best Regards >>> Andy Fan >>> >> >> >> I think if you set the fetch size the driver will use a named cursor and >> this should work >> >> > If the drivers can use the tempfile as an extra store, then things will be > better than the server. > Maybe not much better, just the same as each other. Both need to store all of them first and fetch them from the temp store again. -- Best Regards Andy Fan