mirror of
https://github.com/postgres/postgres.git
synced 2025-05-21 00:02:53 -04:00
Fix initialization of pg_stat_get_lastscan()
A NULL result should be reported when a stats timestamp is set to 0, but c037471 missed that, leading to a confusing timestamp value after for example a DML on a freshly-created relation with no scans done on it yet. This impacted the following attributes for two system views: - pg_stat_all_tables.last_idx_scan - pg_stat_all_tables.last_seq_scan - pg_stat_all_indexes.last_idx_scan Reported-by: Robert Treat Analyzed-by: Peter Eisentraut Author: Dave Page Discussion: https://postgr.es/m/CABV9wwPzMfSaz3EfKXXDxKmMprbxwF5r6WPuxqA=5mzRUqfTGg@mail.gmail.com
This commit is contained in:
parent
1613de8bc3
commit
d7744d50a5
@ -56,12 +56,18 @@ Datum
|
||||
pg_stat_get_lastscan(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid relid = PG_GETARG_OID(0);
|
||||
TimestampTz result;
|
||||
PgStat_StatTabEntry *tabentry;
|
||||
|
||||
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
|
||||
result = 0;
|
||||
else
|
||||
result = tabentry->lastscan;
|
||||
|
||||
if (result == 0)
|
||||
PG_RETURN_NULL();
|
||||
else
|
||||
PG_RETURN_TIMESTAMPTZ(tabentry->lastscan);
|
||||
PG_RETURN_TIMESTAMPTZ(result);
|
||||
}
|
||||
|
||||
|
||||
|
@ -573,6 +573,12 @@ SELECT pg_stat_force_next_flush();
|
||||
|
||||
(1 row)
|
||||
|
||||
SELECT last_seq_scan, last_idx_scan FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass;
|
||||
last_seq_scan | last_idx_scan
|
||||
---------------+---------------
|
||||
|
|
||||
(1 row)
|
||||
|
||||
COMMIT;
|
||||
SELECT pg_stat_reset_single_table_counters('test_last_scan'::regclass);
|
||||
pg_stat_reset_single_table_counters
|
||||
|
@ -303,6 +303,7 @@ BEGIN;
|
||||
CREATE TEMPORARY TABLE test_last_scan(idx_col int primary key, noidx_col int);
|
||||
INSERT INTO test_last_scan(idx_col, noidx_col) VALUES(1, 1);
|
||||
SELECT pg_stat_force_next_flush();
|
||||
SELECT last_seq_scan, last_idx_scan FROM pg_stat_all_tables WHERE relid = 'test_last_scan'::regclass;
|
||||
COMMIT;
|
||||
|
||||
SELECT pg_stat_reset_single_table_counters('test_last_scan'::regclass);
|
||||
|
Loading…
x
Reference in New Issue
Block a user