Use float8 datatype for percentiles in pg_walinspect stat functions
authorPeter Eisentraut <[email protected]>
Mon, 12 Sep 2022 07:38:07 +0000 (09:38 +0200)
committerPeter Eisentraut <[email protected]>
Mon, 12 Sep 2022 08:01:00 +0000 (10:01 +0200)
pg_walinspect uses datatype double (double precision floating point
number) for WAL stats percentile calculations and expose them via
float4 (single precision floating point number), which an unnecessary
loss of precision and confusing. Even though, it's harmless that way,
let's use float8 (double precision floating-point number) to be in
sync with what pg_walinspect does internally and what it exposes to
the users. This seems to be the pattern used elsewhere in the code.

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

contrib/pg_walinspect/pg_walinspect--1.0.sql
contrib/pg_walinspect/pg_walinspect.c
doc/src/sgml/pgwalinspect.sgml

index 4243516d8a43bcab83f4420382255c6cca28edfd..08b3dd55567bc2d25da65e98911f51014188f0db 100644 (file)
@@ -80,13 +80,13 @@ CREATE FUNCTION pg_get_wal_stats(IN start_lsn pg_lsn,
     IN  per_record boolean DEFAULT false,
     OUT "resource_manager/record_type" text,
     OUT count int8,
-    OUT count_percentage float4,
+    OUT count_percentage float8,
     OUT record_size int8,
-    OUT record_size_percentage float4,
+    OUT record_size_percentage float8,
     OUT fpi_size int8,
-    OUT fpi_size_percentage float4,
+    OUT fpi_size_percentage float8,
     OUT combined_size int8,
-    OUT combined_size_percentage float4
+    OUT combined_size_percentage float8
 )
 RETURNS SETOF record
 AS 'MODULE_PATHNAME', 'pg_get_wal_stats'
@@ -102,13 +102,13 @@ CREATE FUNCTION pg_get_wal_stats_till_end_of_wal(IN start_lsn pg_lsn,
     IN  per_record boolean DEFAULT false,
     OUT "resource_manager/record_type" text,
     OUT count int8,
-    OUT count_percentage float4,
+    OUT count_percentage float8,
     OUT record_size int8,
-    OUT record_size_percentage float4,
+    OUT record_size_percentage float8,
     OUT fpi_size int8,
-    OUT fpi_size_percentage float4,
+    OUT fpi_size_percentage float8,
     OUT combined_size int8,
-    OUT combined_size_percentage float4
+    OUT combined_size_percentage float8
 )
 RETURNS SETOF record
 AS 'MODULE_PATHNAME', 'pg_get_wal_stats_till_end_of_wal'
index 2f51a8dec407a3d15e13fba2142651d23eb0b119..38fb4106da49aeef8dd323574e020f4db7b3b69d 100644 (file)
@@ -430,13 +430,13 @@ FillXLogStatsRow(const char *name,
 
        values[i++] = CStringGetTextDatum(name);
        values[i++] = Int64GetDatum(n);
-       values[i++] = Float4GetDatum(n_pct);
+       values[i++] = Float8GetDatum(n_pct);
        values[i++] = Int64GetDatum(rec_len);
-       values[i++] = Float4GetDatum(rec_len_pct);
+       values[i++] = Float8GetDatum(rec_len_pct);
        values[i++] = Int64GetDatum(fpi_len);
-       values[i++] = Float4GetDatum(fpi_len_pct);
+       values[i++] = Float8GetDatum(fpi_len_pct);
        values[i++] = Int64GetDatum(tot_len);
-       values[i++] = Float4GetDatum(tot_len_pct);
+       values[i++] = Float8GetDatum(tot_len_pct);
 
        Assert(i == ncols);
 }
index de63a709654227d7e353612098e8acbbe84c099a..1a1bee7d6a8fb5d00394cd6ea5adb04369b69a3d 100644 (file)
@@ -164,13 +164,13 @@ postgres=# select start_lsn, end_lsn, prev_lsn, xid, resource_manager, record_ty
                        per_record boolean DEFAULT false,
                        "resource_manager/record_type" OUT text,
                        count OUT int8,
-                       count_percentage OUT float4,
+                       count_percentage OUT float8,
                        record_length OUT int8,
-                       record_length_percentage OUT float4,
+                       record_length_percentage OUT float8,
                        fpi_length OUT int8,
-                       fpi_length_percentage OUT float4,
+                       fpi_length_percentage OUT float8,
                        combined_size OUT int8,
-                       combined_size_percentage OUT float4)
+                       combined_size_percentage OUT float8)
       returns setof record
      </function>
     </term>
@@ -241,13 +241,13 @@ postgres=# select * from pg_get_wal_stats('0/14AFC30', '0/15011D7', true) where
                                        per_record boolean DEFAULT false,
                                        "resource_manager/record_type" OUT text,
                                        count OUT int8,
-                                       count_percentage OUT float4,
+                                       count_percentage OUT float8,
                                        record_length OUT int8,
-                                       record_length_percentage OUT float4,
+                                       record_length_percentage OUT float8,
                                        fpi_length OUT int8,
-                                       fpi_length_percentage OUT float4,
+                                       fpi_length_percentage OUT float8,
                                        combined_size OUT int8,
-                                       combined_size_percentage OUT float4)
+                                       combined_size_percentage OUT float8)
       returns setof record
      </function>
     </term>