Re: How does postgres store the join predicate for a relation in a given query

From: Nico Williams <nico(at)cryptonector(dot)com>
To: Gourav Kumar <gourav1905(at)gmail(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: How does postgres store the join predicate for a relation in a given query
Date: 2017-10-10 17:51:34
Message-ID: 20171010175132.GB3813@localhost
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Oct 10, 2017 at 07:29:24PM +0530, Gourav Kumar wrote:
> When you fire a query in postgresql, it will first parse the query and
> create the data structures for storing various aspects of the query and
> executing the query. (Like RangeTblEntry, PlannerInfo, RangeOptInfo etc.).
>
> I want to know how does postgresql stores the join predicates of a query.
> Like which data structure is used to store the join predicates.
>
> How can we find the join predicates applied on a relation from relid, Oid
> or RangeTblEntry ?
>
> I want to construct a join graph for a given query, for which I need the
> join predicates between two relations.

In the usingClause or quals fields of a JoinExpr. See
src/backend/parser/gram.y, search for join_qual.

Of course, WHERE clauses have to be inspected as well, which go into the
whereClause of of a SelectStmt; search for where_clause in
src/backend/parser/gram.y.

Nico
--

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Petr Jelinek 2017-10-10 19:54:48 Re: 10.0: Logical replication doesn't execute BEFORE UPDATE OF <columns> trigger
Previous Message Aleksander Alekseev 2017-10-10 15:22:51 Re: 10.0: Logical replication doesn't execute BEFORE UPDATE OF <columns> trigger