docs/sources/datasources/postgres/annotations/index.md
Annotations overlay event data on your dashboard graphs, helping you correlate events with metrics. You can use PostgreSQL as a data source for annotations to display events such as deployments, alerts, or other significant occurrences on your visualizations.
For general information about annotations, refer to Annotate visualizations.
Before creating PostgreSQL annotations, ensure you have:
To add a PostgreSQL annotation to your dashboard:
Your annotation query must return a time column and can optionally include timeend, text, and tags columns.
| Column | Required | Description |
|---|---|---|
time | Yes | The timestamp for the annotation. Can be a native SQL date/time type or UNIX epoch value. |
timeend | No | The end timestamp for range annotations. Creates a shaded region instead of a vertical line. |
text | No | The annotation description displayed when you hover over the annotation. |
tags | No | Tags for the annotation as a comma-separated string. Helps categorize and filter annotations. |
The following examples show common annotation query patterns.
Display events using UNIX epoch timestamps:
SELECT
epoch_time as time,
metric1 as text,
concat_ws(', ', metric1::text, metric2::text) as tags
FROM public.test_data
WHERE $__unixEpochFilter(epoch_time)
Display events with duration as shaded regions:
SELECT
epoch_time as time,
epoch_time_end as timeend,
metric1 as text,
concat_ws(', ', metric1::text, metric2::text) as tags
FROM public.test_data
WHERE $__unixEpochFilter(epoch_time)
Display events using native PostgreSQL date/time columns:
SELECT
native_date_time as time,
metric1 as text,
concat_ws(', ', metric1::text, metric2::text) as tags
FROM public.test_data
WHERE $__timeFilter(native_date_time)
Display deployment events:
SELECT
deployed_at as time,
concat('Deployed ', version, ' to ', environment) as text,
environment as tags
FROM deployments
WHERE $__timeFilter(deployed_at)
Display maintenance windows as shaded regions:
SELECT
start_time as time,
end_time as timeend,
concat('Maintenance: ', description) as text,
'maintenance' as tags
FROM maintenance_windows
WHERE $__timeFilter(start_time)
Use these macros in your annotation queries to filter by the dashboard time range:
| Macro | Description |
|---|---|
$__timeFilter(column) | Filters by time range using a native SQL date/time column. |
$__unixEpochFilter(column) | Filters by time range using a column with UNIX epoch timestamps. |
Follow these best practices when creating PostgreSQL annotations:
$__timeFilter() or $__unixEpochFilter() to limit results to the dashboard time range.text column to make annotations useful.