vacuum_stats_diff.no-cfbot

text/plain

Filename: vacuum_stats_diff.no-cfbot
Type: text/plain
Part: 4
Message: Re: Vacuum statistics
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index b63c1804b41..b68e0f00abd 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -1392,48 +1392,42 @@ SELECT
   ns.nspname AS "schema",
   rel.relname AS relname,
 
-  stats.total_blks_read,
-  stats.total_blks_hit,
-  stats.total_blks_dirtied,
-  stats.total_blks_written,
-
-  stats.rel_blks_read,
-  stats.rel_blks_hit,
-
-  stats.pages_scanned,
-  stats.pages_removed,
-  stats.pages_frozen,
-  stats.pages_all_visible,
-  stats.tuples_deleted,
-  stats.tuples_frozen,
-  stats.dead_tuples,
-
-  stats.index_vacuum_count,
-  stats.rev_all_frozen_pages,
-  stats.rev_all_visible_pages,
-
-  stats.wal_records,
-  stats.wal_fpi,
-  stats.wal_bytes,
-
-  stats.blk_read_time,
-  stats.blk_write_time,
-
-  stats.delay_time,
-  stats.system_time,
-  stats.user_time,
-  stats.total_time,
-  stats.interrupts
-FROM
-  pg_database db,
-  pg_class rel,
-  pg_namespace ns,
-  pg_stat_vacuum_tables(rel.oid) stats
-WHERE
-  db.datname = current_database() AND
-  rel.oid = stats.relid AND
-  ns.oid = rel.relnamespace AND
-  rel.relkind = 'r';
+  COALESCE(stats.total_blks_read, 0) AS total_blks_read,
+  COALESCE(stats.total_blks_hit, 0) AS total_blks_hit,
+  COALESCE(stats.total_blks_dirtied, 0) AS total_blks_dirtied,
+  COALESCE(stats.total_blks_written, 0) AS total_blks_written,
+
+  COALESCE(stats.rel_blks_read, 0) AS rel_blks_read,
+  COALESCE(stats.rel_blks_hit, 0) AS rel_blks_hit,
+
+  COALESCE(stats.pages_scanned, 0) AS pages_scanned,
+  COALESCE(stats.pages_removed, 0) AS pages_removed,
+  COALESCE(stats.pages_frozen, 0) AS pages_frozen,
+  COALESCE(stats.pages_all_visible, 0) AS pages_all_visible,
+  COALESCE(stats.tuples_deleted, 0) AS tuples_deleted,
+  COALESCE(stats.tuples_frozen, 0) AS tuples_frozen,
+  COALESCE(stats.dead_tuples, 0) AS dead_tuples,
+
+  COALESCE(stats.index_vacuum_count, 0) AS index_vacuum_count,
+  COALESCE(stats.rev_all_frozen_pages, 0) AS rev_all_frozen_pages,
+  COALESCE(stats.rev_all_visible_pages, 0) AS rev_all_visible_pages,
+
+  COALESCE(stats.wal_records, 0) AS wal_records,
+  COALESCE(stats.wal_fpi, 0) AS wal_fpi,
+  COALESCE(stats.wal_bytes, 0) AS wal_bytes,
+
+  COALESCE(stats.blk_read_time, 0) AS blk_read_time,
+  COALESCE(stats.blk_write_time, 0) AS blk_write_time,
+
+  COALESCE(stats.delay_time, 0) AS delay_time,
+  COALESCE(stats.system_time, 0) AS system_time,
+  COALESCE(stats.user_time, 0) AS user_time,
+  COALESCE(stats.total_time, 0) AS total_time,
+  COALESCE(stats.interrupts, 0) AS interrupts
+FROM pg_class rel
+  JOIN pg_namespace ns ON ns.oid = rel.relnamespace
+  LEFT JOIN pg_stat_vacuum_tables(rel.oid) stats ON true
+WHERE rel.relkind = 'r';
 
 CREATE VIEW pg_stat_vacuum_indexes AS
 SELECT
