Overview

pgmetrics is an open-source tool to collect and report various statistics and information from a running PostgreSQL server to aid in troubleshooting, monitoring and automation.

Currently 350+ metrics are collected, please refer to the JSON output or source code for the full list. Here is an overview of the metrics collected:

  • Server: version, system identifier, timeline, transaction id wraparound, checkpoint lag
  • Replication: primary-side, standby-side, physical and logical replication slots
  • WAL Archiving: archive rate, wal and ready file counts, last success and fail time
  • BG Writer: checkpoint rate, total checkpoints (sched+req), buffers
  • Vacuum-related: ongoing auto/manual vacuum progress, last analyze/vacuum, settings
  • Tablespaces: location, size, disk and inode usage of filesystem
  • Database: size, bloat, disabled triggers, installed extensions, temp files, transaction id wraparound, deadlocks, conflicts
  • Roles: users, groups, membership
  • Active backends: transaction running too long, idling in transaction, waiting for locks
  • Tables: vacuum, analyze, row estimates, idx and seq scans, cache hit ratio, HOT update ratio, size, bloat
  • Indexes: cache hit ratio, scans, rows read/scan, rows fetched/scan
  • Sequences: cache hit ratio
  • System metrics: cores, load average, memory and disk usage
  • Settings: current values, and default ones where different
  • Slow queries: from pg_stat_statements, if available
  • Locks: granted and waiting locks, from pg_locks
  • Job Progress: progress of analyze, backup, cluster, copy, create index and vacuum jobs
  • Blocked queries: blocked queries, along with the queries that they are waiting for

Apart from collecting metrics from a generic PostgreSQL server, it can also:

  • PgBouncer: Collect and report information about PgBouncer instances when connected to PgBouncer’s admin database. Odyssey is also supported starting with v1.11.0.
  • Log files: Process and extract information from PostgreSQL log files. (added in v1.8.0)
  • AWS RDS, Aurora: Collect RDS Metrics and Enhanced Monitoring metrics from AWS RDS databases, including AWS RDS Aurora (added in v1.9.0)
  • Citus: Collect information about Citus extension (added in v1.10.0)
  • Azure: Collect metrics from Azure Database for PostgreSQL (Single Server, Flexible Server and managed Citus). (added in v1.13.0)
  • Pgpool: Collect metrics and information from Pgpool v4.x instances (added in v1.15.0)

pgmetrics is a standalone, dependency-free tool: there are no PostgreSQL extensions to be installed, and no package or installation dependencies for the tool itself.

Output

pgmetrics can report the collected statistics in human-readable text format, or export it to JSON or CSV formats. The JSON and CSV format outputs are intended to be used in scripts for monitoring and automation. pgmetrics can also redisplay the contents of a previously saved JSON file in the text format.

PostgreSQL versions

pgmetrics can work with PostgreSQL versions 9.3 to 16. It also works with managed PostgreSQL instances provided by:

  • Amazon AWS Aurora
  • Amazon AWS RDS
  • Microsoft Azure Database For PostgreSQL Simple Server
  • Microsoft Azure Database For PostgreSQL Flexible Server
  • Microsoft Azure Database For PostgreSQL Hyperscale/Citus
  • Google GCP SQL
Availability

pgmetrics is written in Go, and available for download as a zero-dependency statically linked command-line tool for many platforms. It is open source and licensed under Apache License 2.0.

Example

Here is an example of the text output that pgmetrics generates:

$ pgmetrics -h 127.0.0.1 -p 6432 bench

pgmetrics run at: 14 Oct 2021 9:37:15 AM (now)

