diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 11820a5791c..5406102dcbf 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -2235,6 +2235,8 @@ pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns) SnapshotIterator hashiter; PgStat_SnapshotEntry *entry; + pgstat_update_snapshot(PGSTAT_KIND_RELATION); + /* Iterate the snapshot */ InitSnapshotIterator(pgStatLocal.snapshot.stats, &hashiter); @@ -2245,7 +2247,7 @@ pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns) tabentry = (PgStat_StatTabEntry *) entry->data; if (tabentry != NULL && tabentry->vacuum_ext.type == type) - tuplestore_put_for_relation(relid, rsinfo, tabentry); + tuplestore_put_for_relation(entry->key.objoid, rsinfo, tabentry); } } } @@ -2290,10 +2292,9 @@ pg_stat_vacuum_indexes(PG_FUNCTION_ARGS) { pg_stats_vacuum(fcinfo, PGSTAT_EXTVAC_INDEX, EXTVACIDXSTAT_COLUMNS); - PG_RETURN_VOID(); + PG_RETURN_VOID(); } - /* * Get the vacuum statistics for the database. */ diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index b04711bb0a3..8709a218145 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -12256,7 +12256,7 @@ prosrc => 'pg_get_wal_summarizer_state' }, { oid => '8001', descr => 'pg_stat_vacuum_tables return stats values', - proname => 'pg_stat_vacuum_tables', provolatile => 's', prorettype => 'record',proisstrict => 'f', + proname => 'pg_stat_vacuum_tables', prorows => 1000, provolatile => 's', prorettype => 'record',proisstrict => 'f', proretset => 't', proargtypes => 'oid', proallargtypes => '{oid,oid,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,numeric,float8,float8,float8,float8,float8,float8,int4}', @@ -12265,7 +12265,7 @@ prosrc => 'pg_stat_vacuum_tables' }, { oid => '8002', descr => 'pg_stat_vacuum_indexes return stats values', - proname => 'pg_stat_vacuum_indexes', provolatile => 's', prorettype => 'record',proisstrict => 'f', + proname => 'pg_stat_vacuum_indexes', prorows => 1000, provolatile => 's', prorettype => 'record',proisstrict => 'f', proretset => 't', proargtypes => 'oid', proallargtypes => '{oid,oid,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,numeric,float8,float8,float8,float8,float8,float8,int4}', @@ -12274,7 +12274,7 @@ prosrc => 'pg_stat_vacuum_indexes' }, { oid => '8003', descr => 'pg_stat_vacuum_database return stats values', - proname => 'pg_stat_vacuum_database', provolatile => 's', prorettype => 'record',proisstrict => 'f', + proname => 'pg_stat_vacuum_database', prorows => 1000, provolatile => 's', prorettype => 'record',proisstrict => 'f', proretset => 't', proargtypes => 'oid', proallargtypes => '{oid,oid,int8,int8,int8,int8,int8,int8,numeric,float8,float8,float8,float8,float8,float8,int4}', diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index 7026de157e4..0d734169f11 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -32,12 +32,9 @@ WHERE p1.prolang = 0 OR p1.prorettype = 0 OR prokind NOT IN ('f', 'a', 'w', 'p') OR provolatile NOT IN ('i', 's', 'v') OR proparallel NOT IN ('s', 'r', 'u'); - oid | proname -------+------------------------- - 8001 | pg_stat_vacuum_tables - 8002 | pg_stat_vacuum_indexes - 8003 | pg_stat_vacuum_database -(3 rows) + oid | proname +-----+--------- +(0 rows) -- prosrc should never be null; it can be empty only if prosqlbody isn't null SELECT p1.oid, p1.proname diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index bedcae46fc7..e0dcc513972 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -2278,7 +2278,7 @@ pg_stat_vacuum_indexes| SELECT rel.oid AS relid, 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)); + WHERE ((db.datname = current_database()) AND (rel.oid = stats.relid) AND (ns.oid = rel.relnamespace) AND (rel.relkind = 'i'::"char")); pg_stat_vacuum_tables| SELECT rel.oid AS relid, ns.nspname AS schema, rel.relname, @@ -2312,7 +2312,7 @@ pg_stat_vacuum_tables| SELECT rel.oid AS relid, 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)); + WHERE ((db.datname = current_database()) AND (rel.oid = stats.relid) AND (ns.oid = rel.relnamespace) AND (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 a0da8d25f1a..4f6e305710e 100644 --- a/src/test/regress/expected/vacuum_index_statistics.out +++ b/src/test/regress/expected/vacuum_index_statistics.out @@ -155,4 +155,10 @@ WHERE vt.relname = 'vestat_pkey' AND vt.relid = c.oid; vestat_pkey | f | t | t (1 row) +SELECT min(relid) FROM pg_stat_vacuum_indexes(0); + min +------ + 1232 +(1 row) + DROP TABLE vestat; 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 ec0cf97e2da..fbbb26560df 100644 --- a/src/test/regress/expected/vacuum_tables_and_db_statistics.out +++ b/src/test/regress/expected/vacuum_tables_and_db_statistics.out @@ -199,6 +199,12 @@ FROM pg_stat_vacuum_tables WHERE relname = 'vestat'; t | t | t | t (1 row) +SELECT min(relid) FROM pg_stat_vacuum_tables(0) where relid > 0; + min +------ + 1213 +(1 row) + -- Now check vacuum statistics for current database SELECT dbname, db_blks_hit > 0 AS db_blks_hit, diff --git a/src/test/regress/sql/vacuum_index_statistics.sql b/src/test/regress/sql/vacuum_index_statistics.sql index 9113fd26e6f..75e5974eb59 100644 --- a/src/test/regress/sql/vacuum_index_statistics.sql +++ b/src/test/regress/sql/vacuum_index_statistics.sql @@ -125,4 +125,6 @@ SELECT vt.relname,relpages-:irp = 0 AS relpages,pages_deleted-:ipd = 0 AS pages_ FROM pg_stat_vacuum_indexes vt, pg_class c WHERE vt.relname = 'vestat_pkey' AND vt.relid = c.oid; +SELECT min(relid) FROM pg_stat_vacuum_indexes(0); + DROP TABLE vestat; 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 ed9bb852625..3f19936ca61 100644 --- a/src/test/regress/sql/vacuum_tables_and_db_statistics.sql +++ b/src/test/regress/sql/vacuum_tables_and_db_statistics.sql @@ -159,6 +159,8 @@ 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'; +SELECT min(relid) FROM pg_stat_vacuum_tables(0) where relid > 0; + -- Now check vacuum statistics for current database SELECT dbname, db_blks_hit > 0 AS db_blks_hit,