postgres optimizer

Started by Hossein S. Attarover 20 years ago4 messagesgeneral
Jump to latest
#1Hossein S. Attar
mhsheikh@softbase.math.uwaterloo.ca

Hi:
I am working on postgres optimizer code to add some statistics
collection features for an academic project. At some point in my work, I
need to be able to tell if a join is a foreign key join or not. Also in
case of a foreign key join, I need to identify which input to the join
operator has the primary key attribute and which one has teh foreign
key. In other words, when we are making a JoinPath struct, I need to
identify if the join between the inner and outer RelOptInfo structs is a
foreign key join and if so, which RelOptInfo has the primary key. Does
anyone know the best way to do this? Should I go to "joinrestrictinfo"
field and go over all expressions? Is there any easier way?

Regards,
HSA

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Hossein S. Attar (#1)
Re: postgres optimizer

"Hossein S. Attar" <mhsheikh@softbase.math.uwaterloo.ca> writes:

I am working on postgres optimizer code to add some statistics
collection features for an academic project. At some point in my work, I
need to be able to tell if a join is a foreign key join or not. Also in
case of a foreign key join, I need to identify which input to the join
operator has the primary key attribute and which one has teh foreign
key. In other words, when we are making a JoinPath struct, I need to
identify if the join between the inner and outer RelOptInfo structs is a
foreign key join and if so, which RelOptInfo has the primary key. Does
anyone know the best way to do this? Should I go to "joinrestrictinfo"
field and go over all expressions? Is there any easier way?

The planner doesn't think there is any such thing as a "foreign key
join". Perhaps you should modify the foreign key triggers (in
ri_triggers.c) to collect the information you need.

regards, tom lane

#3Joshua D. Drake
jd@commandprompt.com
In reply to: Tom Lane (#2)
Re: postgres optimizer

Tom Lane wrote:

"Hossein S. Attar" <mhsheikh@softbase.math.uwaterloo.ca> writes:

I am working on postgres optimizer code to add some statistics
collection features for an academic project. At some point in my work, I
need to be able to tell if a join is a foreign key join or not. Also in
case of a foreign key join, I need to identify which input to the join
operator has the primary key attribute and which one has teh foreign
key. In other words, when we are making a JoinPath struct, I need to
identify if the join between the inner and outer RelOptInfo structs is a
foreign key join and if so, which RelOptInfo has the primary key. Does
anyone know the best way to do this? Should I go to "joinrestrictinfo"
field and go over all expressions? Is there any easier way?

I would be interested in knowing "why" you want to do such a thing? What
is it you expect to gain?

Sincerely,

Joshua D. Drake

The planner doesn't think there is any such thing as a "foreign key
join". Perhaps you should modify the foreign key triggers (in
ri_triggers.c) to collect the information you need.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org

--
Your PostgreSQL solutions company - Command Prompt, Inc. 1.800.492.2240
PostgreSQL Replication, Consulting, Custom Programming, 24x7 support
Managed Services, Shared and Dedicated Hosting
Co-Authors: plPHP, plPerlNG - http://www.commandprompt.com/

#4Hossein S. Attar
mhsheikh@softbase.math.uwaterloo.ca
In reply to: Joshua D. Drake (#3)
Re: postgres optimizer

Like I said it's a research project. There is a feature that I'm trying
to add to optimizer, but this feature should only be used when a join is
a foreign key join.

Hossein

Joshua D. Drake wrote:

Show quoted text

I would be interested in knowing "why" you want to do such a thing? What
is it you expect to gain?

Sincerely,

Joshua D. Drake

The planner doesn't think there is any such thing as a "foreign key
join". Perhaps you should modify the foreign key triggers (in
ri_triggers.c) to collect the information you need.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org