Re: A very quick observation of dangling pointers in Postgres pathlists
| От | Andrei Lepikhov |
|---|---|
| Тема | Re: A very quick observation of dangling pointers in Postgres pathlists |
| Дата | |
| Msg-id | 61918bfd-dac1-4701-b214-ed3c4e228619@gmail.com обсуждение |
| Ответ на | Re: A very quick observation of dangling pointers in Postgres pathlists (David Rowley <dgrowleyml@gmail.com>) |
| Ответы |
Re: A very quick observation of dangling pointers in Postgres pathlists
|
| Список | pgsql-hackers |
On 21/04/2026 10:35, David Rowley wrote: > On Tue, 21 Apr 2026 at 19:29, Andrei Lepikhov <lepihov@gmail.com> wrote: >> I've attached a patch that shows how to fix the issue. Some regression tests >> change because of a hidden rule where a projection and its subpath have >> different target lists. Right now, the patch always enforces a projection, even >> if the target lists are the same. This is still open for discussion on whether >> there's a better way to handle it. > > IMO, we should write a function like copy_path() or reparent_path(), > which creates a copy of the given Path, or the latter also would copy > then set the ->parent to the given RelOptInfo. Any time we use a path > directly from the pathlist of another RelOptInfo, we should reparent > or copy it. We could add an Assert in add_path() to check the new path > has the correct parent to help us find the places where we forget to > do this. I've attached the patch so we can keep the discussion going. I used a shallow copy since re-parenting is not that obvious. As I see it, the parent pointer does not indicate ownership. Instead, it points to the source operator (RelOptInfo). For instance, createplan.c uses it to get the relid of the scan operation. Should the parent point to the pathlist's owner? Possibly, but right now I am not sure how introducing such an explicit contract would affect the optimiser. This issue can't be explicitly reproduced with the current optimiser without deep code intervention. So, if tests are needed, I propose a minor debug-only check inside the plan-building code: with best_path, we can scan RelOptInfo's pathlist and partial_pathlist to detect dangling pointers. It seems not stable enough, so I just left the patch without a test infrastructure. -- regards, Andrei Lepikhov, pgEdge
Вложения
В списке pgsql-hackers по дате отправления: