From: | gdurbin(at)synchr(dot)com |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #7787: ERROR: could not find RelOptInfo for given relids |
Date: | 2013-01-04 19:31:25 |
Message-ID: | E1TrCzF-0000p9-Du@wrigleys.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 7787
Logged by: Gary Durbin
Email address: gdurbin(at)synchr(dot)com
PostgreSQL version: 9.1.7
Operating system: "(Red Hat 4.4.6-4), 64-bit"
Description:
Two queries follow. The first gets the error, the second doesn't the only
difference is the additional expression in the where clause in the inner
join.
Fail:
SELECT *
FROM person p
JOIN person_dependent_relationship pdr ON p.personid=pdr.personid
AND CURRENT_DATE BETWEEN pdr.effectivedate AND pdr.enddate
AND CURRENT_TIMESTAMP BETWEEN pdr.createts AND pdr.endts
JOIN dependent_enrollment de ON pdr.dependentid=de.dependentid
AND de.createts=TIMESTAMP WITH time ZONE '2199-12-31 +0'
JOIN person_bene_election pbe ON pbe.personid = p.personid
AND pbe.effectivedate = de.effectivedate
AND pbe.createts = TIMESTAMP WITH time ZONE '2199-12-31 +0'
AND pbe.benefitsubclass = de.benefitsubclass
AND pbe.selectedoption = 'Y'
AND pbe.benefitelection = 'E'
LEFT JOIN /*CX_DEPENROLLAGELIMIT*/
(Select p.personid as userid , de.dependentid , de.benefitplanid ,
de.dependentenrollpid
from dependent_enrollment de
cross JOIN person p
JOIN benefit_plan_desc bpd on bpd.benefitplanid = de.benefitplanid and
de.effectivedate between bpd.effectivedate and bpd.enddate
and current_timestamp between bpd.createts and bpd.endts
JOIN AllowedDependents pdr
on pdr.dependentid = de.dependentid and de.effectivedate between
pdr.effectivedate and pdr.enddate
JOIN dependent_desc dd
ON dd.dependentid=de.dependentid
AND dd.effectivedate <= dd.enddate
AND de.effectivedate BETWEEN dd.effectivedate AND dd.enddate
LEFT JOIN person_vitals pv on pdr.dependentid = pv.personid AND
de.effectivedate BETWEEN pv.effectivedate AND pv.enddate AND
current_timestamp BETWEEN pv.createts AND pv.endTS
LEFT JOIN Benefit_Calc_Rule_Desc bcrd
ON bcrd.benefitcalcruleid = bpd.benefitcalcruleid
AND de.effectivedate between bcrd.EffectiveDate and bcrd.EndDate
and current_timestamp between bcrd.CreateTS and bcrd.EndTs
where de.selectedoption='Y' and (pdr.dependentrelationship not IN
('SP','DP','H','NA') AND (pv.birthdate IS NOT NULL
AND (bpd.dependentagelimit IS not NULL
and extract(years from age( de.EffectiveDate,
pv.BirthDate))>bpd.dependentagelimit)) )
AND dd.dependentstatus<> 'D')
cx ON cx.userid = p.personid
AND cx.dependentid = de.dependentid
AND cx.benefitplanid = pbe.benefitplanid
WHERE p.personid='25237'
AND cx.dependentid IS NULL
Not fail:
SELECT *
FROM person p
JOIN person_dependent_relationship pdr ON p.personid=pdr.personid
AND CURRENT_DATE BETWEEN pdr.effectivedate AND pdr.enddate
AND CURRENT_TIMESTAMP BETWEEN pdr.createts AND pdr.endts
JOIN dependent_enrollment de ON pdr.dependentid=de.dependentid
AND de.createts=TIMESTAMP WITH time ZONE '2199-12-31 +0'
JOIN person_bene_election pbe ON pbe.personid = p.personid
AND pbe.effectivedate = de.effectivedate
AND pbe.createts = TIMESTAMP WITH time ZONE '2199-12-31 +0'
AND pbe.benefitsubclass = de.benefitsubclass
AND pbe.selectedoption = 'Y'
AND pbe.benefitelection = 'E'
LEFT JOIN /*CX_DEPENROLLAGELIMIT*/
(Select p.personid as userid , de.dependentid , de.benefitplanid ,
de.dependentenrollpid
from dependent_enrollment de
cross JOIN person p
JOIN benefit_plan_desc bpd on bpd.benefitplanid = de.benefitplanid and
de.effectivedate between bpd.effectivedate and bpd.enddate
and current_timestamp between bpd.createts and bpd.endts
JOIN AllowedDependents pdr
on pdr.dependentid = de.dependentid and de.effectivedate between
pdr.effectivedate and pdr.enddate
JOIN dependent_desc dd
ON dd.dependentid=de.dependentid
AND dd.effectivedate <= dd.enddate
AND de.effectivedate BETWEEN dd.effectivedate AND dd.enddate
LEFT JOIN person_vitals pv on pdr.dependentid = pv.personid AND
de.effectivedate BETWEEN pv.effectivedate AND pv.enddate AND
current_timestamp BETWEEN pv.createts AND pv.endTS
LEFT JOIN Benefit_Calc_Rule_Desc bcrd
ON bcrd.benefitcalcruleid = bpd.benefitcalcruleid
AND de.effectivedate between bcrd.EffectiveDate and bcrd.EndDate
and current_timestamp between bcrd.CreateTS and bcrd.EndTs
where de.selectedoption='Y' and (pdr.dependentrelationship not IN
('SP','DP','H','NA') AND (pv.birthdate IS NOT NULL
AND (bpd.dependentagelimit IS not NULL
and extract(years from age( de.EffectiveDate,
pv.BirthDate))>bpd.dependentagelimit)) )
AND dd.dependentstatus<> 'D'
/* Following line was added */
and (bcrd.benefitcalcruleid = bpd.benefitcalcruleid or
bcrd.benefitcalcruleid is null) )
cx ON cx.userid = p.personid
AND cx.dependentid = de.dependentid
AND cx.benefitplanid = pbe.benefitplanid
WHERE p.personid='25237'
AND cx.dependentid IS NULL
From | Date | Subject | |
---|---|---|---|
Next Message | Aleksander Shniperson | 2013-01-05 14:26:33 | Re: BUG #7781: pgagent incorrect installation |
Previous Message | Tom Lane | 2013-01-04 18:03:07 | Re: BUG #7786: select from view is computing columns not selected |