Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
55a480b
feat: collect database wraparound and connection limit columns
vyruss May 1, 2026
5608129
feat: collect table vacuum stats, options, toast and persistence
vyruss May 1, 2026
fc48766
feat: collect index validity, scan counters and semantic key
vyruss May 1, 2026
7d747c5
feat: collect sequences from pg_sequences
vyruss May 1, 2026
5b03026
feat: collect per-backend SSL state from pg_stat_ssl
vyruss May 1, 2026
676e65c
feat: collect logical replication slot spill counters
vyruss May 1, 2026
5c9c2c4
feat: collect per-table bloat estimates
vyruss May 1, 2026
c7e8ea8
test: assert collector coverage and query column tokens
vyruss May 1, 2026
d893c6a
feat: collect available extension versions with trust and requires me…
vyruss May 1, 2026
4cb1db2
fix: read_ahead collector handles virtio/xen devices and unmatched globs
vyruss May 2, 2026
a05d6fd
feat: collect heap and table sizes in tables collector
vyruss May 2, 2026
8fd7d28
feat: cap tables and indexes collectors at top 1000 by size
vyruss May 2, 2026
53e2d77
feat: split hostname collector into kernel hostname and FQDN
vyruss May 2, 2026
44c3333
feat: collect longest lock-wait age in running_activity_maxage
vyruss May 4, 2026
b27bb57
feat: collect per-table vacuum and analyze ages in seconds
vyruss May 4, 2026
333f6a2
feat: stamp radar version and commit into archive root as radar.out
vyruss May 4, 2026
eaba614
feat: add -include/-exclude flags and disable pgstattuple by default
vyruss May 5, 2026
2b4b4ba
refactor: filter excluded tasks once before phase loops
vyruss May 8, 2026
e98b0d3
feat: use relpages-based size estimates on clusters with >1000 tables…
vyruss May 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions DATA.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Complete reference of all data collected by radar.
- **Per-Database**: Schema and object collectors (per database)
- **pg_statviz (optional)**: Time-series statistics collectors (per database)