@@ -1441,64 +1435,57 @@ SELECT
   ns.nspname AS "schema",
   rel.relname AS relname,
 
-  stats.total_blks_read,
-  stats.total_blks_hit,
-  stats.total_blks_dirtied,
-  stats.total_blks_written,
+  COALESCE(total_blks_read, 0) AS total_blks_read,
+  COALESCE(total_blks_hit, 0) AS total_blks_hit,
+  COALESCE(total_blks_dirtied, 0) AS total_blks_dirtied,
+  COALESCE(total_blks_written, 0) AS total_blks_written,
 
-  stats.rel_blks_read,
-  stats.rel_blks_hit,
+  COALESCE(rel_blks_read, 0) AS rel_blks_read,
+  COALESCE(rel_blks_hit, 0) AS rel_blks_hit,
 
-  stats.pages_deleted,
-  stats.tuples_deleted,
+  COALESCE(pages_deleted, 0) AS pages_deleted,
+  COALESCE(tuples_deleted, 0) AS tuples_deleted,
 
-  stats.wal_records,
-  stats.wal_fpi,
-  stats.wal_bytes,
+  COALESCE(wal_records, 0) AS wal_records,
+  COALESCE(wal_fpi, 0) AS wal_fpi,
+  COALESCE(wal_bytes, 0) AS wal_bytes,
 
-  stats.blk_read_time,
-  stats.blk_write_time,
+  COALESCE(blk_read_time, 0) AS blk_read_time,
+  COALESCE(blk_write_time, 0) AS blk_write_time,
 
-  stats.delay_time,
-  stats.system_time,
-  stats.user_time,
-  stats.total_time,
-  stats.interrupts
+  COALESCE(delay_time, 0) AS delay_time,
+  COALESCE(system_time, 0) AS system_time,
+  COALESCE(user_time, 0) AS user_time,
+  COALESCE(total_time, 0) AS total_time,
+  COALESCE(interrupts, 0) AS interrupts
 FROM
-  pg_database db,
-  pg_class rel,
-  pg_namespace ns,
-  pg_stat_vacuum_indexes(rel.oid) stats
-WHERE
-  db.datname = current_database() AND
-  rel.oid = stats.relid AND
-  ns.oid = rel.relnamespace AND
-  rel.relkind = 'i';
+  pg_class rel
+  JOIN pg_namespace ns ON ns.oid = rel.relnamespace
+  LEFT JOIN pg_stat_vacuum_indexes(rel.oid) stats ON true
+WHERE rel.relkind = 'i';
 
 CREATE VIEW pg_stat_vacuum_database AS
 SELECT
   db.oid as dboid,
   db.datname AS dbname,
 
-  stats.db_blks_read,
-  stats.db_blks_hit,
-  stats.total_blks_dirtied,
-  stats.total_blks_written,
-
-  stats.wal_records,
-  stats.wal_fpi,
-  stats.wal_bytes,
+  COALESCE(stats.db_blks_read, 0) AS db_blks_read,
+  COALESCE(stats.db_blks_hit, 0) AS db_blks_hit,
+  COALESCE(stats.total_blks_dirtied, 0) AS total_blks_dirtied,
+  COALESCE(stats.total_blks_written, 0) AS total_blks_written,
 
-  stats.blk_read_time,
-  stats.blk_write_time,
+  COALESCE(stats.wal_records, 0) AS wal_records,
+  COALESCE(stats.wal_fpi, 0) AS wal_fpi,
+  COALESCE(stats.wal_bytes, 0) AS wal_bytes,
 
-  stats.delay_time,
-  stats.system_time,
-  stats.user_time,
-  stats.total_time,
+  COALESCE(stats.blk_read_time, 0) AS blk_read_time,
+  COALESCE(stats.blk_write_time, 0) AS blk_write_time,
 
