diff --git a/doc/src/sgml/system-views.sgml b/doc/src/sgml/system-views.sgml index 42d3ad21486..8cbccdc4a4d 100644 --- a/doc/src/sgml/system-views.sgml +++ b/doc/src/sgml/system-views.sgml @@ -5360,7 +5360,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx Number of times blocks of this index were already found in the buffer cache by vacuum operations, so that a read was not necessary (this only includes hits in the - &project; buffer cache, not the operating system's file system cache) + project; buffer cache, not the operating system's file system cache) @@ -5601,7 +5601,7 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx Number of times blocks of this table were already found in the buffer cache by vacuum operations, so that a read was not necessary (this only includes hits in the - &project; buffer cache, not the operating system's file system cache) + project; buffer cache, not the operating system's file system cache) diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index ca3ad09727e..76a2ffff2bb 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -1420,7 +1420,7 @@ FROM pg_database db, pg_class rel, pg_namespace ns, - pg_stat_vacuum_tables(db.oid, rel.oid) stats + pg_stat_vacuum_tables(rel.oid) stats WHERE db.datname = current_database() AND rel.oid = stats.relid AND @@ -1460,7 +1460,7 @@ FROM pg_database db, pg_class rel, pg_namespace ns, - pg_stat_vacuum_indexes(db.oid, rel.oid) stats + pg_stat_vacuum_indexes(rel.oid) stats WHERE db.datname = current_database() AND rel.oid = stats.relid AND diff --git a/src/backend/utils/activity/pgstat.c b/src/backend/utils/activity/pgstat.c index 3c50bea379c..b633408777e 100644 --- a/src/backend/utils/activity/pgstat.c +++ b/src/backend/utils/activity/pgstat.c @@ -146,6 +146,34 @@ #define PGSTAT_FILE_ENTRY_HASH 'S' /* stats entry identified by * PgStat_HashKey */ +/* hash table for statistics snapshots entry */ +typedef struct PgStat_SnapshotEntry +{ + PgStat_HashKey key; + char status; /* for simplehash use */ + void *data; /* the stats data itself */ +} PgStat_SnapshotEntry; + + +/* ---------- + * Backend-local Hash Table Definitions + * ---------- + */ + +/* for stats snapshot entries */ +#define SH_PREFIX pgstat_snapshot +#define SH_ELEMENT_TYPE PgStat_SnapshotEntry +#define SH_KEY_TYPE PgStat_HashKey +#define SH_KEY key +#define SH_HASH_KEY(tb, key) \ + pgstat_hash_hash_key(&key, sizeof(PgStat_HashKey), NULL) +#define SH_EQUAL(tb, a, b) \ + pgstat_cmp_hash_key(&a, &b, sizeof(PgStat_HashKey), NULL) == 0 +#define SH_SCOPE static inline +#define SH_DEFINE +#define SH_DECLARE +#include "lib/simplehash.h" + /* ---------- * Local function forward declarations @@ -232,7 +260,6 @@ static bool pgstat_is_initialized = false; static bool pgstat_is_shutdown = false; #endif - /* * The different kinds of built-in statistics. * diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 0c490ba5f1a..9a9b6f807bf 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -33,6 +33,41 @@ #include "utils/timestamp.h" #include "utils/pgstat_internal.h" +/* hash table for statistics snapshots entry */ +typedef struct PgStat_SnapshotEntry +{ + PgStat_HashKey key; + char status; /* for simplehash use */ + void *data; /* the stats data itself */ +} PgStat_SnapshotEntry; + +/* ---------- + * Backend-local Hash Table Definitions + * ---------- + */ + +/* for stats snapshot entries */ +#define SH_PREFIX pgstat_snapshot +#define SH_ELEMENT_TYPE PgStat_SnapshotEntry +#define SH_KEY_TYPE PgStat_HashKey +#define SH_KEY key +#define SH_HASH_KEY(tb, key) \ + pgstat_hash_hash_key(&key, sizeof(PgStat_HashKey), NULL) +#define SH_EQUAL(tb, a, b) \ + pgstat_cmp_hash_key(&a, &b, sizeof(PgStat_HashKey), NULL) == 0 +#define SH_SCOPE static inline +#define SH_DEFINE +#define SH_DECLARE +#include "lib/simplehash.h" + +typedef pgstat_snapshot_iterator SnapshotIterator; + +#define InitSnapshotIterator(htable, iter) \ + pgstat_snapshot_start_iterate(htable, iter); +#define ScanStatSnapshot(htable, iter) \ + pgstat_snapshot_iterate(htable, iter) + + #define UINT32_ACCESS_ONCE(var) ((uint32)(*((volatile uint32 *)&(var)))) #define HAS_PGSTAT_PERMISSIONS(role) (has_privs_of_role(GetUserId(), ROLE_PG_READ_ALL_STATS) || has_privs_of_role(GetUserId(), role)) @@ -2039,47 +2074,9 @@ pg_stat_have_stats(PG_FUNCTION_ARGS) #define EXTVACDBSTAT_COLUMNS 15 #define EXTVACSTAT_COLUMNS Max(EXTVACHEAPSTAT_COLUMNS, EXTVACIDXSTAT_COLUMNS) -static Oid CurrentDatabaseId = InvalidOid; - - -/* - * Fetch stat collector data for specific database and table, which loading from disc. - * It is maybe expensive, but i guess we won't use that machinery often. - * The kind of bufferization is based on CurrentDatabaseId value. - */ -static PgStat_StatTabEntry * -fetch_dbstat_tabentry(Oid dbid, Oid relid) -{ - Oid storedMyDatabaseId = MyDatabaseId; - PgStat_StatTabEntry *tabentry = NULL; - - if (OidIsValid(CurrentDatabaseId) && CurrentDatabaseId == dbid) - /* Quick path when we read data from the same database */ - return pgstat_fetch_stat_tabentry(relid); - - pgstat_clear_snapshot(); - - /* Tricky turn here: enforce pgstat to think that our database has dbid */ - - MyDatabaseId = dbid; - - PG_TRY(); - { - tabentry = pgstat_fetch_stat_tabentry(relid); - MyDatabaseId = storedMyDatabaseId; - } - PG_CATCH(); - { - MyDatabaseId = storedMyDatabaseId; - } - PG_END_TRY(); - - return tabentry; -} - static void -tuplestore_put_for_database(Oid dbid, Tuplestorestate *tupstore, - TupleDesc tupdesc, PgStatShared_Database *dbentry, int ncolumns) +tuplestore_put_for_database(Oid dbid, ReturnSetInfo *rsinfo, + PgStatShared_Database *dbentry) { Datum values[EXTVACDBSTAT_COLUMNS]; bool nulls[EXTVACDBSTAT_COLUMNS]; @@ -2113,15 +2110,13 @@ tuplestore_put_for_database(Oid dbid, Tuplestorestate *tupstore, values[i++] = Float8GetDatum(dbentry->stats.vacuum_ext.total_time); values[i++] = Int32GetDatum(dbentry->stats.vacuum_ext.interrupts); - - Assert(i == ncolumns); - - tuplestore_putvalues(tupstore, tupdesc, values, nulls); + Assert(i == rsinfo->setDesc->natts); + tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls); } static void -tuplestore_put_for_relation(Oid relid, Tuplestorestate *tupstore, - TupleDesc tupdesc, PgStat_StatTabEntry *tabentry, int ncolumns) +tuplestore_put_for_relation(Oid relid, ReturnSetInfo *rsinfo, + PgStat_StatTabEntry *tabentry) { Datum values[EXTVACSTAT_COLUMNS]; bool nulls[EXTVACSTAT_COLUMNS]; @@ -2179,23 +2174,17 @@ tuplestore_put_for_relation(Oid relid, Tuplestorestate *tupstore, values[i++] = Float8GetDatum(tabentry->vacuum_ext.total_time); values[i++] = Int32GetDatum(tabentry->vacuum_ext.interrupts); - Assert(i == ncolumns); - - tuplestore_putvalues(tupstore, tupdesc, values, nulls); + Assert(i == rsinfo->setDesc->natts); + tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc, values, nulls); } /* * Get the vacuum statistics for the heap tables or indexes. */ -static Datum +static void pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns) { ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo; - MemoryContext per_query_ctx; - MemoryContext oldcontext; - Tuplestorestate *tupstore; - TupleDesc tupdesc; - Oid dbid = PG_GETARG_OID(0); PgStat_StatTabEntry *tabentry; InitMaterializedSRF(fcinfo, 0); @@ -2205,61 +2194,39 @@ pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("set-valued function called in context that cannot accept a set"))); - /* Switch to long-lived context to create the returned data structures */ - per_query_ctx = rsinfo->econtext->ecxt_per_query_memory; - oldcontext = MemoryContextSwitchTo(per_query_ctx); - - /* Build a tuple descriptor for our result type */ - if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) - elog(ERROR, "return type must be a row type"); - - Assert(tupdesc->natts == ncolumns); - - tupstore = tuplestore_begin_heap(true, false, work_mem); - Assert (tupstore != NULL); - rsinfo->setResult = tupstore; - rsinfo->setDesc = tupdesc; - - MemoryContextSwitchTo(oldcontext); + Assert(rsinfo->setDesc->natts == ncolumns); + Assert(rsinfo->setResult != NULL); if (type == PGSTAT_EXTVAC_INDEX || type == PGSTAT_EXTVAC_HEAP) { - Oid relid = PG_GETARG_OID(1); + Oid relid = PG_GETARG_OID(0); - /* Load table statistics for specified database. */ + /* Load table statistics for specified relation. */ if (OidIsValid(relid)) { - tabentry = fetch_dbstat_tabentry(dbid, 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. */ - PG_RETURN_NULL(); + return; - tuplestore_put_for_relation(relid, tupstore, tupdesc, tabentry, ncolumns); + tuplestore_put_for_relation(relid, rsinfo, tabentry); } else { SnapshotIterator hashiter; PgStat_SnapshotEntry *entry; - Oid storedMyDatabaseId = MyDatabaseId; - - pgstat_update_snapshot(PGSTAT_KIND_RELATION); - MyDatabaseId = storedMyDatabaseId; - /* Iterate the snapshot */ InitSnapshotIterator(pgStatLocal.snapshot.stats, &hashiter); while ((entry = ScanStatSnapshot(pgStatLocal.snapshot.stats, &hashiter)) != NULL) { - Oid reloid; - CHECK_FOR_INTERRUPTS(); tabentry = (PgStat_StatTabEntry *) entry->data; - reloid = entry->key.objoid; if (tabentry != NULL && tabentry->vacuum_ext.type == type) - tuplestore_put_for_relation(reloid, tupstore, tupdesc, tabentry, ncolumns); + tuplestore_put_for_relation(relid, rsinfo, tabentry); } } } @@ -2267,10 +2234,7 @@ pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns) { PgStatShared_Database *dbentry; PgStat_EntryRef *entry_ref; - Oid storedMyDatabaseId = MyDatabaseId; - - pgstat_update_snapshot(PGSTAT_KIND_DATABASE); - MyDatabaseId = storedMyDatabaseId; + Oid dbid = PG_GETARG_OID(0); if (OidIsValid(dbid)) { @@ -2280,15 +2244,12 @@ pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns) if (dbentry == NULL) /* Table doesn't exist or isn't a heap relation */ - PG_RETURN_NULL(); + return; - tuplestore_put_for_database(dbid, tupstore, tupdesc, dbentry, ncolumns); + tuplestore_put_for_database(dbid, rsinfo, dbentry); pgstat_unlock_entry(entry_ref); } - else - PG_RETURN_NULL(); } - PG_RETURN_NULL(); } /* @@ -2297,9 +2258,9 @@ pg_stats_vacuum(FunctionCallInfo fcinfo, ExtVacReportType type, int ncolumns) Datum pg_stat_vacuum_tables(PG_FUNCTION_ARGS) { - return pg_stats_vacuum(fcinfo, PGSTAT_EXTVAC_HEAP, EXTVACHEAPSTAT_COLUMNS); + pg_stats_vacuum(fcinfo, PGSTAT_EXTVAC_HEAP, EXTVACHEAPSTAT_COLUMNS); - PG_RETURN_NULL(); + PG_RETURN_VOID(); } /* @@ -2308,10 +2269,11 @@ pg_stat_vacuum_tables(PG_FUNCTION_ARGS) Datum pg_stat_vacuum_indexes(PG_FUNCTION_ARGS) { - return pg_stats_vacuum(fcinfo, PGSTAT_EXTVAC_INDEX, EXTVACIDXSTAT_COLUMNS); + pg_stats_vacuum(fcinfo, PGSTAT_EXTVAC_INDEX, EXTVACIDXSTAT_COLUMNS); + + PG_RETURN_VOID(); + } - PG_RETURN_NULL(); -} /* * Get the vacuum statistics for the database. @@ -2319,7 +2281,7 @@ pg_stat_vacuum_indexes(PG_FUNCTION_ARGS) Datum pg_stat_vacuum_database(PG_FUNCTION_ARGS) { - return pg_stats_vacuum(fcinfo, PGSTAT_EXTVAC_DB, EXTVACDBSTAT_COLUMNS); + pg_stats_vacuum(fcinfo, PGSTAT_EXTVAC_DB, EXTVACDBSTAT_COLUMNS); - PG_RETURN_NULL(); -} + PG_RETURN_VOID(); +} \ No newline at end of file diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index b2e881aa89d..d4696d0c055 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -12258,20 +12258,20 @@ descr => 'pg_stat_vacuum_tables return stats values', proname => 'pg_stat_vacuum_tables', provolatile => 's', prorettype => 'record',proisstrict => 'f', proretset => 't', - proargtypes => 'oid oid', - proallargtypes => '{oid,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}', - proargmodes => '{i,i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', - proargnames => '{dboid,reloid,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}', + 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}', + proargmodes => '{i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', + proargnames => '{reloid,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}', 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', proretset => 't', - proargtypes => 'oid oid', - proallargtypes => '{oid,oid,oid,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,numeric,float8,float8,float8,float8,float8,float8,int4}', - proargmodes => '{i,i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', - proargnames => '{dboid,reloid,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}', - prosrc => 'pg_stat_vacuum_indexes' } + proargtypes => 'oid', + proallargtypes => '{oid,oid,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8,numeric,float8,float8,float8,float8,float8,float8,int4}', + proargmodes => '{i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}', + proargnames => '{reloid,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}', + 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', diff --git a/src/include/utils/pgstat_internal.h b/src/include/utils/pgstat_internal.h index 715ae1b6fd4..24ab3ceb717 100644 --- a/src/include/utils/pgstat_internal.h +++ b/src/include/utils/pgstat_internal.h @@ -874,38 +874,4 @@ pgstat_get_custom_snapshot_data(PgStat_Kind kind) return pgStatLocal.snapshot.custom_data[idx]; } -/* hash table for statistics snapshots entry */ -typedef struct PgStat_SnapshotEntry -{ - PgStat_HashKey key; - char status; /* for simplehash use */ - void *data; /* the stats data itself */ -} PgStat_SnapshotEntry; - -/* ---------- - * Backend-local Hash Table Definitions - * ---------- - */ - -/* for stats snapshot entries */ -#define SH_PREFIX pgstat_snapshot -#define SH_ELEMENT_TYPE PgStat_SnapshotEntry -#define SH_KEY_TYPE PgStat_HashKey -#define SH_KEY key -#define SH_HASH_KEY(tb, key) \ - pgstat_hash_hash_key(&key, sizeof(PgStat_HashKey), NULL) -#define SH_EQUAL(tb, a, b) \ - pgstat_cmp_hash_key(&a, &b, sizeof(PgStat_HashKey), NULL) == 0 -#define SH_SCOPE static inline -#define SH_DEFINE -#define SH_DECLARE -#include "lib/simplehash.h" - -typedef pgstat_snapshot_iterator SnapshotIterator; - -#define InitSnapshotIterator(htable, iter) \ - pgstat_snapshot_start_iterate(htable, iter); -#define ScanStatSnapshot(htable, iter) \ - pgstat_snapshot_iterate(htable, iter) - #endif /* PGSTAT_INTERNAL_H */ diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index c4388dd0da1..5d7f73c25fd 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -2271,7 +2271,7 @@ pg_stat_vacuum_indexes| SELECT rel.oid AS relid, FROM pg_database db, pg_class rel, pg_namespace ns, - LATERAL pg_stat_vacuum_indexes(db.oid, 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) + 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)); pg_stat_vacuum_tables| SELECT rel.oid AS relid, ns.nspname AS schema, @@ -2305,7 +2305,7 @@ pg_stat_vacuum_tables| SELECT rel.oid AS relid, FROM pg_database db, pg_class rel, pg_namespace ns, - LATERAL pg_stat_vacuum_tables(db.oid, 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) + 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)); pg_stat_wal| SELECT wal_records, wal_fpi, 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 f0537aac430..ec0cf97e2da 100644 --- a/src/test/regress/expected/vacuum_tables_and_db_statistics.out +++ b/src/test/regress/expected/vacuum_tables_and_db_statistics.out @@ -6,9 +6,9 @@ -- number of frozen and visible pages removed by backend. -- Statistic wal_fpi is not displayed in this test because its behavior is unstable. -- -CREATE DATABASE statistic_vacuum_database; -CREATE DATABASE statistic_vacuum_database1; -\c statistic_vacuum_database; +CREATE DATABASE regression_statistic_vacuum_db; +CREATE DATABASE regression_statistic_vacuum_db1; +\c regression_statistic_vacuum_db; -- conditio sine qua non SHOW track_counts; -- must be on track_counts @@ -212,9 +212,9 @@ SELECT dbname, FROM pg_stat_vacuum_database WHERE dbname = current_database(); - dbname | db_blks_hit | total_blks_dirtied | total_blks_written | wal_records | wal_fpi | wal_bytes | user_time | total_time ----------------------------+-------------+--------------------+--------------------+-------------+---------+-----------+-----------+------------ - statistic_vacuum_database | t | t | t | t | t | t | t | t + dbname | db_blks_hit | total_blks_dirtied | total_blks_written | wal_records | wal_fpi | wal_bytes | user_time | total_time +--------------------------------+-------------+--------------------+--------------------+-------------+---------+-----------+-----------+------------ + regression_statistic_vacuum_db | t | t | t | t | t | t | t | t (1 row) DROP TABLE vestat CASCADE; @@ -230,7 +230,7 @@ INSERT INTO vestat SELECT x FROM generate_series(1,:sample_size) as x; ANALYZE vestat; UPDATE vestat SET x = 10001; VACUUM (PARALLEL 0, BUFFER_USAGE_LIMIT 128) vestat; -\c statistic_vacuum_database1; +\c regression_statistic_vacuum_db1; -- Now check vacuum statistics for postgres database from another database SELECT dbname, db_blks_hit > 0 AS db_blks_hit, @@ -243,20 +243,20 @@ SELECT dbname, total_time > 0 AS total_time FROM pg_stat_vacuum_database -WHERE dbname = 'statistic_vacuum_database'; - dbname | db_blks_hit | total_blks_dirtied | total_blks_written | wal_records | wal_fpi | wal_bytes | user_time | total_time ----------------------------+-------------+--------------------+--------------------+-------------+---------+-----------+-----------+------------ - statistic_vacuum_database | t | t | t | t | t | t | t | t +WHERE dbname = 'regression_statistic_vacuum_db'; + dbname | db_blks_hit | total_blks_dirtied | total_blks_written | wal_records | wal_fpi | wal_bytes | user_time | total_time +--------------------------------+-------------+--------------------+--------------------+-------------+---------+-----------+-----------+------------ + regression_statistic_vacuum_db | t | t | t | t | t | t | t | t (1 row) -\c statistic_vacuum_database +\c regression_statistic_vacuum_db RESET vacuum_freeze_min_age; RESET vacuum_freeze_table_age; DROP TABLE vestat CASCADE; -\c statistic_vacuum_database1; +\c regression_statistic_vacuum_db1; SELECT count(*) FROM pg_database d -CROSS JOIN pg_stat_vacuum_tables(d.oid, 0) +CROSS JOIN pg_stat_vacuum_tables(0) WHERE oid = 0; -- must be 0 count ------- @@ -273,5 +273,5 @@ WHERE oid = 0; -- must be 0 (1 row) \c postgres -DROP DATABASE statistic_vacuum_database1; -DROP DATABASE statistic_vacuum_database; +DROP DATABASE regression_statistic_vacuum_db1; +DROP DATABASE regression_statistic_vacuum_db; 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 43cc8068b0f..ed9bb852625 100644 --- a/src/test/regress/sql/vacuum_tables_and_db_statistics.sql +++ b/src/test/regress/sql/vacuum_tables_and_db_statistics.sql @@ -7,9 +7,9 @@ -- Statistic wal_fpi is not displayed in this test because its behavior is unstable. -- -CREATE DATABASE statistic_vacuum_database; -CREATE DATABASE statistic_vacuum_database1; -\c statistic_vacuum_database; +CREATE DATABASE regression_statistic_vacuum_db; +CREATE DATABASE regression_statistic_vacuum_db1; +\c regression_statistic_vacuum_db; -- conditio sine qua non SHOW track_counts; -- must be on @@ -184,7 +184,7 @@ ANALYZE vestat; UPDATE vestat SET x = 10001; VACUUM (PARALLEL 0, BUFFER_USAGE_LIMIT 128) vestat; -\c statistic_vacuum_database1; +\c regression_statistic_vacuum_db1; -- Now check vacuum statistics for postgres database from another database SELECT dbname, @@ -198,18 +198,18 @@ SELECT dbname, total_time > 0 AS total_time FROM pg_stat_vacuum_database -WHERE dbname = 'statistic_vacuum_database'; +WHERE dbname = 'regression_statistic_vacuum_db'; -\c statistic_vacuum_database +\c regression_statistic_vacuum_db RESET vacuum_freeze_min_age; RESET vacuum_freeze_table_age; DROP TABLE vestat CASCADE; -\c statistic_vacuum_database1; +\c regression_statistic_vacuum_db1; SELECT count(*) FROM pg_database d -CROSS JOIN pg_stat_vacuum_tables(d.oid, 0) +CROSS JOIN pg_stat_vacuum_tables(0) WHERE oid = 0; -- must be 0 SELECT count(*) @@ -218,5 +218,5 @@ CROSS JOIN pg_stat_vacuum_database(0) WHERE oid = 0; -- must be 0 \c postgres -DROP DATABASE statistic_vacuum_database1; -DROP DATABASE statistic_vacuum_database; +DROP DATABASE regression_statistic_vacuum_db1; +DROP DATABASE regression_statistic_vacuum_db;