PostgreSQL Cluster:
    Name:                
    Server Version:      14.0
    Server Started:      14 Oct 2021 9:09:08 AM (28 minutes ago)
    System Identifier:   7018760292184559382
    Timeline:            1
    Last Checkpoint:     14 Oct 2021 9:31:54 AM (5 minutes ago)
    REDO LSN:            0/7016E90
    Checkpoint LSN:      0/70176D0 (2.1 KiB since REDO)
    Transaction IDs:     726 to 22964 (diff = 22238)
    Last Transaction:    14 Oct 2021 9:37:12 AM (3 seconds ago)
    Notification Queue:  0.0% used
    Active Backends:     2 (max 100)
    Recovery Mode?       no

System Information:
    Hostname:            devel
    CPU Cores:           2 x 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
    Load Average:        0.04
    Memory:              used=446 MiB, free=142 MiB, buff=0 B, cache=1.2 GiB
    Swap:                used=0 B, free=0 B
    +---------------------------------+-----------------+
    |                         Setting |           Value |
    +---------------------------------+-----------------+
    |                  shared_buffers | 16384 (128 MiB) |
    |                        work_mem |  4096 (4.0 MiB) |
    |            maintenance_work_mem |  65536 (64 MiB) |
    |                    temp_buffers |  1024 (8.0 MiB) |
    |             autovacuum_work_mem |              -1 |
    |                 temp_file_limit |              -1 |
    |            max_worker_processes |               8 |
    |          autovacuum_max_workers |               3 |
    | max_parallel_workers_per_gather |               2 |
    |        effective_io_concurrency |               1 |
    +---------------------------------+-----------------+

Outgoing Replication Stats:
    Destination #1:
      User:              mdevan
      Application:       walreceiver
      Client Address:    127.0.0.1/32
      State:             streaming
      Started At:        14 Oct 2021 9:22:44 AM (14 minutes ago)
      Sent LSN:          0/863DD60
      Written Until:     0/863DD60 (no write lag)
      Flushed Until:     0/863DD60 (no flush lag)
      Replayed Until:    0/863DD60 (no replay lag)
      Sync Priority:     0
      Sync State:        async

Physical Replication Slots:
    +---------+--------+---------------+-------------+-----------+
    |    Name | Active | Oldest Txn ID | Restart LSN | Temporary |
    +---------+--------+---------------+-------------+-----------+
    | backup1 |    yes |               |   0/863DD60 |        no |
    +---------+--------+---------------+-------------+-----------+

Logical Replication Slots:
    +-----------------------------------------+---------------+----------+--------+---------------+-------------+---------------+-----------+
    |                                    Name |        Plugin | Database | Active | Oldest Txn ID | Restart LSN | Flushed Until | Temporary |
    +-----------------------------------------+---------------+----------+--------+---------------+-------------+---------------+-----------+
    | pg_16435_sync_16388_7018766216855704998 |      pgoutput |    bench |     no |               |   0/863A490 |     0/863A4C8 |        no |
    | pg_16435_sync_16391_7018766216855704998 |      pgoutput |    bench |     no |               |   0/863A458 |     0/863A490 |        no |
    | pg_16435_sync_16394_7018766216855704998 |      pgoutput |    bench |     no |               |   0/863A4C8 |     0/863A500 |        no |
    |                                    sub1 |      pgoutput |    bench |     no |               |   0/7030DB0 |     0/764DFF0 |        no |
    |                               testslot1 | test_decoding |    bench |     no |               |   0/5B1D958 |     0/5B1D990 |        no |
    +-----------------------------------------+---------------+----------+--------+---------------+-------------+---------------+-----------+

WAL Files:
    WAL Archiving?       yes
    WAL Files:           5
    Ready Files:         0
    Archive Rate:        0.28 per min
    Last Archived:       14 Oct 2021 9:35:30 AM (1 minute ago)
    Last Failure:        
    Totals:              8 succeeded, 0 failed
    Totals Since:        14 Oct 2021 9:09:08 AM (28 minutes ago)
    +--------------------+----------------+
    |            Setting |          Value |
    +--------------------+----------------+
    |          wal_level |        logical |
    |    archive_timeout |              0 |
    |    wal_compression |             on |
    |       max_wal_size | 1024 (1.0 GiB) |
    |       min_wal_size |    80 (80 MiB) |
    | checkpoint_timeout |            300 |
    |   full_page_writes |             on |
    |      wal_keep_size |              0 |
    +--------------------+----------------+