-  stats.interrupts
+  COALESCE(stats.delay_time, 0) AS delay_time,
+  COALESCE(stats.system_time, 0) AS system_time,
+  COALESCE(stats.user_time, 0) AS user_time,
+  COALESCE(stats.total_time, 0) AS total_time,
+  COALESCE(stats.interrupts, 0) AS interrupts
 FROM
-  pg_database db LEFT JOIN pg_stat_vacuum_database(db.oid) stats
-ON
-  db.oid = stats.dboid;
\ No newline at end of file
+  pg_database db
+  LEFT JOIN pg_stat_vacuum_database(db.oid) stats ON true;
\ No newline at end of file
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index 4d1c099b37e..cac34fbe64f 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -2107,7 +2107,7 @@ pg_stat_have_stats(PG_FUNCTION_ARGS)
 
 static void
 tuplestore_put_for_database(Oid dbid, ReturnSetInfo *rsinfo,
-							PgStatShared_Database *dbentry)
+							PgStat_StatDBEntry *dbentry)
 {
 	Datum		values[EXTVACDBSTAT_COLUMNS];
 	bool		nulls[EXTVACDBSTAT_COLUMNS];
@@ -2118,28 +2118,28 @@ tuplestore_put_for_database(Oid dbid, ReturnSetInfo *rsinfo,
 
 	values[i++] = ObjectIdGetDatum(dbid);
 
-	values[i++] = Int64GetDatum(dbentry->stats.vacuum_ext.total_blks_read);
-	values[i++] = Int64GetDatum(dbentry->stats.vacuum_ext.total_blks_hit);
-	values[i++] = Int64GetDatum(dbentry->stats.vacuum_ext.total_blks_dirtied);
-	values[i++] = Int64GetDatum(dbentry->stats.vacuum_ext.total_blks_written);
+	values[i++] = Int64GetDatum(dbentry->vacuum_ext.total_blks_read);
+	values[i++] = Int64GetDatum(dbentry->vacuum_ext.total_blks_hit);
+	values[i++] = Int64GetDatum(dbentry->vacuum_ext.total_blks_dirtied);
+	values[i++] = Int64GetDatum(dbentry->vacuum_ext.total_blks_written);
 
-	values[i++] = Int64GetDatum(dbentry->stats.vacuum_ext.wal_records);
-	values[i++] = Int64GetDatum(dbentry->stats.vacuum_ext.wal_fpi);
+	values[i++] = Int64GetDatum(dbentry->vacuum_ext.wal_records);
+	values[i++] = Int64GetDatum(dbentry->vacuum_ext.wal_fpi);
 
 	/* Convert to numeric, like pg_stat_statements */
-	snprintf(buf, sizeof buf, UINT64_FORMAT, dbentry->stats.vacuum_ext.wal_bytes);
+	snprintf(buf, sizeof buf, UINT64_FORMAT, dbentry->vacuum_ext.wal_bytes);
 	values[i++] = DirectFunctionCall3(numeric_in,
 									  CStringGetDatum(buf),
 									  ObjectIdGetDatum(0),
 									  Int32GetDatum(-1));
 
-	values[i++] = Float8GetDatum(dbentry->stats.vacuum_ext.blk_read_time);
-	values[i++] = Float8GetDatum(dbentry->stats.vacuum_ext.blk_write_time);
-	values[i++] = Float8GetDatum(dbentry->stats.vacuum_ext.delay_time);
-	values[i++] = Float8GetDatum(dbentry->stats.vacuum_ext.system_time);
-	values[i++] = Float8GetDatum(dbentry->stats.vacuum_ext.user_time);
-	values[i++] = Float8GetDatum(dbentry->stats.vacuum_ext.total_time);
-	values[i++] = Int32GetDatum(dbentry->stats.vacuum_ext.interrupts);
+	values[i++] = Float8GetDatum(dbentry->vacuum_ext.blk_read_time);
+	values[i++] = Float8GetDatum(dbentry->vacuum_ext.blk_write_time);
+	values[i++] = Float8GetDatum(dbentry->vacuum_ext.delay_time);
+	values[i++] = Float8GetDatum(dbentry->vacuum_ext.system_time);
+	values[i++] = Float8GetDatum(dbentry->vacuum_ext.user_time);
+	values[i++] = Float8GetDatum(dbentry->vacuum_ext.total_time);
+	values[i++] = Int32GetDatum(dbentry->vacuum_ext.interrupts);
 
 	Assert(i == rsinfo->setDesc->natts);
 	tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls);
@@ -2236,8 +2236,9 @@ pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns)
 		if (OidIsValid(relid))
 		{
 			tabentry = pgstat_fetch_stat_tabentry(relid);
-			if (tabentry == NULL || tabentry->vacuum_ext.type != type)
-				/* Table don't exists or isn't an heap relation. */
+
+			if ((tabentry == NULL || tabentry->vacuum_ext.type != type))
+				/* Table don't exists or isn't a heap or index relation. */
 				return;
 
 			tuplestore_put_for_relation(relid, rsinfo, tabentry);
@@ -2245,7 +2246,7 @@ pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns)
 		else
 		{
 			SnapshotIterator		hashiter;
-			PgStat_SnapshotEntry   *entry;
+			PgStat_SnapshotEntry    *entry;
 
 			pgstat_update_snapshot(PGSTAT_KIND_RELATION);
 
@@ -2265,22 +2266,18 @@ pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns)
 	}
 	else if (type == PGSTAT_EXTVAC_DB)
 	{
-		PgStatShared_Database	   *dbentry;
-		PgStat_EntryRef 		   *entry_ref;
-		Oid							dbid = PG_GETARG_OID(0);
+		PgStat_StatDBEntry	    *dbentry;
+		Oid						dbid = PG_GETARG_OID(0);
 
 		if (OidIsValid(dbid))
 		{
-			entry_ref = pgstat_get_entry_ref_locked(PGSTAT_KIND_DATABASE,
-											dbid, InvalidOid, false);
-			dbentry = (PgStatShared_Database *) entry_ref->shared_stats;
+			dbentry = pgstat_fetch_stat_dbentry(dbid);
 
 			if (dbentry == NULL)
-				/* Table doesn't exist or isn't a heap relation */
+				/* Database doesn't exist */
 				return;
 
 			tuplestore_put_for_database(dbid, rsinfo, dbentry);
-			pgstat_unlock_entry(entry_ref);
 		}
 	}
 }
