Re: SegFault on 9.6.14
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Amit Kapila <amit.kapila16@gmail.com>
Cc: Robert Haas <robertmhaas@gmail.com>,
Alvaro Herrera <alvherre@2ndquadrant.com>,
Thomas Munro <thomas.munro@gmail.com>,
vignesh C <vignesh21@gmail.com>,
Jerry Sievers <gsievers19@comcast.net>,
Tomas Vondra <tomas.vondra@2ndquadrant.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2019-08-13T15:58:52Z
Lists: pgsql-hackers
Amit Kapila <amit.kapila16@gmail.com> writes: > On Tue, Aug 13, 2019 at 3:18 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: >> To clarify my position --- I think it's definitely possible to improve >> the situation a great deal. We "just" have to pass down more information >> about whether rescans are possible. > Right, you have speculated above that it is possible via adding some > eflag bits. Can you please describe a bit more about that idea, so > that somebody else can try to write a patch? Well, there are two components to solving this problem: 1. What are we going to do about the executor's external API? Right now, callers of ExecutorStart don't have to say whether they might call ExecutorRewind. We need some way for callers to make a binding promise that they won't do any such thing. Perhaps we just want to invent another flag that's like EXEC_FLAG_BACKWARD, but it's not clear how it should interact with the existing "soft" REWIND flag. Nor do I know how far up the call stack will we have to make changes to make it possible to promise as much as we can -- for instance, will we have to adapt the SPI interfaces? 2. What happens inside ExecutorStart in response to such promises? I imagine that we translate them into additional eflags bits that get passed down to node init functions, possibly with modification (e.g., nodeNestloop.c would have to revoke the no-rescans promise to its inner input). You'd need to work out what is the most convenient set of conventions (positive or negative sense of the flag bits, etc), and go through all the non-leaf node types to determine what they can pass down. (BTW, unless I'm missing something, there's not currently any enforcement of EXEC_FLAG_BACKWARD, ie a caller can fail to pass that and then try to back up anyway. We probably want to improve that situation, and also enforce this new flag about ExecutorRewind.) The reason I'm dubious about back-patching this is that each of these things seems likely to affect external code. Point 1 could affect external callers of the executor, and point 2 is likely to have consequences for FDWs and custom-scan providers. Maybe we can set things up so that everything defaults in a safe direction for unchanged code, but I don't want to contort the design just to do that. regards, tom lane
Commits
-
Don't shut down Gather[Merge] early under Limit.
- 1ad0df67c790 9.6.17 landed
- f7ae68aacd9d 10.12 landed
- d0ccfa9d6a3d 11.7 landed
- 1cc3a90c7551 12.2 landed
- 080313f8296f 13.0 landed
-
Prohibit shutting down resources if there is a possibility of back up.
- 2cd0acfdade8 12.0 cited
-
Fix buffer usage stats for parallel nodes.
- 19df1702f5c5 9.6.10 cited
- 85c9d3475e4f 12.0 cited
-
Fix crashes on plans with multiple Gather (Merge) nodes.
- fd7c0fa732d9 11.0 cited
-
Separate reinitialization of shared parallel-scan state from ExecReScan.
- 41b0dd987d44 11.0 cited