Hello, Robert: I've taken the liberty of cc'ing you since you worked on most of this code. My apologies if that wasn't appropriate.
While working on "Parallelize correlated subqueries that execute within each worker" [1] I noticed that while in the other call to set_cheapest (for partially_grouped_rel) in the same function the call after gather_grouping_paths(root, partially_grouped_rel) is not similarly guarded with a check for a NIL pathlist on partially_grouped_rel. I don't see any inherent reason why we must always assume that gather_grouping_paths will always result in having at least one entry in pathlist. If, for example, we've disabled incremental sort and the cheapest partial path happens to already be sorted, then I don't believe we'll add any paths. And if that happens then set_cheapest will error with the message "could not devise a query plan for the given query". So I propose we add a similar guard to this call point. I could be convinced that this should be simply part of the patch in the other thread, but it seemed to me it'd be worth considering independently because as noted above I don't see any reason why this couldn't happen separately. That being said, on master I don't have a case showing this is necessary. Thanks, James Coleman 1: https://www.postgresql.org/message-id/flat/CAAaqYe-Aq6oNf9NPZnpPE7SgRLomXXWJA1Gz9L9ndi_Nv%3D94Yw%40mail.gmail.com#e0b1a803d0fdb97189ce493f15f99c14
v1-0001-Guard-set_cheapest-with-pathlist-NIL-check.patch
Description: Binary data