BG Writer:
    Checkpoint Rate:     0.28 per min
    Average Write:       9.6 MiB per checkpoint
    Total Checkpoints:   5 sched (62.5%) + 3 req (37.5%) = 8
    Total Write:         248 MiB, @ 150 KiB per sec
    Buffers Allocated:   11488 (90 MiB)
    Buffers Written:     9820 chkpt (30.9%) + 0 bgw (0.0%) + 21916 be (69.1%)
    Clean Scan Stops:    0
    BE fsyncs:           0
    Counts Since:        14 Oct 2021 9:09:08 AM (28 minutes ago)
    +------------------------------+--------------+
    |                      Setting |        Value |
    +------------------------------+--------------+
    |               bgwriter_delay |     200 msec |
    |         bgwriter_flush_after | 64 (512 KiB) |
    |        bgwriter_lru_maxpages |          100 |
    |      bgwriter_lru_multiplier |            2 |
    |                   block_size |         8192 |
    |           checkpoint_timeout |      300 sec |
    | checkpoint_completion_target |          0.9 |
    +------------------------------+--------------+

Backends:
    Total Backends:      2 (2.0% of max 100)
    Problematic:         0 waiting on locks, 1 waiting on other, 0 xact too long, 0 idle in xact
    Other Waiting Backends:
      +-------+--------+------+--------------+----------+---------------------+------------------------+
      |   PID |   User |  App |  Client Addr | Database |                Wait |            Query Start |
      +-------+--------+------+--------------+----------+---------------------+------------------------+
      | 75646 | mdevan | psql | 127.0.0.1/32 |    bench | Client / ClientRead | 14 Oct 2021 9:37:12 AM |
      +-------+--------+------+--------------+----------+---------------------+------------------------+

Locks:
    +------------+-------------+-------+
    |  Lock Type | Not Granted | Total |
    +------------+-------------+-------+
    |   relation |           0 |     4 |
    | virtualxid |           0 |     1 |
    +------------+-------------+-------+
    |            |           0 |     5 |
    +------------+-------------+-------+

Vacuum Progress:
    No manual or auto vacuum jobs in progress.
    +------------------------------+----------------+
    |                      Setting |          Value |
    +------------------------------+----------------+
    |         maintenance_work_mem | 65536 (64 MiB) |
    |                   autovacuum |             on |
    | autovacuum_analyze_threshold |             50 |
    |  autovacuum_vacuum_threshold |             50 |
    |    autovacuum_freeze_max_age |      200000000 |
    |       autovacuum_max_workers |              3 |
    |           autovacuum_naptime |         60 sec |
    |        vacuum_freeze_min_age |       50000000 |
    |      vacuum_freeze_table_age |      150000000 |
    +------------------------------+----------------+

