Re: remaining sql/json patches

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: remaining sql/json patches
Дата
Msg-id 202401181711.qxjxpnl3ohnw@alvherre.pgsql
обсуждение исходный текст
Ответ на Re: remaining sql/json patches  (Alvaro Herrera <alvherre@alvh.no-ip.org>)
Ответы Re: remaining sql/json patches  (Amit Langote <amitlangote09@gmail.com>)
Re: remaining sql/json patches  (Alvaro Herrera <alvherre@alvh.no-ip.org>)
Список pgsql-hackers
On 2024-Jan-18, Alvaro Herrera wrote:

> commands/explain.c (Hmm, I think this is a preexisting bug actually)
> 
>     3893          18 :         case T_TableFuncScan:
>     3894          18 :             Assert(rte->rtekind == RTE_TABLEFUNC);
>     3895          18 :             if (rte->tablefunc)
>     3896           0 :                 if (rte->tablefunc->functype == TFT_XMLTABLE)
>     3897           0 :                     objectname = "xmltable";
>     3898             :                 else            /* Must be TFT_JSON_TABLE */
>     3899           0 :                     objectname = "json_table";
>     3900             :             else
>     3901          18 :                 objectname = NULL;
>     3902          18 :             objecttag = "Table Function Name";
>     3903          18 :             break;

Indeed -- the problem seems to be that add_rte_to_flat_rtable is
creating a new RTE and zaps the ->tablefunc pointer for it.  So when
EXPLAIN goes to examine the struct, there's a NULL pointer there and
nothing is printed.

One simple fix is to change add_rte_to_flat_rtable so that it doesn't
zero out the tablefunc pointer, but this is straight against what that
function is trying to do, namely to remove substructure.  Which means
that we need to preserve the name somewhere else.  I added a new member
to RangeTblEntry for this, which perhaps is a little ugly.  So here's
the patch for that.  (I also added an alias to one XMLTABLE invocation
under EXPLAIN, to show what it looks like when an alias is specified.
Otherwise they're always shown as "XMLTABLE" "xmltable" which is a bit
dumb).

Another possible way out is to decide that we don't want the
"objectname" to be reported here.  I admit it's perhaps redundant.  In
this case we'd just remove lines 3896-3899 shown above and let it be
NULL.

Thoughts?

-- 
Álvaro Herrera         PostgreSQL Developer  —  https://www.EnterpriseDB.com/

Вложения

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

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: Emit fewer vacuum records by reaping removable tuples during pruning
Следующее
От: Peter Geoghegan
Дата:
Сообщение: Re: Emit fewer vacuum records by reaping removable tuples during pruning