Changelog
All notable changes to the pgEdge radar project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.6.3] - 2026-11-06
Removed
- This release no longer provides packages for Debian 11 (bullseye), which is end-of-life.
Security
- This release updates the Go toolchain to 1.26.10, which fixes vulnerabilities
in
crypto/tls,crypto/x509,encoding/asn1,encoding/xml,html/template,net/http,net/http/httputil,net/textproto, andnet/url. - This release updates
golang.org/x/textto v0.43.0, which fixes a panic when parsing crafted input ingolang.org/x/text/secure/precis.
Fixed
- radar collects
postgresql.conf,pg_hba.conf, andpg_ident.conffrom the paths that theconfig_file,hba_file, andident_filesettings name, so the files are collected on Debian and Ubuntu package clusters, which keep them under/etc/postgresql. - radar authenticates with GSSAPI (Kerberos), using the ticket in a file credential cache.
- radar reports a database on which the role lacks the
CONNECTprivilege without connecting to it, so the server log records no refused connection. - radar checks that each pg_stat_statements, pg_statviz, and Spock relation exists before querying the relation, so a missing extension or an older pg_statviz version leaves no error in the server log.
[0.6.2] - 2026-09-03
Changed
- The
--versionand-Voptions print the radar version. - The
--helpoption writes tostdoutrather thanstderr. - The
--helpand--versionoptions override every other option;--helpwins when both are given.
Security
- radar creates the archive so that only its owner can read it.
- radar refuses to write to an existing output path instead of truncating it.
Fixed
- The
radar.outarchive entry had no modification time.
[0.6.1] - 2026-09-01
Fixed
- This release regenerates the
--helpcapture in README.md and docs/index.md from the real CLI.
[0.6.0] - 2026-09-01
Added
PostgreSQL
- The
control_checkpoint,control_init,control_recoveryandcontrol_systemcollectors record thepg_controldatacontent through thepg_control_*()functions, so neither the data directory nor a matching server binary is needed. - The
stat_subscription_statscollector records per-subscription apply and sync error counts (PG15+), and per-kind conflict counters (PG18+). - The
log_directorycollector lists the server log directory frompg_ls_logdir(), with the name, size and modification time of each file but never its contents. The listing is readable bypg_monitorand needs no filesystem access.
Per-database
- The
table_freeze_agecollector records the top 1000 relations by transaction-ID and multixact freeze age. The collector ranks relations by age rather than size, and includes thepg_catalogandpg_toastrelations thattablesexcludes. - The
tablescollector adds therelfrozenxid_ageandrelminmxid_agecolumns, which record the transaction-ID and multixact freeze age of each table. Both columns are empty for partitioned tables, which hold no tuples of their own.
pg_statviz
- The
blockingcollector records the blocking lock history, with blocked and blocker counts plus per-lock-type counts (pg_statviz 1.2+).
Spock
- This release adds 13 collectors under
spock/<db>/:channel_summary_stats,exception_log,lag_tracker,local_node,local_sync_status,node,pii,progress,replication_set,replication_set_table,resolutions,subscriptionandtables. radar skips these collectors when Spock is not installed.
PgBouncer
- The
pgbouncer.inicollector records the[pgbouncer]section without its comments. Every other section keeps its key names and loses its values, and the collector drops comments wherever they appear. - The
pgbouncer_filescollector lists the configuration directory. The collector recordsuserlist.txtas an entry only and never reads the file. - The PgBouncer collectors run without a database connection, so the pooler configuration reaches the archive even when the instance is unreachable.
- The
--pgbouncer-confflag specifies a PgBouncer configuration directory outside/etc/pgbouncerand/usr/local/etc/pgbouncer. A nonexistent path given to this flag is a failure rather than a silent skip.
[0.5.1] - 2026-08-06
Security
- This release updates the Go toolchain to 1.25.12 (1.24 is end-of-life); the
update fixes vulnerabilities in
crypto/tls,crypto/x509,net,net/urlandos. - This release updates
github.com/jackc/pgx/v5to v5.10.0, which fixes a SQL injection issue. - This release updates
golang.org/x/textto v0.40.0, which fixes an infinite loop innorm.Iter.
[0.5.0] - 2026-05-08
Added
PostgreSQL
- The
stat_sslcollector records the SSL/TLS state of each backend. - The
stat_replication_slotscollector records replication slot spill counters (PG14+).
Per-database
- The
sequencescollector records sequences with their last, minimum and maximum values (PG10+). - The
bloatcollector records a heuristic table bloat estimate frompg_stats. - The
pgstattuplecollector measures bloat throughpgstattuple_approx(); users opt in with--include pgstattuple.
CLI
- The
--exclude name1,name2flag skips the named tasks. - The
--include name1,name2flag enables named tasks that are disabled by default.
Changed
- The
databasescollector adds thedatfrozenxid,datminmxid,datconnlimit,datistemplateanddatallowconncolumns. - This release rebuilds the
tablescollector onpg_classandpg_stat_all_tables. The collector adds dead-tuple counters, vacuum and analyze timestamps and ages,reloptions,relpersistence,relpages, and heap, table and toast sizes. The collector caps its output at the top 1000 tables by size. - This release rebuilds the
indexescollector onpg_indexandpg_stat_all_indexes. The collector adds semantic-key columns,indisvalid,idx_scan,idx_tup_read,idx_tup_fetch,relpagesandindex_size, and caps its output at the top 1000 indexes by size. - The
running_activity_maxagecollector addsmax_lock_wait_age. - The
available_extensionscollector now reads frompg_available_extension_versions(one row per version with trust/requires/schema metadata). - The archive root now contains
radar.out, which records the radar binary'sversion(build-time stamp) andcommit.
Fixed
- The
read_aheadcollector ignored virtio/xen block devices and produced unlabeled output. - The
hostname.outentry reported the resolver-canonical fully qualified domain name (FQDN) instead of the kernel hostname. This release addshostname_fqdn.outto record that name. - Calling
pg_table_sizeandpg_relation_sizefor every relation before sorting caused fstat overload on clusters with more than 1000 tables. radar now uses arelpages × block_sizeestimate, with an fstat fallback for rows whererelpages = 0.
[0.4.1] - 2026-04-15
Fixed
- radar no longer reports missing PostgreSQL extensions (pg_stat_statements, pg_statviz) as errors when they are not installed.
[0.4.0] - 2026-04-01
Added
System (Linux)
- This release adds cgroup v2 resource limit collectors (cpu.max, memory.max, memory.current, pids, cpuset, io.max, etc.).
- This release adds cgroup v1 resource limit collectors (cpu.shares, cpu.cfs_quota, memory.limit, etc.).
- This release adds container identity collectors (cgroup membership, mountinfo, environment, Kubernetes namespace).
- This release adds cloud and hardware identity collectors (DMI bios_vendor, product_name, sys_vendor, chassis_asset_tag).
- radar automatically detects the container runtime (Docker, Kubernetes, containerd, LXC).
Authentication
- radar supports SSL/TLS with a configurable
--sslmode(prefer, disable, require, verify-ca, verify-full). - radar supports certificate authentication (
--sslcert,--sslkey,--sslrootcert). - radar supports GSSAPI/Kerberos authentication.
- radar reads the
PGSSLMODE,PGSSLCERT,PGSSLKEYandPGSSLROOTCERTenvironment variables.
Changed
- This release switches the PostgreSQL driver from lib/pq to pgx.
- The default sslmode changes from
disabletoprefer. - This release updates Go from 1.23 to 1.24.13.
- Collector errors now distinguish skips (unavailable) from real failures.
Fixed
- radar leaked a database handle when a ping failed.
- radar printed the summary before the zero-data check.
- radar applied the PGDATABASE fallback after the
--skip-systemcheck rather than before it. - radar did not quote connection string values that contain spaces.
[0.3.0] - 2026-02-26
Added
System (Linux)
- The
clocksourcecollector records the current kernel clocksource (tsc/hpet/kvm-clock). - The
diskstatscollector records the raw kernel I/O counters from /proc/diskstats. - The
freecollector records a memory usage summary. - The
io-queue-depthcollector records the I/O queue depth of each block device. - The
lscpucollector records the structured CPU topology (NUMA, cores, threads, caches). - The
netstat-statscollector records protocol statistics (retransmits, drops). - The
numactlcollector records the NUMA node layout and memory. - The
numastatcollector records per-node memory allocation statistics. - The
pg-service-statuscollector records the PostgreSQL systemd service status. - The
resolv.confcollector records the DNS resolver configuration. - The
ss-listenerscollector records listening sockets and ports. - The
ss-summarycollector records a socket statistics summary. - The
timedatectlcollector records the NTP sync and timezone status.
System (macOS)
- The
memory-pressurecollector records the system memory pressure level. - The
netstat-statscollector records protocol statistics. - The
ulimitcollector records resource limits.
PostgreSQL
- The
connection_summarycollector records the connection distribution by state and wait event. - The
database_conflictscollector records recovery conflicts from pg_stat_database_conflicts. - The
database_sizescollector records the disk usage of each database. - The
file_settingscollector records configuration file parse results from pg_file_settings. - The
shmem_allocationscollector records the shared memory breakdown from pg_shmem_allocations. - The
stat_progress_clustercollector records CLUSTER/VACUUM FULL progress. - The
stat_progress_create_indexcollector records CREATE INDEX progress. - The
stat_statements_callscollector records the top 100 queries by call count (pg_stat_statements). - The
stat_statements_max_timecollector records the top 100 queries by maximum execution time (pg_stat_statements). - The
stat_statements_total_timecollector records the top 100 queries by total execution time (pg_stat_statements). - The
tablespace_sizescollector records tablespace disk usage. - The
wal_positioncollector records the WAL position and recovery state. - The
wal_receivercollector records the standby WAL receiver status.
Testing
- This release adds tests that detect duplicate archive paths for the system and PostgreSQL collectors.
[0.2.0] - 2025-12-23
Added
- The
pg_stat_checkpointercollector (PostgreSQL 17+) records checkpoint operations. - The
pg_stat_iocollector (PostgreSQL 16+) records I/O statistics by backend type. - The
pg_stat_walcollector (PostgreSQL 14+) records WAL generation statistics. - The
pg_postmaster_start_time()collector records the server startup timestamp. - The
pg_stat_databaseper-database collector records conflicts, deadlocks and temporary files.
[0.1.0] - 2025-12-18
Added
- This is the initial release.
- The release includes static binaries for Linux (amd64, arm64) and macOS (amd64, arm64).
- radar collects comprehensive system and PostgreSQL metrics.