Roles:
    +---------------------------+-------+------+-------+-----------+----------+------------+---------+---------+--------------------------------------------------------------+
    |                      Name | Login | Repl | Super | Creat Rol | Creat DB | Bypass RLS | Inherit | Expires |                                                    Member Of |
    +---------------------------+-------+------+-------+-----------+----------+------------+---------+---------+--------------------------------------------------------------+
    |                    mdevan |   yes |  yes |   yes |       yes |      yes |        yes |     yes |         |                                                              |
    |                pg_monitor |       |      |       |           |          |            |     yes |         | pg_read_all_settings, pg_read_all_stats, pg_stat_scan_tables |
    |      pg_read_all_settings |       |      |       |           |          |            |     yes |         |                                                              |
    |         pg_read_all_stats |       |      |       |           |          |            |     yes |         |                                                              |
    |       pg_stat_scan_tables |       |      |       |           |          |            |     yes |         |                                                              |
    |         pg_signal_backend |       |      |       |           |          |            |     yes |         |                                                              |
    |      pg_read_server_files |       |      |       |           |          |            |     yes |         |                                                              |
    |     pg_write_server_files |       |      |       |           |          |            |     yes |         |                                                              |
    | pg_execute_server_program |       |      |       |           |          |            |     yes |         |                                                              |
    |         pg_database_owner |       |      |       |           |          |            |     yes |         |                                                              |
    |          pg_read_all_data |       |      |       |           |          |            |     yes |         |                                                              |
    |         pg_write_all_data |       |      |       |           |          |            |     yes |         |                                                              |
    |                     alice |   yes |      |       |           |          |            |     yes |         |                                                              |
    |                       bob |       |      |       |           |          |            |     yes |         |                                                              |
    |                   charlie |       |      |       |           |          |            |     yes |         |                                pg_read_all_stats, pg_monitor |
    |                     frank |   yes |      |       |           |          |            |     yes |         |                                pg_monitor, pg_read_all_stats |
    +---------------------------+-------+------+-------+-----------+----------+------------+---------+---------+--------------------------------------------------------------+

Tablespaces:
    +------------+--------+------------------------+---------+--------------------------+---------------------------+
    |       Name |  Owner |               Location |    Size |                Disk Used |                Inode Used |
    +------------+--------+------------------------+---------+--------------------------+---------------------------+
    | pg_default | mdevan | $PGDATA = /data/pg/db1 | 109 MiB | 23 GiB (70.6%) of 32 GiB | 720347 (4.3%) of 16776640 |
    |  pg_global | mdevan | $PGDATA = /data/pg/db1 | 560 KiB | 23 GiB (70.6%) of 32 GiB | 720347 (4.3%) of 16776640 |
    +------------+--------+------------------------+---------+--------------------------+---------------------------+

Database #1:
    Name:                postgres
    Owner:               mdevan
    Tablespace:          pg_default
    Connections:         0 (no max limit)
    Frozen Xid Age:      22247
    Transactions:        69 (100.0%) commits, 0 (0.0%) rollbacks
    Cache Hits:          97.6%
    Rows Changed:        ins 0.0%, upd 0.0%, del 0.0%
    Total Temp:          0 B in 0 files
    Problems:            0 deadlocks, 0 conflicts
    Totals Since:        14 Oct 2021 9:09:21 AM (27 minutes ago)
    Size:                8.0 MiB
    Slow Queries:
      +-------+----------+------------+-----------+----------------------------------------------------+
      | Calls | Avg Time | Total Time | Rows/Call |                                              Query |
      +-------+----------+------------+-----------+----------------------------------------------------+
      |     1 |     29ms |       29ms |         0 |                              create database bench |
      |     1 |       0s |         0s |         0 |                alter database bench owner to alice |
      |     3 |       0s |         0s |         3 | SELECT r.rolname, r.rolsuper, r.rolinherit,   r.ro |
      |     1 |       0s |         0s |         0 |                                  create user alice |
      |     1 |       0s |         0s |         0 |     grant pg_read_all_stats, pg_monitor to charlie |
      |     1 |       0s |         0s |         0 |                                  create user frank |
      |     1 |       0s |         0s |         0 |       grant pg_monitor, pg_read_all_stats to frank |
      +-------+----------+------------+-----------+----------------------------------------------------+