**Output**: All data collected in a single ZIP file named `radar-{hostname}-{timestamp}.zip`
**Output**: All data collected in a single ZIP file named `radar-{hostname}-{timestamp}.zip`. The archive root contains a `radar.out` entry identifying the radar binary that produced it (`version` from the build-time `-X main.version` stamp, `commit` from Go's embedded VCS info).

---

Expand Down Expand Up @@ -46,7 +46,8 @@ These collectors only run on Linux systems.
| `system/dmesg_t.out` | `dmesg -T` | Kernel ring buffer with timestamps |
| `system/free.out` | `free -h` | Memory usage summary |
| `system/fstab.out` | `/etc/fstab` | Filesystem table |
| `system/hostname.out` | `hostname -f` | Fully qualified hostname |
| `system/hostname.out` | `hostname` | Kernel hostname (gethostname) |
| `system/hostname_fqdn.out` | `hostname -f` | Fully qualified hostname (resolver canonical name) |
| `system/hypervisor.out` | `systemd-detect-virt` | Hypervisor detection |
| `system/ifconfig.out` | `ifconfig -a` | Network interfaces (legacy) |
| `system/interfaces.out` | `ip -o address` | Network interfaces (one-line) |
Expand Down Expand Up @@ -181,7 +182,8 @@ These collectors only run on macOS systems.
|------|--------|-------------|
| `system/diskutil_info_all.out` | `diskutil info` (all disks) | Detailed disk information |
| `system/diskutil_list.out` | `diskutil list` | Disk layout |
| `system/hostname.out` | `hostname` | Hostname |
| `system/hostname.out` | `hostname` | Kernel hostname (gethostname) |
| `system/hostname_fqdn.out` | `hostname -f` | Fully qualified hostname (resolver canonical name) |
| `system/hypervisor.out` | `sysctl kern.hv_vmm_present` | Hypervisor detection |
| `system/ifconfig.out` | `ifconfig -a` | Network interfaces |
| `system/iostat.out` | `iostat -c 5 -w 1` | I/O statistics (5 samples) |
Expand Down Expand Up @@ -222,7 +224,7 @@ Instance-level PostgreSQL collectors. Files stored in `postgresql/`.
| File | Source | Description |
|------|--------|-------------|
| `postgresql/archiver.tsv` | `pg_stat_archiver` | WAL archiver statistics |
| `postgresql/available_extensions.tsv` | `pg_available_extensions` | Available extensions |
| `postgresql/available_extensions.tsv` | `pg_available_extension_versions` | Available extension versions with installed flag, trust and requires metadata |
| `postgresql/bgwriter.tsv` | `pg_stat_bgwriter` | Background writer statistics |
| `postgresql/blocking_locks.tsv` | Complex query | Blocking/blocked lock pairs |
| `postgresql/checkpointer.tsv` | `pg_stat_checkpointer` | Checkpointer statistics |
Expand Down Expand Up @@ -250,7 +252,7 @@ Instance-level PostgreSQL collectors. Files stored in `postgresql/`.
| `postgresql/replication_slots.tsv` | `pg_replication_slots` | Replication slots |
| `postgresql/roles.tsv` | `pg_roles` | Database roles |
| `postgresql/running_activity.tsv` | `pg_stat_activity` | Active connections and queries |
| `postgresql/running_activity_maxage.tsv` | Complex query | Oldest queries/transactions |
| `postgresql/running_activity_maxage.tsv` | Complex query | Oldest queries/transactions and longest lock wait |
| `postgresql/running_locks.tsv` | `pg_locks WHERE granted` | Held locks |
| `postgresql/shmem_allocations.tsv` | `pg_shmem_allocations` | Shared memory breakdown |
| `postgresql/stat_io.tsv` | `pg_stat_io` | I/O statistics (PG16+) |
Expand All @@ -260,7 +262,9 @@ Instance-level PostgreSQL collectors. Files stored in `postgresql/`.
| `postgresql/stat_progress_copy.tsv` | `pg_stat_progress_copy` | COPY progress (PG14+) |
| `postgresql/stat_progress_create_index.tsv` | `pg_stat_progress_create_index` | CREATE INDEX progress (PG12+) |
| `postgresql/stat_progress_vacuum.tsv` | `pg_stat_progress_vacuum` | VACUUM progress (PG9.6+) |
| `postgresql/stat_replication_slots.tsv` | `pg_stat_replication_slots` | Replication slot stats incl. spill counters (PG14+) |
| `postgresql/stat_slru.tsv` | `pg_stat_slru` | SLRU cache statistics |
| `postgresql/stat_ssl.tsv` | `pg_stat_ssl` | Per-backend SSL/TLS state |
| `postgresql/stat_statements_calls.tsv` | `pg_stat_statements` | Top 100 queries by call count |
| `postgresql/stat_statements_max_time.tsv` | `pg_stat_statements` | Top 100 queries by max execution time |
| `postgresql/stat_statements_total_time.tsv` | `pg_stat_statements` | Top 100 queries by total execution time |
Expand All @@ -281,21 +285,24 @@ Collected for each accessible database. Files stored in `databases/{dbname}/`.

| File | Source | Description |
|------|--------|-------------|
| `bloat.tsv` | `pg_stats` heuristic | Table bloat estimate (heuristic) |
| `extensions.tsv` | `pg_extension` | Installed extensions |
| `funcs.tsv` | `pg_proc WHERE prokind='f'` | Functions |
| `indexes.tsv` | `pg_indexes` | Indexes |
| `indexes.tsv` | `pg_index` + `pg_stat_all_indexes` | Top 1000 indexes by size with semantic key, validity, scan counters and size |
| `languages.tsv` | `pg_language` | Procedural languages |
| `operators.tsv` | `pg_operator` | Operators |
| `partitioned_tables.tsv` | `pg_partitioned_table` | Partitioned tables (PG10+) |
| `partitions.tsv` | `pg_inherits` | Partition relationships |
| `pgstattuple.tsv` | `pgstattuple_approx()` | Authoritative bloat (when `pgstattuple` extension is installed). Disabled by default — run with `-include pgstattuple` because it touches every user table's heap pages. |
| `procs.tsv` | `pg_proc WHERE prokind='p'` | Procedures (PG11+) |
| `publication_tables.tsv` | `pg_publication_tables` | Tables in publications |
| `publications.tsv` | `pg_publication` | Logical replication publications |
| `schemas.tsv` | `pg_namespace` | Schemas |
| `sequences.tsv` | `pg_sequences` | Sequences with last/min/max values (PG10+) |
| `stat_database.tsv` | `pg_stat_database` | Per-database statistics |
| `statistics.tsv` | `pg_statistic_ext` | Extended statistics (PG10+) |
| `subscription_tables.tsv` | `pg_subscription_rel` | Subscription relation states |
| `tables.tsv` | `pg_tables` | Tables |
| `tables.tsv` | `pg_class` + `pg_stat_all_tables` | Top 1000 tables by size with persistence, options, heap and table sizes, toast mapping, dead-tup counters, vacuum/analyze timestamps and per-table vacuum/analyze ages in seconds |
| `triggers.tsv` | `pg_trigger` | Triggers |
| `types.tsv` | `pg_type` | Data types |

Expand Down
15 changes: 10 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,12 @@ Options:
database name (default "postgres")
-data-dir string
PostgreSQL data directory
-exclude string
comma-separated task names to skip (e.g. -exclude bloat,stat_ssl)
-h string
database host (default "localhost")
-include string
comma-separated default-disabled task names to enable (e.g. pgstattuple, disabled by default)
-p int
database port (default 5432)
-skip-postgres
Expand Down Expand Up @@ -187,19 +191,20 @@ For a complete reference of all collected data, see [docs/data.md](docs/data.md)

- **Configuration & files**: `pg_db_role_setting`, `pg_file_settings`, `pg_hba.conf`, `pg_hba_file_rules`, `pg_ident.conf`, `pg_settings`, `pg_tablespace`, `postgresql.auto.conf`, `postgresql.conf`, `recovery.conf`, `recovery.done`
- **Activity & monitoring**: `pg_locks`, `pg_postmaster_start_time()`, `pg_prepared_xacts`, `pg_shmem_allocations`, `pg_stat_activity`
- **Statistics views**: `pg_stat_archiver`, `pg_stat_bgwriter`, `pg_stat_checkpointer` (PG17+), `pg_stat_database_conflicts`, `pg_stat_io` (PG16+), `pg_stat_slru`, `pg_stat_statements` (if installed), `pg_stat_wal` (PG14+), `pg_stat_wal_receiver`
- **Replication & WAL**: `pg_current_wal_lsn()`, `pg_replication_origin_status`, `pg_replication_slots`, `pg_stat_replication`, `pg_subscription`
- **Statistics views**: `pg_stat_archiver`, `pg_stat_bgwriter`, `pg_stat_checkpointer` (PG17+), `pg_stat_database_conflicts`, `pg_stat_io` (PG16+), `pg_stat_slru`, `pg_stat_ssl`, `pg_stat_statements` (if installed), `pg_stat_wal` (PG14+), `pg_stat_wal_receiver`
- **Replication & WAL**: `pg_current_wal_lsn()`, `pg_replication_origin_status`, `pg_replication_slots`, `pg_stat_replication`, `pg_stat_replication_slots` (PG14+, spill counters), `pg_subscription`
- **Progress tracking**: `pg_stat_progress_analyze`, `pg_stat_progress_basebackup`, `pg_stat_progress_cluster`, `pg_stat_progress_copy`, `pg_stat_progress_create_index`, `pg_stat_progress_vacuum`
- **Catalog**: `pg_available_extensions`, `pg_database`, `pg_database_size()`, `pg_roles`, `pg_tablespace_size()`, `version()`
- **Catalog**: `pg_available_extension_versions`, `pg_database` (incl. `datfrozenxid`/`datminmxid` wraparound headroom and `datconnlimit`), `pg_database_size()`, `pg_roles`, `pg_tablespace_size()`, `version()`

**Per-Database**

- **Schema objects**: `pg_indexes`, `pg_namespace`, `pg_operator`, `pg_tables`, `pg_type`
- **Schema objects**: `pg_class` + `pg_stat_all_tables` (tables incl. dead-tup counters, vacuum/analyze timestamps, `reloptions`, `reltoastrelid`, `relpersistence`), `pg_index` + `pg_stat_all_indexes` (indexes incl. validity, scan counters, size), `pg_namespace`, `pg_operator`, `pg_sequences`, `pg_type`
- **Functions & procedures**: `pg_proc`
- **Triggers & partitioning**: `pg_inherits`, `pg_partitioned_table`, `pg_trigger`
- **Logical replication**: `pg_publication`, `pg_publication_tables`, `pg_subscription_rel`
- **Extensions**: `pg_extension`, `pg_language`, `pg_statistic_ext`
- **Extensions**: `pg_extension`, `pg_language`, `pg_statistic_ext`, `pgstattuple` (if installed — authoritative bloat estimate via `pgstattuple_approx()`)
- **Statistics**: `pg_stat_database` (conflicts, deadlocks, temp files, stats reset)
- **Bloat estimate**: heuristic from `pg_stats` (always emitted)

**[pg_statviz](https://github.com/vyruss/pg_statviz) Extension** (if present)

Expand Down
21 changes: 14 additions & 7 deletions docs/data.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Complete reference of all data collected by radar.
- **Per-Database**: Schema and object collectors (per database)
- **pg_statviz (optional)**: Time-series statistics collectors (per database)

**Output**: All data collected in a single ZIP file named `radar-{hostname}-{timestamp}.zip`
**Output**: All data collected in a single ZIP file named `radar-{hostname}-{timestamp}.zip`. The archive root contains a `radar.out` entry identifying the radar binary that produced it (`version` from the build-time `-X main.version` stamp, `commit` from Go's embedded VCS info).

---

Expand Down Expand Up @@ -46,7 +46,8 @@ These collectors only run on Linux systems.
| `system/dmesg_t.out` | `dmesg -T` | Kernel ring buffer with timestamps |
| `system/free.out` | `free -h` | Memory usage summary |
| `system/fstab.out` | `/etc/fstab` | Filesystem table |
| `system/hostname.out` | `hostname -f` | Fully qualified hostname |
| `system/hostname.out` | `hostname` | Kernel hostname (gethostname) |
| `system/hostname_fqdn.out` | `hostname -f` | Fully qualified hostname (resolver canonical name) |
| `system/hypervisor.out` | `systemd-detect-virt` | Hypervisor detection |
| `system/ifconfig.out` | `ifconfig -a` | Network interfaces (legacy) |
| `system/interfaces.out` | `ip -o address` | Network interfaces (one-line) |
Expand Down Expand Up @@ -181,7 +182,8 @@ These collectors only run on macOS systems.
|------|--------|-------------|
| `system/diskutil_info_all.out` | `diskutil info` (all disks) | Detailed disk information |
| `system/diskutil_list.out` | `diskutil list` | Disk layout |
| `system/hostname.out` | `hostname` | Hostname |
| `system/hostname.out` | `hostname` | Kernel hostname (gethostname) |
| `system/hostname_fqdn.out` | `hostname -f` | Fully qualified hostname (resolver canonical name) |
| `system/hypervisor.out` | `sysctl kern.hv_vmm_present` | Hypervisor detection |
| `system/ifconfig.out` | `ifconfig -a` | Network interfaces |
| `system/iostat.out` | `iostat -c 5 -w 1` | I/O statistics (5 samples) |
Expand Down Expand Up @@ -222,7 +224,7 @@ Instance-level PostgreSQL collectors. Files stored in `postgresql/`.
| File | Source | Description |
|------|--------|-------------|
| `postgresql/archiver.tsv` | `pg_stat_archiver` | WAL archiver statistics |
| `postgresql/available_extensions.tsv` | `pg_available_extensions` | Available extensions |
| `postgresql/available_extensions.tsv` | `pg_available_extension_versions` | Available extension versions with installed flag, trust and requires metadata |
| `postgresql/bgwriter.tsv` | `pg_stat_bgwriter` | Background writer statistics |
| `postgresql/blocking_locks.tsv` | Complex query | Blocking/blocked lock pairs |
| `postgresql/checkpointer.tsv` | `pg_stat_checkpointer` | Checkpointer statistics |
Expand Down Expand Up @@ -250,7 +252,7 @@ Instance-level PostgreSQL collectors. Files stored in `postgresql/`.
| `postgresql/replication_slots.tsv` | `pg_replication_slots` | Replication slots |
| `postgresql/roles.tsv` | `pg_roles` | Database roles |
| `postgresql/running_activity.tsv` | `pg_stat_activity` | Active connections and queries |
| `postgresql/running_activity_maxage.tsv` | Complex query | Oldest queries/transactions |
| `postgresql/running_activity_maxage.tsv` | Complex query | Oldest queries/transactions and longest lock wait |
| `postgresql/running_locks.tsv` | `pg_locks WHERE granted` | Held locks |
| `postgresql/shmem_allocations.tsv` | `pg_shmem_allocations` | Shared memory breakdown |
| `postgresql/stat_io.tsv` | `pg_stat_io` | I/O statistics (PG16+) |
Expand All @@ -260,7 +262,9 @@ Instance-level PostgreSQL collectors. Files stored in `postgresql/`.
| `postgresql/stat_progress_copy.tsv` | `pg_stat_progress_copy` | COPY progress (PG14+) |
| `postgresql/stat_progress_create_index.tsv` | `pg_stat_progress_create_index` | CREATE INDEX progress (PG12+) |
| `postgresql/stat_progress_vacuum.tsv` | `pg_stat_progress_vacuum` | VACUUM progress (PG9.6+) |
| `postgresql/stat_replication_slots.tsv` | `pg_stat_replication_slots` | Replication slot stats incl. spill counters (PG14+) |
| `postgresql/stat_slru.tsv` | `pg_stat_slru` | SLRU cache statistics |
| `postgresql/stat_ssl.tsv` | `pg_stat_ssl` | Per-backend SSL/TLS state |
| `postgresql/stat_statements_calls.tsv` | `pg_stat_statements` | Top 100 queries by call count |
| `postgresql/stat_statements_max_time.tsv` | `pg_stat_statements` | Top 100 queries by max execution time |
| `postgresql/stat_statements_total_time.tsv` | `pg_stat_statements` | Top 100 queries by total execution time |
Expand All @@ -281,21 +285,24 @@ Collected for each accessible database. Files stored in `databases/{dbname}/`.

| File | Source | Description |
|------|--------|-------------|
| `bloat.tsv` | `pg_stats` heuristic | Table bloat estimate (heuristic) |
| `extensions.tsv` | `pg_extension` | Installed extensions |
| `funcs.tsv` | `pg_proc WHERE prokind='f'` | Functions |
| `indexes.tsv` | `pg_indexes` | Indexes |
| `indexes.tsv` | `pg_index` + `pg_stat_all_indexes` | Top 1000 indexes by size with semantic key, validity, scan counters and size |
| `languages.tsv` | `pg_language` | Procedural languages |
| `operators.tsv` | `pg_operator` | Operators |
| `partitioned_tables.tsv` | `pg_partitioned_table` | Partitioned tables (PG10+) |
| `partitions.tsv` | `pg_inherits` | Partition relationships |
| `pgstattuple.tsv` | `pgstattuple_approx()` | Authoritative bloat (when `pgstattuple` extension is installed). Disabled by default — run with `-include pgstattuple` because it touches every user table's heap pages. |
| `procs.tsv` | `pg_proc WHERE prokind='p'` | Procedures (PG11+) |
| `publication_tables.tsv` | `pg_publication_tables` | Tables in publications |
| `publications.tsv` | `pg_publication` | Logical replication publications |
| `schemas.tsv` | `pg_namespace` | Schemas |
| `sequences.tsv` | `pg_sequences` | Sequences with last/min/max values (PG10+) |
| `stat_database.tsv` | `pg_stat_database` | Per-database statistics |
| `statistics.tsv` | `pg_statistic_ext` | Extended statistics (PG10+) |
| `subscription_tables.tsv` | `pg_subscription_rel` | Subscription relation states |
| `tables.tsv` | `pg_tables` | Tables |
| `tables.tsv` | `pg_class` + `pg_stat_all_tables` | Top 1000 tables by size with persistence, options, heap and table sizes, toast mapping, dead-tup counters, vacuum/analyze timestamps and per-table vacuum/analyze ages in seconds |
| `triggers.tsv` | `pg_trigger` | Triggers |
| `types.tsv` | `pg_type` | Data types |

Expand Down
15 changes: 10 additions & 5 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,12 @@ Options:
database name (default "postgres")
-data-dir string
PostgreSQL data directory
-exclude string
comma-separated task names to skip (e.g. -exclude bloat,stat_ssl)
-h string
database host (default "localhost")
-include string
comma-separated default-disabled task names to enable (e.g. pgstattuple, disabled by default)
-p int
database port (default 5432)
-skip-postgres
Expand Down Expand Up @@ -164,19 +168,20 @@ For a complete reference of all collected data, see [data.md](data.md).

- **Configuration & files**: `pg_db_role_setting`, `pg_file_settings`, `pg_hba.conf`, `pg_hba_file_rules`, `pg_ident.conf`, `pg_settings`, `pg_tablespace`, `postgresql.auto.conf`, `postgresql.conf`, `recovery.conf`, `recovery.done`
- **Activity & monitoring**: `pg_locks`, `pg_postmaster_start_time()`, `pg_prepared_xacts`, `pg_shmem_allocations`, `pg_stat_activity`
- **Statistics views**: `pg_stat_archiver`, `pg_stat_bgwriter`, `pg_stat_checkpointer` (PG17+), `pg_stat_database_conflicts`, `pg_stat_io` (PG16+), `pg_stat_slru`, `pg_stat_statements` (if installed), `pg_stat_wal` (PG14+), `pg_stat_wal_receiver`
- **Replication & WAL**: `pg_current_wal_lsn()`, `pg_replication_origin_status`, `pg_replication_slots`, `pg_stat_replication`, `pg_subscription`
- **Statistics views**: `pg_stat_archiver`, `pg_stat_bgwriter`, `pg_stat_checkpointer` (PG17+), `pg_stat_database_conflicts`, `pg_stat_io` (PG16+), `pg_stat_slru`, `pg_stat_ssl`, `pg_stat_statements` (if installed), `pg_stat_wal` (PG14+), `pg_stat_wal_receiver`
- **Replication & WAL**: `pg_current_wal_lsn()`, `pg_replication_origin_status`, `pg_replication_slots`, `pg_stat_replication`, `pg_stat_replication_slots` (PG14+, spill counters), `pg_subscription`
- **Progress tracking**: `pg_stat_progress_analyze`, `pg_stat_progress_basebackup`, `pg_stat_progress_cluster`, `pg_stat_progress_copy`, `pg_stat_progress_create_index`, `pg_stat_progress_vacuum`
- **Catalog**: `pg_available_extensions`, `pg_database`, `pg_database_size()`, `pg_roles`, `pg_tablespace_size()`, `version()`
- **Catalog**: `pg_available_extension_versions`, `pg_database` (incl. `datfrozenxid`/`datminmxid` wraparound headroom and `datconnlimit`), `pg_database_size()`, `pg_roles`, `pg_tablespace_size()`, `version()`

**Per-Database**

- **Schema objects**: `pg_indexes`, `pg_namespace`, `pg_operator`, `pg_tables`, `pg_type`
- **Schema objects**: `pg_class` + `pg_stat_all_tables` (tables incl. dead-tup counters, vacuum/analyze timestamps, `reloptions`, `reltoastrelid`, `relpersistence`), `pg_index` + `pg_stat_all_indexes` (indexes incl. validity, scan counters, size), `pg_namespace`, `pg_operator`, `pg_sequences`, `pg_type`
- **Functions & procedures**: `pg_proc`
- **Triggers & partitioning**: `pg_inherits`, `pg_partitioned_table`, `pg_trigger`
- **Logical replication**: `pg_publication`, `pg_publication_tables`, `pg_subscription_rel`
- **Extensions**: `pg_extension`, `pg_language`, `pg_statistic_ext`
- **Extensions**: `pg_extension`, `pg_language`, `pg_statistic_ext`, `pgstattuple` (if installed — authoritative bloat estimate via `pgstattuple_approx()`)
- **Statistics**: `pg_stat_database` (conflicts, deadlocks, temp files, stats reset)
- **Bloat estimate**: heuristic from `pg_stats` (always emitted)

**[pg_statviz](https://github.com/vyruss/pg_statviz) Extension** (if present)

Expand Down
Loading
Loading