@@ -2316,4 +2313,4 @@ pg_stat_vacuum_database(PG_FUNCTION_ARGS)
 	pg_stats_vacuum(fcinfo, PGSTAT_EXTVAC_DB, EXTVACDBSTAT_COLUMNS);
 
 	PG_RETURN_VOID();
-}
\ No newline at end of file
+ }
\ No newline at end of file
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index 8359cf3e984..f8112d54f52 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -2239,82 +2239,80 @@ pg_stat_user_tables| SELECT relid,
   WHERE ((schemaname <> ALL (ARRAY['pg_catalog'::name, 'information_schema'::name])) AND (schemaname !~ '^pg_toast'::text));
 pg_stat_vacuum_database| SELECT db.oid AS dboid,
     db.datname AS dbname,
-    stats.db_blks_read,
-    stats.db_blks_hit,
-    stats.total_blks_dirtied,
-    stats.total_blks_written,
-    stats.wal_records,
-    stats.wal_fpi,
-    stats.wal_bytes,
-    stats.blk_read_time,
-    stats.blk_write_time,
-    stats.delay_time,
-    stats.system_time,
-    stats.user_time,
-    stats.total_time,
-    stats.interrupts
+    COALESCE(stats.db_blks_read, (0)::bigint) AS db_blks_read,
+    COALESCE(stats.db_blks_hit, (0)::bigint) AS db_blks_hit,
+    COALESCE(stats.total_blks_dirtied, (0)::bigint) AS total_blks_dirtied,
+    COALESCE(stats.total_blks_written, (0)::bigint) AS total_blks_written,
+    COALESCE(stats.wal_records, (0)::bigint) AS wal_records,
+    COALESCE(stats.wal_fpi, (0)::bigint) AS wal_fpi,
+    COALESCE(stats.wal_bytes, (0)::numeric) AS wal_bytes,
+    COALESCE(stats.blk_read_time, (0)::double precision) AS blk_read_time,
+    COALESCE(stats.blk_write_time, (0)::double precision) AS blk_write_time,
+    COALESCE(stats.delay_time, (0)::double precision) AS delay_time,
+    COALESCE(stats.system_time, (0)::double precision) AS system_time,
+    COALESCE(stats.user_time, (0)::double precision) AS user_time,
+    COALESCE(stats.total_time, (0)::double precision) AS total_time,
+    COALESCE(stats.interrupts, 0) AS interrupts
    FROM (pg_database db
-     LEFT JOIN LATERAL pg_stat_vacuum_database(db.oid) stats(dboid, db_blks_read, db_blks_hit, total_blks_dirtied, total_blks_written, wal_records, wal_fpi, wal_bytes, blk_read_time, blk_write_time, delay_time, system_time, user_time, total_time, interrupts) ON ((db.oid = stats.dboid)));
+     LEFT JOIN LATERAL pg_stat_vacuum_database(db.oid) stats(dboid, db_blks_read, db_blks_hit, total_blks_dirtied, total_blks_written, wal_records, wal_fpi, wal_bytes, blk_read_time, blk_write_time, delay_time, system_time, user_time, total_time, interrupts) ON (true));
 pg_stat_vacuum_indexes| SELECT rel.oid AS relid,
     ns.nspname AS schema,
     rel.relname,
