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.


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.

  1. For an existing continuous aggregate, at the psql prompt, enable compression:

    ALTER MATERIALIZED VIEW cagg_name set (timescaledb.compress = true);
  2. 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);


Found an issue on this page?Report an issue or Edit this page in GitHub.