Summary
The pg_stat_all_tables view will contain one row for each table in the current database (including TOAST tables), showing statistics about accesses to that specific table. The pg_stat_user_tables and pg_stat_sys_tables views contain the same information, but filtered to only show user and system tables respectively.
(Description quoted from the official PostgreSQL documentation.)
Columns
The pg_stat_all_tables statistics view exposes the following columns (names, types and descriptions are taken verbatim from the PostgreSQL documentation):
relidoid
OID of a tableschemanamename
Name of the schema that this table is inrelnamename
Name of this tableseq_scanbigint
Number of sequential scans initiated on this tablelast_seq_scantimestamp with time zone
The time of the last sequential scan on this table, based on the most recent transaction stop timeseq_tup_readbigint
Number of live rows fetched by sequential scansidx_scanbigint
Number of index scans initiated on this tablelast_idx_scantimestamp with time zone
The time of the last index scan on this table, based on the most recent transaction stop timeidx_tup_fetchbigint
Number of live rows fetched by index scansn_tup_insbigint
Total number of rows insertedn_tup_updbigint
Total number of rows updated. (This includes row updates counted in n_tup_hot_upd and n_tup_newpage_upd, and remaining non-HOT updates.)n_tup_delbigint
Total number of rows deletedn_tup_hot_updbigint
Number of rows HOT updated. These are updates where no successor versions are required in indexes.n_tup_newpage_updbigint
Number of rows updated where the successor version goes onto a new heap page, leaving behind an original version with a t_ctid field that points to a different heap page. These are always non-HOT updates.n_live_tupbigint
Estimated number of live rowsn_dead_tupbigint
Estimated number of dead rowsn_mod_since_analyzebigint
Estimated number of rows modified since this table was last analyzedn_ins_since_vacuumbigint
Estimated number of rows inserted since this table was last vacuumed (not counting VACUUM FULL)last_vacuumtimestamp with time zone
Last time at which this table was manually vacuumed (not counting VACUUM FULL)last_autovacuumtimestamp with time zone
Last time at which this table was vacuumed by the autovacuum daemonlast_analyzetimestamp with time zone
Last time at which this table was manually analyzedlast_autoanalyzetimestamp with time zone
Last time at which this table was analyzed by the autovacuum daemonvacuum_countbigint
Number of times this table has been manually vacuumed (not counting VACUUM FULL)autovacuum_countbigint
Number of times this table has been vacuumed by the autovacuum daemonanalyze_countbigint
Number of times this table has been manually analyzedautoanalyze_countbigint
Number of times this table has been analyzed by the autovacuum daemontotal_vacuum_timedouble precision
Total time this table has been manually vacuumed, in milliseconds (not counting VACUUM FULL). (This includes the time spent sleeping due to cost-based delays.)total_autovacuum_timedouble precision
Total time this table has been vacuumed by the autovacuum daemon, in milliseconds. (This includes the time spent sleeping due to cost-based delays.)total_analyze_timedouble precision
Total time this table has been manually analyzed, in milliseconds. (This includes the time spent sleeping due to cost-based delays.)total_autoanalyze_timedouble precision
Total time this table has been analyzed by the autovacuum daemon, in milliseconds. (This includes the time spent sleeping due to cost-based delays.)stats_resettimestamp with time zone
Time at which these statistics were last reset
Version applicability
Present in PostgreSQL 17, 18, 19 (verified against each release’s documentation). This is a long-standing system object that also exists in earlier PostgreSQL releases.
Related & references
Reference: PostgreSQL documentation — pg_stat_all_tables.