-    stats.total_blks_read,
-    stats.total_blks_hit,
-    stats.total_blks_dirtied,
-    stats.total_blks_written,
-    stats.rel_blks_read,
-    stats.rel_blks_hit,
-    stats.pages_deleted,
-    stats.tuples_deleted,
-    stats.wal_records,
-    stats.wal_fpi,
-    stats.wal_bytes,
-    stats.blk_read_time,
-    stats.blk_write_time,
-    stats.delay_time,
-    stats.system_time,
-    stats.user_time,
-    stats.total_time,
-    stats.interrupts
-   FROM pg_database db,
-    pg_class rel,
-    pg_namespace ns,
-    LATERAL pg_stat_vacuum_indexes(rel.oid) stats(relid, total_blks_read, total_blks_hit, total_blks_dirtied, total_blks_written, rel_blks_read, rel_blks_hit, pages_deleted, tuples_deleted, wal_records, wal_fpi, wal_bytes, blk_read_time, blk_write_time, delay_time, system_time, user_time, total_time, interrupts)
-  WHERE ((db.datname = current_database()) AND (rel.oid = stats.relid) AND (ns.oid = rel.relnamespace) AND (rel.relkind = 'i'::"char"));
+    COALESCE(stats.total_blks_read, (0)::bigint) AS total_blks_read,
+    COALESCE(stats.total_blks_hit, (0)::bigint) AS total_blks_hit,
+    COALESCE(stats.total_blks_dirtied, (0)::bigint) AS total_blks_dirtied,
+    COALESCE(stats.total_blks_written, (0)::bigint) AS total_blks_written,
+    COALESCE(stats.rel_blks_read, (0)::bigint) AS rel_blks_read,
+    COALESCE(stats.rel_blks_hit, (0)::bigint) AS rel_blks_hit,
+    COALESCE(stats.pages_deleted, (0)::bigint) AS pages_deleted,
+    COALESCE(stats.tuples_deleted, (0)::bigint) AS tuples_deleted,
+    COALESCE(stats.wal_records, (0)::bigint) AS wal_records,
+    COALESCE(stats.wal_fpi, (0)::bigint) AS wal_fpi,
+    COALESCE(stats.wal_bytes, (0)::numeric) AS wal_bytes,
+    COALESCE(stats.blk_read_time, (0)::double precision) AS blk_read_time,
+    COALESCE(stats.blk_write_time, (0)::double precision) AS blk_write_time,
+    COALESCE(stats.delay_time, (0)::double precision) AS delay_time,
+    COALESCE(stats.system_time, (0)::double precision) AS system_time,
+    COALESCE(stats.user_time, (0)::double precision) AS user_time,
+    COALESCE(stats.total_time, (0)::double precision) AS total_time,
+    COALESCE(stats.interrupts, 0) AS interrupts
+   FROM ((pg_class rel
+     JOIN pg_namespace ns ON ((ns.oid = rel.relnamespace)))
+     LEFT JOIN LATERAL pg_stat_vacuum_indexes(rel.oid) stats(relid, total_blks_read, total_blks_hit, total_blks_dirtied, total_blks_written, rel_blks_read, rel_blks_hit, pages_deleted, tuples_deleted, wal_records, wal_fpi, wal_bytes, blk_read_time, blk_write_time, delay_time, system_time, user_time, total_time, interrupts) ON (true))
+  WHERE (rel.relkind = 'i'::"char");
 pg_stat_vacuum_tables| SELECT rel.oid AS relid,
     ns.nspname AS schema,
     rel.relname,
