> ## Documentation Index
> Fetch the complete documentation index at: https://pg-stat-ch-amogiska-arrow-instance-uuid.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Version compatibility

> Feature matrix and version-specific behavior for PostgreSQL 16, 17, and 18

pg\_stat\_ch supports PostgreSQL 16, 17, and 18. All versions capture core telemetry. Newer versions expose additional metrics.

## Feature matrix

| Feature                                                  | PG 16 | PG 17 | PG 18 |
| -------------------------------------------------------- | :---: | :---: | :---: |
| **Core metrics**                                         |       |       |       |
| Query timing (`duration_us`)                             |  Yes  |  Yes  |  Yes  |
| Row counts                                               |  Yes  |  Yes  |  Yes  |
| Query ID                                                 |  Yes  |  Yes  |  Yes  |
| Command type (SELECT/INSERT/UPDATE/DELETE/MERGE/UTILITY) |  Yes  |  Yes  |  Yes  |
| Normalized query text                                    |  Yes  |  Yes  |  Yes  |
| **Buffer usage**                                         |       |       |       |
| Shared blocks (hit/read/dirtied/written)                 |  Yes  |  Yes  |  Yes  |
| Local blocks (hit/read/dirtied/written)                  |  Yes  |  Yes  |  Yes  |
| Temp blocks (read/written)                               |  Yes  |  Yes  |  Yes  |
| **I/O timing**                                           |       |       |       |
| Shared block read/write time                             |  Yes  |  Yes  |  Yes  |
| Local block read/write time                              |   --  |  Yes  |  Yes  |
| Temp block read/write time                               |  Yes  |  Yes  |  Yes  |
| **WAL**                                                  |       |       |       |
| WAL records/FPI/bytes                                    |  Yes  |  Yes  |  Yes  |
| **CPU time**                                             |       |       |       |
| User/system CPU time (`getrusage`)                       |  Yes  |  Yes  |  Yes  |
| **JIT**                                                  |       |       |       |
| JIT function count and compilation times                 |  Yes  |  Yes  |  Yes  |
| JIT deform time                                          |   --  |  Yes  |  Yes  |
| **Parallel query**                                       |       |       |       |
| Workers planned/launched                                 |   --  |   --  |  Yes  |
| **Client context**                                       |       |       |       |
| Application name, client IP                              |  Yes  |  Yes  |  Yes  |
| **Error capture**                                        |       |       |       |
| SQLSTATE code, error level, message                      |  Yes  |  Yes  |  Yes  |
| **Observability**                                        |       |       |       |
| Custom wait event in `pg_stat_activity`                  |   --  |  Yes  |  Yes  |

## PostgreSQL 18

### Parallel worker statistics

Fields: `parallel_workers_planned`, `parallel_workers_launched`

Tracks how many parallel workers the optimizer planned vs how many were actually launched. If `launched < planned`, the system may be hitting `max_parallel_workers` limits.

```sql theme={null}
SELECT query_id, cmd_type,
       parallel_workers_planned,
       parallel_workers_launched,
       parallel_workers_planned - parallel_workers_launched AS workers_missed
FROM pg_stat_ch.events_raw
WHERE parallel_workers_planned > parallel_workers_launched
ORDER BY workers_missed DESC;
```

## PostgreSQL 17

### Separate local block I/O timing

Fields: `local_blk_read_time_us`, `local_blk_write_time_us`

PG 16 only tracked I/O timing for shared buffers. PG 17 adds separate timing for local buffers (temporary tables), enabling analysis of temp table performance.

```sql theme={null}
SELECT query_id,
       local_blk_read_time_us + local_blk_write_time_us AS local_io_us,
       shared_blk_read_time_us + shared_blk_write_time_us AS shared_io_us
FROM pg_stat_ch.events_raw
WHERE local_blk_read_time_us > 0 OR local_blk_write_time_us > 0;
```

### JIT deform time

Field: `jit_deform_time_us`

Time spent JIT-compiling tuple deform functions. High deform time may indicate queries touching many columns.

```sql theme={null}
SELECT query_id, jit_functions, jit_deform_time_us,
       jit_generation_time_us + jit_inlining_time_us +
       jit_optimization_time_us + jit_emission_time_us AS other_jit_us
FROM pg_stat_ch.events_raw
WHERE jit_deform_time_us > 1000;  -- > 1ms
```

### Custom wait event name

The background worker appears as `PgStatChExporter` in `pg_stat_activity.wait_event` instead of generic `Extension`. This makes it easier to identify pg\_stat\_ch activity in monitoring tools.

## Field reference

For the complete list of all fields with types, descriptions, and tuning guidance, see the [events schema reference](/reference/events-schema).
