Thread: BUG #8451: quantile extension: memory corruption?
The following bug has been logged on the website: Bug reference: 8451 Logged by: strexxx Email address: stephane.wustner@lip6.fr PostgreSQL version: 9.1.9 Operating system: Linux 3.8.0-27-generic #40-Ubuntu SMP x86_64 Description: A query such as this one COPY (SELECT e,quantile(EXTRACT(EPOCH FROM(d)),ARRAY[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]) AS d FROM (SELECT e,max(time)-min(time) AS d FROM bb RIGHT JOIN (SELECT s,e FROM ss RIGHT JOIN (SELECT e FROM ee WHERE h ~* 'blah') AS i0 USING(e)) AS i0 USING (sessionid) GROUP BY e,ei) AS i1 GROUP BY e) TO 'full_path/d.csv' WITH CSV;" generates this ... 403,"{0.101187,0.139183,0.189162,0.271442,0.405427,0.731997,1.178445,2.52971,4.288747,9.544644,8996.364885}" 404,"{8996.364885,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322}" 437,"{0.10007,0.204397,0.266877,0.48238,0.669026,0.911554,1.275652,1.656346,2.445659,3.909159,58915.291602}" 438,"{58915.291602,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322}" 440,"{58915.291602,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322,3.16202013338398e-322}" ... for row that gets corrupted, the value d, for which quantiles are computed over, is NULL (there is no such row matching conditions and JOIN). I would expect the quantiles to be NULL as well. Additionally there is a strange pattern: the last value of the row preceding a corrupted one, is repeated as the first value of the corrupted rows that comes after. The other values correspond to something somewhat close to 2^-1068 (why ?) ... This subquery corresponding to one of the corrupted case works correctly (from my understanding) SELECT s,quantile(EXTRACT(EPOCH FROM(d)),ARRAY[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]) AS d FROM (SELECT s,max(time)-min(time) AS d FROM bb WHERE s = 440 GROUP BY s,e) AS i1 GROUP BY s; s | d -----------+---------- (0 rows)
On 13.9.2013 18:07, stephane.wustner@lip6.fr wrote: > The following bug has been logged on the website: > > Bug reference: 8451 > Logged by: strexxx > Email address: stephane.wustner@lip6.fr > PostgreSQL version: 9.1.9 > Operating system: Linux 3.8.0-27-generic #40-Ubuntu SMP x86_64 > Description: > > A query such as this one > COPY (SELECT e,quantile(EXTRACT(EPOCH > FROM(d)),ARRAY[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]) AS d FROM (SELECT > e,max(time)-min(time) AS d FROM bb RIGHT JOIN (SELECT s,e FROM ss RIGHT JOIN > (SELECT e FROM ee WHERE h ~* 'blah') AS i0 USING(e)) AS i0 USING > (sessionid) GROUP BY e,ei) AS i1 GROUP BY e) TO 'full_path/d.csv' WITH > CSV;" Hi, this seems like a bug in the "quantile" extension, which is developed and distributed completely separately from PostgreSQL. So pgsql-bugs is not the right place to report the issue. I reported the issue on github and I'll look into that today/tomorrow https://github.com/tvondra/quantile/issues/4 so far it seems like a trivial bug in handling NULL values. regards Tomas
On 14.9.2013 14:12, Tomas Vondra wrote: > On 13.9.2013 18:07, stephane.wustner@lip6.fr wrote: >> The following bug has been logged on the website: >> >> Bug reference: 8451 >> Logged by: strexxx >> Email address: stephane.wustner@lip6.fr >> PostgreSQL version: 9.1.9 >> Operating system: Linux 3.8.0-27-generic #40-Ubuntu SMP x86_64 >> Description: >> >> A query such as this one >> COPY (SELECT e,quantile(EXTRACT(EPOCH >> FROM(d)),ARRAY[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]) AS d FROM (SELECT >> e,max(time)-min(time) AS d FROM bb RIGHT JOIN (SELECT s,e FROM ss RIGHT JOIN >> (SELECT e FROM ee WHERE h ~* 'blah') AS i0 USING(e)) AS i0 USING >> (sessionid) GROUP BY e,ei) AS i1 GROUP BY e) TO 'full_path/d.csv' WITH >> CSV;" > > Hi, > > this seems like a bug in the "quantile" extension, which is developed > and distributed completely separately from PostgreSQL. So pgsql-bugs is > not the right place to report the issue. > > I reported the issue on github and I'll look into that today/tomorrow > > https://github.com/tvondra/quantile/issues/4 > > so far it seems like a trivial bug in handling NULL values. And indeed it was a bug in handling NULL values - the PG_ARGISNULL happened too late. I plan to do few more improvements before pushing new version to pgxn, but you may grab the sources from github directly. Tomas