-    stats.total_blks_read,
-    stats.total_blks_hit,
-    stats.total_blks_dirtied,
-    stats.total_blks_written,
-    stats.rel_blks_read,
-    stats.rel_blks_hit,
-    stats.pages_scanned,
-    stats.pages_removed,
-    stats.pages_frozen,
-    stats.pages_all_visible,
-    stats.tuples_deleted,
-    stats.tuples_frozen,
-    stats.dead_tuples,
-    stats.index_vacuum_count,
-    stats.rev_all_frozen_pages,
-    stats.rev_all_visible_pages,
-    stats.wal_records,
-    stats.wal_fpi,
-    stats.wal_bytes,
-    stats.blk_read_time,
-    stats.blk_write_time,
-    stats.delay_time,
-    stats.system_time,
-    stats.user_time,
-    stats.total_time,
-    stats.interrupts
-   FROM pg_database db,
-    pg_class rel,
-    pg_namespace ns,
-    LATERAL pg_stat_vacuum_tables(rel.oid) stats(relid, total_blks_read, total_blks_hit, total_blks_dirtied, total_blks_written, rel_blks_read, rel_blks_hit, pages_scanned, pages_removed, pages_frozen, pages_all_visible, tuples_deleted, tuples_frozen, dead_tuples, index_vacuum_count, rev_all_frozen_pages, rev_all_visible_pages, wal_records, wal_fpi, wal_bytes, blk_read_time, blk_write_time, delay_time, system_time, user_time, total_time, interrupts)
-  WHERE ((db.datname = current_database()) AND (rel.oid = stats.relid) AND (ns.oid = rel.relnamespace) AND (rel.relkind = 'r'::"char"));
+    COALESCE(stats.total_blks_read, (0)::bigint) AS total_blks_read,
+    COALESCE(stats.total_blks_hit, (0)::bigint) AS total_blks_hit,
+    COALESCE(stats.total_blks_dirtied, (0)::bigint) AS total_blks_dirtied,
+    COALESCE(stats.total_blks_written, (0)::bigint) AS total_blks_written,
+    COALESCE(stats.rel_blks_read, (0)::bigint) AS rel_blks_read,
+    COALESCE(stats.rel_blks_hit, (0)::bigint) AS rel_blks_hit,
+    COALESCE(stats.pages_scanned, (0)::bigint) AS pages_scanned,
+    COALESCE(stats.pages_removed, (0)::bigint) AS pages_removed,
+    COALESCE(stats.pages_frozen, (0)::bigint) AS pages_frozen,
+    COALESCE(stats.pages_all_visible, (0)::bigint) AS pages_all_visible,
+    COALESCE(stats.tuples_deleted, (0)::bigint) AS tuples_deleted,
+    COALESCE(stats.tuples_frozen, (0)::bigint) AS tuples_frozen,
+    COALESCE(stats.dead_tuples, (0)::bigint) AS dead_tuples,
+    COALESCE(stats.index_vacuum_count, (0)::bigint) AS index_vacuum_count,
+    COALESCE(stats.rev_all_frozen_pages, (0)::bigint) AS rev_all_frozen_pages,
+    COALESCE(stats.rev_all_visible_pages, (0)::bigint) AS rev_all_visible_pages,
+    COALESCE(stats.wal_records, (0)::bigint) AS wal_records,
+    COALESCE(stats.wal_fpi, (0)::bigint) AS wal_fpi,
+    COALESCE(stats.wal_bytes, (0)::numeric) AS wal_bytes,
+    COALESCE(stats.blk_read_time, (0)::double precision) AS blk_read_time,
+    COALESCE(stats.blk_write_time, (0)::double precision) AS blk_write_time,
+    COALESCE(stats.delay_time, (0)::double precision) AS delay_time,
+    COALESCE(stats.system_time, (0)::double precision) AS system_time,
+    COALESCE(stats.user_time, (0)::double precision) AS user_time,
+    COALESCE(stats.total_time, (0)::double precision) AS total_time,
+    COALESCE(stats.interrupts, 0) AS interrupts
+   FROM ((pg_class rel
+     JOIN pg_namespace ns ON ((ns.oid = rel.relnamespace)))
+     LEFT JOIN LATERAL pg_stat_vacuum_tables(rel.oid) stats(relid, total_blks_read, total_blks_hit, total_blks_dirtied, total_blks_written, rel_blks_read, rel_blks_hit, pages_scanned, pages_removed, pages_frozen, pages_all_visible, tuples_deleted, tuples_frozen, dead_tuples, index_vacuum_count, rev_all_frozen_pages, rev_all_visible_pages, wal_records, wal_fpi, wal_bytes, blk_read_time, blk_write_time, delay_time, system_time, user_time, total_time, interrupts) ON (true))
+  WHERE (rel.relkind = 'r'::"char");
 pg_stat_wal| SELECT wal_records,
     wal_fpi,
     wal_bytes,
