Обсуждение: [Beginner Question]What's the use of ResTarget?

Поиск
Список
Период
Сортировка

[Beginner Question]What's the use of ResTarget?

От
"Wen Yi"
Дата:
Hi community
When I read the Internals document (41.1. The Query Tree),
the introduction of  the 'the result relation' confuse me.

In the document, it says

> This is an index into the range table that identifies the relation where the results of the query go.

And I cheak the corresponding code:

In parsenodes.h (A part)

typedef struct ResTarget
{
    NodeTag        type;
    char       *name;            /* column name or NULL */
    List       *indirection;    /* subscripts, field names, and '*', or NIL */
    Node       *val;            /* the value expression to compute or assign */
    int            location;        /* token location, or -1 if unknown */
} ResTarget;

In gram.y (A part)

insert_column_item:
            ColId opt_indirection
                {
                    $$ = makeNode(ResTarget);

My question is:

I really don't the the use of ResTarget, in my original understand, I guess the use of ResTarget is to store the columns of the result, like:

SELECT row_1, row_2 FROM table;

After the parse, the ResTarget will store the row_1, row_2 in the ResTarget.

But the turth is, it also be used in the another clause, like INSERT, far from what I imagined.
So what's the use of ResTarget?

Can someone give me some advice?
Thanks in advance!

Yours,
Wen Yi

Re: [Beginner Question]What's the use of ResTarget?

От
Alvaro Herrera
Дата:
On 2023-Jul-02, Wen Yi wrote:

> Hi community
> When I read the Internals document (41.1. The Query Tree),
> the introduction of  the 'the result relation' confuse me.

There are "result relations" in commands that modify a relation, such as
insert or update.  The result relation is where the new tuples are
inserted, or where the modified tuples are.


> in my original understand, I guess the use of ResTarget is to store
> the columns of the result, like:
> 
> SELECT row_1, row_2 FROM table;

Yeah.  Those aren't necessarily in the result relation, because (as the
doc says) a SELECT does not even *have* a result relation.

-- 
Álvaro Herrera        Breisgau, Deutschland  —  https://www.EnterpriseDB.com/
"Once again, thank you and all of the developers for your hard work on
PostgreSQL.  This is by far the most pleasant management experience of
any database I've worked on."                             (Dan Harris)
http://archives.postgresql.org/pgsql-performance/2006-04/msg00247.php