Re: Get relid for a relation

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Get relid for a relation
Дата
Msg-id 1674576.1673621126@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Get relid for a relation  (Amin <amin.fallahi@gmail.com>)
Список pgsql-hackers
Amin <amin.fallahi@gmail.com> writes:
> In CustomScan cost estimator, where PlannerInfo and RelOptInfo are passed,
> I want to get access to the relation stats (for example pg_stat_all_tables)
> by calling pg_stat_fetch_stat_tabentry(). However, I don't have access to
> relid to pass to this function.

Sure you do.  The existing code, eg in selfuncs.c, does it about like
this:

        RangeTblEntry *rte = planner_rt_fetch(rel->relid, root);

        Assert(rte->rtekind == RTE_RELATION);
        relid = rte->relid;
        Assert(relid != InvalidOid);
        ...
        vardata.statsTuple = SearchSysCache3(STATRELATTINH,
                                             ObjectIdGetDatum(relid),
                                             Int16GetDatum(colnum),
                                             BoolGetDatum(rte->inh));

This is maybe a bit confusing, in that rel->relid is a range
table index but rte->relid is an OID.

FWIW, I seriously doubt that the numbers kept by the pg_stat mechanisms
are what you want for query planning purposes.

            regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Zhang Mingli
Дата:
Сообщение: Re: [feature]COPY FROM enable FORCE_NULL/FORCE_NOT_NULL on all columns
Следующее
От: Xing Guo
Дата:
Сообщение: Re: PL/Python: Fix return in the middle of PG_TRY() block.