diff --git a/src/test/regress/expected/vacuum_index_statistics.out b/src/test/regress/expected/vacuum_index_statistics.out
index 4f6e305710e..166de176e29 100644
--- a/src/test/regress/expected/vacuum_index_statistics.out
+++ b/src/test/regress/expected/vacuum_index_statistics.out
@@ -35,9 +35,10 @@ DELETE FROM vestat WHERE x % 2 = 0;
 SELECT vt.relname,relpages,pages_deleted,tuples_deleted
 FROM pg_stat_vacuum_indexes vt, pg_class c
 WHERE vt.relname = 'vestat_pkey' AND vt.relid = c.oid;
- relname | relpages | pages_deleted | tuples_deleted 
----------+----------+---------------+----------------
-(0 rows)
+   relname   | relpages | pages_deleted | tuples_deleted 
+-------------+----------+---------------+----------------
+ vestat_pkey |       30 |             0 |              0
+(1 row)
 
 SELECT relpages AS irp
 FROM pg_class c
diff --git a/src/test/regress/expected/vacuum_tables_and_db_statistics.out b/src/test/regress/expected/vacuum_tables_and_db_statistics.out
index 94dd3214349..7a0b3ba96e1 100644
--- a/src/test/regress/expected/vacuum_tables_and_db_statistics.out
+++ b/src/test/regress/expected/vacuum_tables_and_db_statistics.out
@@ -26,8 +26,6 @@ SELECT pg_stat_force_next_flush();
 (1 row)
 
 \set sample_size 10000
-SET vacuum_freeze_min_age = 0;
-SET vacuum_freeze_table_age = 0;
 --SET stats_fetch_consistency = snapshot;
 CREATE TABLE vestat (x int) WITH (autovacuum_enabled = off, fillfactor = 10);
 INSERT INTO vestat SELECT x FROM generate_series(1,:sample_size) as x;
