pgstattuple: Use double consistently for percentages
authorPeter Eisentraut <[email protected]>
Mon, 12 Sep 2022 08:19:17 +0000 (10:19 +0200)
committerPeter Eisentraut <[email protected]>
Mon, 12 Sep 2022 08:19:17 +0000 (10:19 +0200)
pgstattuple uses data type double for other percentage calculations
and exposes those values to the users via the float8 data type.
However, scanned_percent in struct output_type is of type uint64, even
though it is later returned via Float8GetDatum().  Change it to use
double to be inline with other percentages.

Author: Bharath Rupireddy
Reviewed-by: Peter Eisentraut
Discussion: https://www.postgresql.org/message-id/36ee692b-232f-0484-ce94-dc39d82021ad%40enterprisedb.com

contrib/pgstattuple/pgstatapprox.c

index 15ddc322392fbfe53e22602c9d30bc015ccd81e8..b827728326b70e7e6a6a52cad68c9e446fd24b9d 100644 (file)
@@ -38,7 +38,7 @@ Datum     pgstattuple_approx_internal(Oid relid, FunctionCallInfo fcinfo);
 typedef struct output_type
 {
    uint64      table_len;
-   uint64      scanned_percent;
+   double      scanned_percent;
    uint64      tuple_count;
    uint64      tuple_len;
    double      tuple_percent;
@@ -203,7 +203,7 @@ statapprox_heap(Relation rel, output_type *stat)
     */
    if (nblocks != 0)
    {
-       stat->scanned_percent = 100 * scanned / nblocks;
+       stat->scanned_percent = 100.0 * scanned / nblocks;
        stat->tuple_percent = 100.0 * stat->tuple_len / stat->table_len;
        stat->dead_tuple_percent = 100.0 * stat->dead_tuple_len / stat->table_len;
        stat->free_percent = 100.0 * stat->free_space / stat->table_len;