]> granicus.if.org Git - postgresql/commitdiff
Fix portability issues with stddev in pg_stat_statements
authorAndrew Dunstan <andrew@dunslane.net>
Fri, 27 Mar 2015 21:29:59 +0000 (17:29 -0400)
committerAndrew Dunstan <andrew@dunslane.net>
Fri, 27 Mar 2015 21:29:59 +0000 (17:29 -0400)
Stddev is calculated on the fly, and the code in commit 717f70953264 was
using Float8GetDatumFast() inappropriately to convert the result to a
Datum. Mea culpa. It now uses Float8GetDatum().

contrib/pg_stat_statements/pg_stat_statements.c

index ec0846d0a84fbee42e0b0980094ff7413acb9a97..fee2aaacbe2a6cb7ca8285167ce94210083f97fe 100644 (file)
@@ -1577,12 +1577,15 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo,
                         * sample variance, as we have data for the whole population,
                         * so Bessel's correction is not used, and we don't divide by
                         * tmp.calls - 1.
+                        *
+                        * We're calculating the stddev on the fly, so it's not in the tmp
+                        * structure, so we can't use the Float8GetDatumFast macro here.
                         */
                        if (tmp.calls > 1)
                                values[i++] =
-                                       Float8GetDatumFast(sqrtd(tmp.sum_var_time / tmp.calls));
+                                       Float8GetDatum(sqrtd(tmp.sum_var_time / tmp.calls));
                        else
-                               values[i++] = Float8GetDatumFast(0.0);
+                               values[i++] = Float8GetDatum(0.0);
                }
                values[i++] = Int64GetDatumFast(tmp.rows);
                values[i++] = Int64GetDatumFast(tmp.shared_blks_hit);