@@ -40,7 +38,8 @@ FROM pg_stat_vacuum_tables vt, pg_class c
 WHERE vt.relname = 'vestat' AND vt.relid = c.oid;
  relname | pages_frozen | tuples_deleted | relpages | pages_scanned | pages_removed 
 ---------+--------------+----------------+----------+---------------+---------------
-(0 rows)
+ vestat  |            0 |              0 |      455 |             0 |             0
+(1 row)
 
 SELECT relpages AS rp
 FROM pg_class c
@@ -179,10 +178,7 @@ FROM pg_stat_vacuum_tables WHERE relname = 'vestat';
 
 SELECT pages_frozen AS pf, pages_all_visible AS pv, rev_all_frozen_pages AS hafp,rev_all_visible_pages AS havp
 FROM pg_stat_vacuum_tables WHERE relname = 'vestat' \gset
-UPDATE vestat SET x = x1001;
-ERROR:  column "x1001" does not exist
-LINE 1: UPDATE vestat SET x = x1001;
-                              ^
+UPDATE vestat SET x = x+1001;
 VACUUM (PARALLEL 0, BUFFER_USAGE_LIMIT 128) vestat;
 SELECT pages_frozen > :pf AS pages_frozen,pages_all_visible > :pv AS pages_all_visible,rev_all_frozen_pages > :hafp AS rev_all_frozen_pages,rev_all_visible_pages > :havp AS rev_all_visible_pages
 FROM pg_stat_vacuum_tables WHERE relname = 'vestat';
@@ -259,8 +255,6 @@ WHERE dbname = 'regression_statistic_vacuum_db';
 (1 row)
 
 \c regression_statistic_vacuum_db
-RESET vacuum_freeze_min_age;
-RESET vacuum_freeze_table_age;
 DROP TABLE vestat CASCADE;
 \c regression_statistic_vacuum_db1;
 SELECT count(*)
diff --git a/src/test/regress/sql/vacuum_tables_and_db_statistics.sql b/src/test/regress/sql/vacuum_tables_and_db_statistics.sql
index af1281b3b63..a3ddc9419de 100644
--- a/src/test/regress/sql/vacuum_tables_and_db_statistics.sql
+++ b/src/test/regress/sql/vacuum_tables_and_db_statistics.sql
@@ -21,8 +21,7 @@ SET track_functions TO 'all';
 SELECT pg_stat_force_next_flush();
 
 \set sample_size 10000
-SET vacuum_freeze_min_age = 0;
-SET vacuum_freeze_table_age = 0;
+
 --SET stats_fetch_consistency = snapshot;
 CREATE TABLE vestat (x int) WITH (autovacuum_enabled = off, fillfactor = 10);
 INSERT INTO vestat SELECT x FROM generate_series(1,:sample_size) as x;
@@ -145,7 +144,7 @@ FROM pg_stat_vacuum_tables WHERE relname = 'vestat';
 SELECT pages_frozen AS pf, pages_all_visible AS pv, rev_all_frozen_pages AS hafp,rev_all_visible_pages AS havp
 FROM pg_stat_vacuum_tables WHERE relname = 'vestat' \gset
 
-UPDATE vestat SET x = x1001;
+UPDATE vestat SET x = x+1001;
 VACUUM (PARALLEL 0, BUFFER_USAGE_LIMIT 128) vestat;
 
 SELECT pages_frozen > :pf AS pages_frozen,pages_all_visible > :pv AS pages_all_visible,rev_all_frozen_pages > :hafp AS rev_all_frozen_pages,rev_all_visible_pages > :havp AS rev_all_visible_pages
@@ -204,8 +203,6 @@ WHERE dbname = 'regression_statistic_vacuum_db';
 
 \c regression_statistic_vacuum_db
 
-RESET vacuum_freeze_min_age;
-RESET vacuum_freeze_table_age;
 DROP TABLE vestat CASCADE;
 
 \c regression_statistic_vacuum_db1;