On Wed, 31 Jul 2024 at 05:19, Melih Mutlu <m.melihmu...@gmail.com> wrote: > After the patch [1] that adds a path column to pg_backend_memory_context, the > parent context can also be found in the path array. Since there are currently > two ways to retrieve information related to the parent of a context, I wonder > whether we still want to keep the parent column.
My vote is to remove it. I think the parent column is only maybe useful as a rough visual indication of what the parent is. It's dangerous to assume using it is a reliable way to write a recursive query: with recursive contexts as ( select name, ident, level, path, parent from pg_backend_memory_contexts ), c as ( select path[level] as context_id, NULL::int as parent_id,* from contexts where parent is null union all select c1.path[c1.level], c.context_id,c1.* from contexts c1 inner join c on c.name = c1.parent ) select count(*) as all_including_false_dups, count(distinct context_id) as unique from c; all_including_false_dups | unique --------------------------+-------- 159 | 150 So, with the backend in the state I had it in during this query, the recursive query shows 9 additional contexts because the recursive query joining parent to name found a false parent with a name matching the actual parent because the names are not unique. Given that I didn't do anything special to create contexts with duplicate names, it seems duplicates are not rare. select name,count(*) from pg_backend_memory_contexts group by 1 order by 2 desc limit 3; name | count -------------+------- index info | 94 dynahash | 15 ExprContext | 7 (3 rows) I think the first two of the above won't have any children, but the ExprContext ones can. David