Database #2:
    Name:                bench
    Owner:               alice
    Tablespace:          pg_default
    Connections:         2 (no max limit)
    Frozen Xid Age:      22247
    Transactions:        23264 (98.8%) commits, 273 (1.2%) rollbacks
    Cache Hits:          96.0%
    Rows Changed:        ins 86.1%, upd 7.9%, del 6.0%
    Total Temp:          9.6 MiB in 4 files
    Problems:            0 deadlocks, 0 conflicts
    Totals Since:        14 Oct 2021 9:10:40 AM (26 minutes ago)
    Size:                85 MiB
    Tracked Functions:
      +--------------------+-------+-------------+----------------------+
      |           Function | Calls | Time (self) | Time (self+children) |
      +--------------------+-------+-------------+----------------------+
      | pg_stat_statements |     5 |       570µs |                570µs |
      +--------------------+-------+-------------+----------------------+

    Installed Extensions:
      +--------------------+---------+------------------------------------------------------------------------+
      |               Name | Version |                                                                Comment |
      +--------------------+---------+------------------------------------------------------------------------+
      | pg_stat_statements |     1.9 | track planning and execution statistics of all SQL statements executed |
      |            plpgsql |     1.0 |                                           PL/pgSQL procedural language |
      +--------------------+---------+------------------------------------------------------------------------+

    Slow Queries:
      +-------+----------+------------+-----------+----------------------------------------------------+
      | Calls | Avg Time | Total Time | Rows/Call |                                              Query |
      +-------+----------+------------+-----------+----------------------------------------------------+
      | 22206 |       0s |      262ms |         1 | UPDATE pgbench_accounts SET abalance = abalance +  |
      |     1 |    241ms |      241ms |         0 | alter table pgbench_accounts add primary key (aid) |
      |     1 |    229ms |      229ms |    500000 |                   copy pgbench_accounts from stdin |
      | 22206 |       0s |      168ms |         1 | UPDATE pgbench_tellers SET tbalance = tbalance + $ |
      | 22206 |       0s |      129ms |         1 | UPDATE pgbench_branches SET bbalance = bbalance +  |
      |     1 |     84ms |       84ms |         0 |                    vacuum analyze pgbench_accounts |
      | 22206 |       0s |       74ms |         1 | SELECT abalance FROM pgbench_accounts WHERE aid =  |
      |     6 |     11ms |       71ms |         1 | SELECT archived_count,     COALESCE(last_archived_ |
      | 22206 |       0s |       54ms |         1 | INSERT INTO pgbench_history (tid, bid, aid, delta, |
      |     1 |     29ms |       29ms |         0 |                create extension pg_stat_statements |
      |     5 |      5ms |       28ms |         8 | SELECT   current_database() AS db, schemaname, tab |
      |     2 |      8ms |       17ms |       209 | SELECT c.tableoid, c.oid, c.relname, (SELECT pg_ca |
      |     1 |     15ms |       15ms |     22206 |              COPY public.pgbench_history TO STDOUT |
      |     6 |      2ms |       14ms |         2 | SELECT name, current_database(), COALESCE(default_ |
      |     1 |     13ms |       13ms |         0 | truncate table pgbench_accounts, pgbench_branches, |
      |     1 |     11ms |       11ms |         0 |                    vacuum analyze pgbench_branches |
      |     1 |     10ms |       10ms |         0 |                            vacuum pgbench_branches |
      |     1 |     10ms |       10ms |         1 |  select pg_create_logical_replication_slot($1, $2) |
      |     2 |      4ms |        8ms |       613 | SELECT t.tableoid, t.oid, t.typname, t.typnamespac |
      |     6 |      1ms |        8ms |       361 | SELECT name, setting, COALESCE(boot_val,$1), sourc |
      |     2 |      2ms |        5ms |      4307 | SELECT description, classoid, objoid, objsubid FRO |
      |    12 |       0s |        5ms |         1 |                      SELECT pg_tablespace_size($1) |
      | 22206 |       0s |        4ms |         0 |                                                END |
      |   217 |       0s |        4ms |         3 | SELECT a.attname,       a.atttypid,       a.attnum |
      |   217 |       0s |        3ms |         1 | SELECT c.oid, c.relreplident, c.relkind  FROM pg_c |
      | 22206 |       0s |        3ms |         0 |                                              BEGIN |
      |    12 |       0s |        3ms |         1 |                        SELECT pg_database_size($1) |
      |     6 |       0s |        2ms |         1 | SELECT EXTRACT($1 FROM pg_postmaster_start_time()) |
      |    72 |       0s |        2ms |        50 |              COPY public.pgbench_tellers TO STDOUT |
      |     5 |       0s |        2ms |        93 | SELECT userid, dbid, queryid, LEFT(COALESCE(query, |
      |     2 |      1ms |        2ms |        14 | SELECT p.tableoid, p.oid, p.proname, p.prolang, p. |
      |     2 |      1ms |        2ms |      1848 | SELECT classid, objid, refclassid, refobjid, depty |
      |     2 |      1ms |        2ms |       804 | SELECT tableoid, oid, oprname, oprnamespace, (SELE |
      |     6 |       0s |        2ms |         4 | SELECT S.relid, S.schemaname, S.relname, current_d |
      |   267 |       0s |        1ms |         1 |           SELECT pg_catalog.set_config($1, $2, $3) |
      |     6 |       0s |        1ms |         0 | SELECT funcid, schemaname, funcname, current_datab |
      |    72 |       0s |        1ms |         5 |             COPY public.pgbench_branches TO STDOUT |
      |     1 |      1ms |        1ms |         0 | create table pgbench_history(tid int,bid int,aid   |
      |     1 |      1ms |        1ms |         0 | alter table pgbench_branches add primary key (bid) |
      |   217 |       0s |        1ms |         0 |    BEGIN READ ONLY ISOLATION LEVEL REPEATABLE READ |
      |     6 |       0s |         0s |         3 | SELECT S.relid, S.indexrelid, S.schemaname, S.reln |
      |     6 |       0s |         0s |         3 | SELECT indexrelid, pg_get_indexdef(indexrelid) FRO |
      |    25 |       0s |         0s |         1 |                           SELECT pg_table_size($1) |
      |     6 |       0s |         0s |         1 | SELECT usename, application_name,    COALESCE(clie |
      |    19 |       0s |         0s |         1 |                  SELECT pg_total_relation_size($1) |
      |     2 |       0s |         0s |         0 | SELECT p.tableoid, p.oid, p.proname AS aggname, p. |
      |     6 |       0s |         0s |         2 | SELECT D.oid, D.datname, D.datdba, D.dattablespace |
      |     4 |       0s |         0s |         1 | SELECT pg_catalog.pg_get_viewdef($1::pg_catalog.oi |
      |     2 |       0s |         0s |       177 | SELECT tableoid, oid, opcname, opcnamespace, (SELE |
      |     6 |       0s |         0s |         1 | SELECT t.tableoid, t.oid, t.relname AS indexname,  |
      |     1 |       0s |         0s |         0 |             create publication pub1 for all tables |
      |     6 |       0s |         0s |         1 | SELECT COALESCE(datname, $2), COALESCE(usename, $3 |
      |     2 |       0s |         0s |         4 | SELECT DISTINCT t.schemaname, t.tablename   FROM p |
      |     1 |       0s |         0s |         0 |                             vacuum pgbench_tellers |
      |     6 |       0s |         0s |         5 | SELECT COALESCE(D.datname, $1), L.locktype, L.mode |
      |     2 |       0s |         0s |       146 | SELECT tableoid, oid, opfname, opfnamespace, (SELE |
      |    12 |       0s |         0s |         8 | SELECT a.attnum, a.attname, a.atttypmod, a.attstat |
      |     2 |       0s |         0s |         9 | SELECT classid, objid, refobjid FROM pg_depend WHE |
      |     2 |       0s |         0s |       128 | SELECT tableoid, oid, conname, connamespace, (SELE |
      |     1 |       0s |         0s |         0 |                     vacuum analyze pgbench_tellers |
      |     1 |       0s |         0s |         0 | create table pgbench_tellers(tid int not null,bid  |
      |     1 |       0s |         0s |         0 |                     vacuum analyze pgbench_history |
      |     2 |       0s |         0s |         4 | SELECT n.tableoid, n.oid, n.nspname, (SELECT rolna |
      |    50 |       0s |         0s |         1 | insert into pgbench_tellers(tid,bid,tbalance) valu |
      |     2 |       0s |         0s |       224 | SELECT tableoid, oid, castsource, casttarget, cast |
      |     6 |       0s |         0s |         1 | SELECT checkpoints_timed, checkpoints_req, checkpo |
      |     6 |       0s |         0s |         1 | SELECT wal_records, wal_fpi, wal_bytes, wal_buffer |
      |     6 |       0s |         0s |        16 | SELECT R.oid, R.rolname, R.rolsuper, R.rolinherit, |
      |     1 |       0s |         0s |         0 | create table pgbench_accounts(aid    int not null, |
      |     5 |       0s |         0s |         0 | WITH pc AS (SELECT pubname, COUNT(*) AS c FROM pg_ |
      |     1 |       0s |         0s |         0 | create table pgbench_branches(bid int not null,bba |
      |     1 |       0s |         0s |         0 | drop table if exists pgbench_accounts, pgbench_bra |
      |     6 |       0s |         0s |         5 |    SELECT name FROM pg_ls_waldir() WHERE name ~ $1 |
      |     6 |       0s |         0s |         0 | WITH P AS (SELECT DISTINCT pid FROM pg_locks WHERE |
      |     1 |       0s |         0s |         0 |  alter table pgbench_tellers add primary key (tid) |
      |     6 |       0s |         0s |         0 | SELECT relid, schemaname, relname, current_databas |
      |     2 |       0s |         0s |       141 | SELECT tableoid, oid, rulename, ev_class AS ruleta |
      |     1 |       0s |         0s |         0 |                           truncate pgbench_history |
      |     6 |       0s |         0s |         7 | SELECT backend_type, count(*) FROM pg_stat_activit |
      |     6 |       0s |         0s |         1 | SELECT COUNT(*) FROM pg_ls_archive_statusdir() WHE |
      |     6 |       0s |         0s |         3 | SELECT slot_name, COALESCE(plugin, $1), slot_type, |
      |     6 |       0s |         0s |         1 | SELECT proretset, prosrc, probin, provolatile, pro |
      |     6 |       0s |         0s |         1 | SELECT checkpoint_lsn, redo_lsn, timeline_id,    n |
      |     1 |       0s |         0s |         5 | SELECT r.rolname, r.rolsuper, r.rolinherit,   r.ro |
      |     1 |       0s |         0s |         1 | select o.n, p.partstrat, pg_catalog.count(i.inhpar |
      |     2 |       0s |         0s |        29 | SELECT tableoid, oid, dictname, dictnamespace, (SE |
      |     5 |       0s |         0s |         1 | insert into pgbench_branches(bid,bbalance) values( |
      +-------+----------+------------+-----------+----------------------------------------------------+

    Logical Replication Publications:
      +------+-------------+---------------------------+--------+
      | Name | All Tables? |                 Propagate | Tables |
      +------+-------------+---------------------------+--------+
      | pub1 |         yes | inserts, updates, deletes |      4 |
      +------+-------------+---------------------------+--------+

Table #1 in "bench":
    Name:                bench.public.pgbench_history
    Columns:             6
    Manual Vacuums:      1, last 25 minutes ago
    Manual Analyze:      1, last 25 minutes ago
    Auto Vacuums:        1, last 24 minutes ago
    Auto Analyze:        1, last 24 minutes ago
    Post-Analyze:        0.0% est. rows modified
    Row Estimate:        100.0% live of total 22206
    Rows Changed:        ins 100.0%, upd 0.0%, del 0.0%
    HOT Updates:         0.0% of all updates
    Seq Scans:           1, 22206.0 rows/scan
    Idx Scans:           0, 0.0 rows/scan
    Cache Hits:          99.4% (idx=0.0%)
    Size:                1.1 MiB

Table #2 in "bench":
    Name:                bench.public.pgbench_tellers
    Columns:             4
    Manual Vacuums:      2, last 24 minutes ago
    Manual Analyze:      1, last 25 minutes ago
    Auto Vacuums:        never
    Auto Analyze:        1, last 24 minutes ago
    Post-Analyze:        0.0% est. rows modified
    Row Estimate:        48.1% live of total 104
    Rows Changed:        ins 0.2%, upd 99.8%, del 0.0%
    HOT Updates:         100.0% of all updates
    Seq Scans:           22279, 50.0 rows/scan
    Idx Scans:           0, 0.0 rows/scan
    Cache Hits:          100.0% (idx=50.0%)
    Size:                40 KiB
    +----------------------+-------+--------+-------+------------+-------+----------------+-------------------+
    |                Index |  Type |   Size | Bloat | Cache Hits | Scans | Rows Read/Scan | Rows Fetched/Scan |
    +----------------------+-------+--------+-------+------------+-------+----------------+-------------------+
    | pgbench_tellers_pkey | btree | 16 KiB |       |      50.0% |     0 |            0.0 |               0.0 |
    +----------------------+-------+--------+-------+------------+-------+----------------+-------------------+

Table #3 in "bench":
    Name:                bench.public.pgbench_accounts
    Columns:             4
    Manual Vacuums:      1, last 25 minutes ago
    Manual Analyze:      1, last 25 minutes ago
    Auto Vacuums:        1, last 25 minutes ago
    Auto Analyze:        1, last 25 minutes ago
    Post-Analyze:        4.3% est. rows modified
    Row Estimate:        97.3% live of total 513790
    Rows Changed:        ins 95.7%, upd 2.8%, del 0.0%
    HOT Updates:         65.0% of all updates
    Seq Scans:           74, 7665.0 rows/scan
    Idx Scans:           44412, 1.0 rows/scan
    Cache Hits:          76.2% (idx=99.1%)
    Size:                65 MiB
    +-----------------------+-------+--------+-------+------------+-------+----------------+-------------------+
    |                 Index |  Type |   Size | Bloat | Cache Hits | Scans | Rows Read/Scan | Rows Fetched/Scan |
    +-----------------------+-------+--------+-------+------------+-------+----------------+-------------------+
    | pgbench_accounts_pkey | btree | 11 MiB |       |      99.1% | 44412 |            1.2 |               1.0 |
    +-----------------------+-------+--------+-------+------------+-------+----------------+-------------------+

Table #4 in "bench":
    Name:                bench.public.pgbench_branches
    Columns:             3
    Manual Vacuums:      2, last 24 minutes ago
    Manual Analyze:      1, last 25 minutes ago
    Auto Vacuums:        1, last 24 minutes ago
    Auto Analyze:        1, last 24 minutes ago
    Post-Analyze:        0.0% est. rows modified
    Row Estimate:        100.0% live of total 5
    Rows Changed:        ins 0.0%, upd 100.0%, del 0.0%
    HOT Updates:         100.0% of all updates
    Seq Scans:           22280, 5.0 rows/scan
    Idx Scans:           0, 0.0 rows/scan
    Cache Hits:          100.0% (idx=75.0%)
    Size:                40 KiB
    +-----------------------+-------+--------+-------+------------+-------+----------------+-------------------+
    |                 Index |  Type |   Size | Bloat | Cache Hits | Scans | Rows Read/Scan | Rows Fetched/Scan |
    +-----------------------+-------+--------+-------+------------+-------+----------------+-------------------+
    | pgbench_branches_pkey | btree | 16 KiB |       |      75.0% |     0 |            0.0 |               0.0 |
    +-----------------------+-------+--------+-------+------------+-------+----------------+-------------------+