From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | "Andrus" <kobruleht2(at)hot(dot)ee>, pgsql-general(at)postgresql(dot)org |
Subject: | Re: 9.0RC1 error variable not found in subplan target lists |
Date: | 2010-09-25 23:06:11 |
Message-ID: | 3167.1285455971@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
> "Andrus" <kobruleht2(at)hot(dot)ee> writes:
>> Should I try 9.0 release
> No, it's still busted in HEAD :-(. Probably won't be too hard to fix,
> but I need to go find the bug.
Here's the patch if it helps.
regards, tom lane
diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c
index 5fc056e2a572db2299f2624f19e8988e671df034..1355c18317a7399e028c16f3b8edffc410687a27 100644
*** a/src/backend/optimizer/plan/analyzejoins.c
--- b/src/backend/optimizer/plan/analyzejoins.c
***************
*** 26,31 ****
--- 26,32 ----
#include "optimizer/pathnode.h"
#include "optimizer/paths.h"
#include "optimizer/planmain.h"
+ #include "optimizer/var.h"
/* local functions */
static bool join_is_removable(PlannerInfo *root, SpecialJoinInfo *sjinfo);
*************** join_is_removable(PlannerInfo *root, Spe
*** 197,212 ****
}
/*
! * Similarly check that the inner rel doesn't produce any PlaceHolderVars
! * that will be used above the join.
*/
foreach(l, root->placeholder_list)
{
PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(l);
! if (bms_is_subset(phinfo->ph_eval_at, innerrel->relids) &&
! !bms_is_subset(phinfo->ph_needed, joinrelids))
! return false;
}
/*
--- 198,220 ----
}
/*
! * Similarly check that the inner rel isn't needed by any PlaceHolderVars
! * that will be used above the join. We only need to fail if such a PHV
! * actually references some inner-rel attributes; but the correct check
! * for that is relatively expensive, so we first check against ph_eval_at,
! * which must mention the inner rel if the PHV uses any inner-rel attrs.
*/
foreach(l, root->placeholder_list)
{
PlaceHolderInfo *phinfo = (PlaceHolderInfo *) lfirst(l);
! if (bms_is_subset(phinfo->ph_needed, joinrelids))
! continue; /* PHV is not used above the join */
! if (!bms_overlap(phinfo->ph_eval_at, innerrel->relids))
! continue; /* it definitely doesn't reference innerrel */
! if (bms_overlap(pull_varnos((Node *) phinfo->ph_var),
! innerrel->relids))
! return false; /* it does reference innerrel */
}
/*
From | Date | Subject | |
---|---|---|---|
Next Message | Ian Barwick | 2010-09-26 01:30:46 | Re: A note on pg_upgrade and missing "pg_upgrade_support.so" |
Previous Message | Tom Lane | 2010-09-25 21:21:55 | Re: 9.0RC1 error variable not found in subplan target lists |