Continuous aggregates are often used to downsample historical data. If the data is only used for analytical queries and never modified, you can compress the aggregate to save on storage.
Warning
Before version 2.11.0, you can't refresh the compressed regions of a continuous aggregate. To avoid conflicts between compression and refresh, make sure you set compress_after
to a larger interval than the start_offset
of your refresh policy.
Compression on continuous aggregates works similarly to compression on
hypertables. When compression is enabled and no other options are
provided, the segment_by
value will be automatically set to the group by
columns of the continuous aggregate and the time_bucket
column will be used as
the order_by
column in the compression configuration.
You can enable and disable compression on continuous aggregates by setting the
compress
parameter when you alter the view.
For an existing continuous aggregate, at the
psql
prompt, enable compression:ALTER MATERIALIZED VIEW cagg_name set (timescaledb.compress = true);Disable compression:
ALTER MATERIALIZED VIEW cagg_name set (timescaledb.compress = false);
Disabling compression on a continuous aggregate fails if there are compressed chunks associated with the continuous aggregate. In this case, you need to decompress the chunks, and then drop any compression policy on the continuous aggregate, before you disable compression. For more detailed information, see the decompress chunks section:
SELECT decompress_chunk(c, true) FROM show_chunks('cagg_name') c;
Before setting up a compression policy on a continuous aggregate, you should set up a refresh policy. The compression policy interval should be set so that actively refreshed regions are not compressed. This is to prevent refresh policies from failing. For example, consider a refresh policy like this:
SELECT add_continuous_aggregate_policy('cagg_name',start_offset => INTERVAL '30 days',end_offset => INTERVAL '1 day',schedule_interval => INTERVAL '1 hour');
With this kind of refresh policy, the compression policy needs the
compress_after
parameter greater than the start_offset
parameter of the
continuous aggregate policy:
SELECT add_compression_policy('cagg_name', compress_after=>'45 days'::interval);
Keywords
Found an issue on this page?Report an issue or Edit this page in GitHub.