Re: remaining sql/json patches

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Amit Langote <amitlangote09(at)gmail(dot)com>
Cc: Andres Freund <andres(at)anarazel(dot)de>, Erik Rijkers <er(at)xs4all(dot)nl>, jian he <jian(dot)universality(at)gmail(dot)com>, Andrew Dunstan <andrew(at)dunslane(dot)net>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: remaining sql/json patches
Date: 2024-01-18 17:11:18
Message-ID: 202401181711.qxjxpnl3ohnw@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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/

Attachment Content-Type Size
0001-Show-function-name-in-TableFuncScan.patch text/x-diff 10.0 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Geoghegan 2024-01-18 17:14:55 Re: Emit fewer vacuum records by reaping removable tuples during pruning
Previous Message Robert Haas 2024-01-18 16:45:53 Re: Emit fewer vacuum records by reaping removable tuples during pruning