<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nicole Ghalwash</title>
    <description>The latest articles on DEV Community by Nicole Ghalwash (@nicole_ghalwash).</description>
    <link>https://dev.to/nicole_ghalwash</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4057226%2Fa9f0985c-26d0-4d5d-80c5-4f8ed842b0e5.png</url>
      <title>DEV Community: Nicole Ghalwash</title>
      <link>https://dev.to/nicole_ghalwash</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nicole_ghalwash"/>
    <language>en</language>
    <item>
      <title>TimescaleDB 2.28: Faster Queries, Lighter Operations, and Better Schema Evolution</title>
      <dc:creator>Nicole Ghalwash</dc:creator>
      <pubDate>Wed, 29 Jul 2026 12:30:13 +0000</pubDate>
      <link>https://dev.to/tigerdata/timescaledb-228-faster-queries-lighter-operations-and-better-schema-evolution-54hb</link>
      <guid>https://dev.to/tigerdata/timescaledb-228-faster-queries-lighter-operations-and-better-schema-evolution-54hb</guid>
      <description>&lt;p&gt;Time-series analytics at scale creates operational friction. When you're running continuous aggregates, columnar storage, and complex analytical patterns, each new metric, query pattern, and configuration tuning attempt adds complexity. Refreshes block each other, configuration changes require rebuilds, and new aggregates mean recomputing entire rollups.&lt;/p&gt;

&lt;p&gt;Over recent &lt;a href="https://github.com/timescale/timescaledb/releases" rel="noopener noreferrer"&gt;&lt;u&gt;TimescaleDB releases&lt;/u&gt;&lt;/a&gt;, we've prioritized minimizing these hurdles by leveraging bloom filters to bypass redundant processing during high-volume operations on columnar storage. We also expanded vectorized execution across more query patterns and simplified continuous aggregate workflows by combining refresh and compression.&lt;/p&gt;

&lt;p&gt;Now with &lt;a href="https://github.com/timescaledb/releases/tag/2.28.0" rel="noopener noreferrer"&gt;&lt;u&gt;TimescaleDB 2.28&lt;/u&gt;&lt;/a&gt;, we're making common analytical queries faster without code changes, making continuous aggregate operations less disruptive and more flexible, and eliminating friction when evolving your schema and configuration. The result is faster queries, lighter operations, and the ability to evolve your analytics alongside your application as it scales.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Lighter, more flexible continuous aggregates:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ADD COLUMN&lt;/code&gt; on CAggs: Add new aggregations in place without rebuilding&lt;/li&gt;
&lt;li&gt;Fine-grained locking: Refreshes no longer serialize unrelated operations&lt;/li&gt;
&lt;li&gt;Incremental refresh batching: Break large refreshes into batches instead of one heavy operation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ANALYZE&lt;/code&gt; and &lt;code&gt;VACUUM&lt;/code&gt;: Maintenance commands now work directly on continuous aggregates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Faster queries on compressed data:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Metadata-driven first() and last() queries: Answer from batch metadata without decompression&lt;/li&gt;
&lt;li&gt;Vectorized &lt;code&gt;CASE&lt;/code&gt; expressions: Conditional logic stays on the fast path&lt;/li&gt;
&lt;li&gt;Batch Sorted Merge for more queries: Lighter-weight sorting on compressed data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Better operational flexibility:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sparse index retrofitting: Update configuration on existing chunks without recompression&lt;/li&gt;
&lt;li&gt;Compression settings clarity: Warnings prevent misconfiguration&lt;/li&gt;
&lt;li&gt;GUC for bulk loads: Skip invalidation tracking during migrations&lt;/li&gt;
&lt;li&gt;Nullable &lt;code&gt;ORDER BY&lt;/code&gt; safety: Fallback to correct compression path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Also:&lt;/strong&gt; PostgreSQL 15 support ends with 2.28. Plan your upgrade to PG16, PG17, or PG18.&lt;/p&gt;

&lt;h2&gt;
  
  
  Schema evolution: ADD COLUMN on CAggs
&lt;/h2&gt;

&lt;p&gt;Schema evolution lets you add new aggregated columns without dropping and rebuilding. Before 2.28, adding a metric meant recreating the entire CAgg, recomputing all historical data (hours on large datasets), and breaking downstream consumers. Now you can &lt;code&gt;ADD COLUMN&lt;/code&gt; with &lt;code&gt;GENERATED ALWAYS AS&lt;/code&gt; and backfill incrementally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Add a new metric to an existing CAgg&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="n"&gt;MATERIALIZED&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;conditions_summary_hourly&lt;/span&gt;
  &lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;COLUMN&lt;/span&gt; &lt;span class="n"&gt;max_temp&lt;/span&gt; &lt;span class="nb"&gt;double&lt;/span&gt; &lt;span class="nb"&gt;precision&lt;/span&gt;
  &lt;span class="k"&gt;GENERATED&lt;/span&gt; &lt;span class="n"&gt;ALWAYS&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;STORED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Backfill historical data&lt;/span&gt;
&lt;span class="k"&gt;CALL&lt;/span&gt; &lt;span class="n"&gt;refresh_continuous_aggregate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s1"&gt;'conditions_summary_hourly'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;force&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How we made continuous aggregates operational at scale
&lt;/h2&gt;

&lt;p&gt;Real-time dashboards on operational data used to force a choice: refresh frequently and block bulk loads, or refresh less often and accept stale data. Every continuous aggregate refresh acquired a table-wide lock on its materialized hypertable, blocking concurrent operations. In 2.28, we switched to row-level locking on the continuous aggregate catalog entry. Only one refresh processes a CAgg's invalidation log at a time, but the materialized table is free for concurrent operations. Refreshes and bulk loads now run in parallel.&lt;/p&gt;

&lt;p&gt;We also made continuous aggregates more flexible. &lt;code&gt;ADD COLUMN&lt;/code&gt; on CAggs enables you to evolve your analytical schema in production by adding new aggregations as you learn what data you need, without downtime or rebuilds. Your dashboard design no longer locks you into upfront predictions. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj9uuz9qj7v2kk2rzduv2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj9uuz9qj7v2kk2rzduv2.jpg" alt="TimescaleDB 2.28 - Continuous Aggregates" width="799" height="519"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Before 2.28: refresh acquired table-wide lock&lt;/span&gt;
&lt;span class="c1"&gt;-- After 2.28: refresh acquires only catalog row lock&lt;/span&gt;
&lt;span class="k"&gt;CALL&lt;/span&gt; &lt;span class="n"&gt;refresh_continuous_aggregate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s1"&gt;'metrics_hourly'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'2026-01-01'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'2026-02-01'&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;-- Other refreshes, bulk loads, and DDL can proceed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.28 also adds two capabilities that make continuous aggregates evolve with your application:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incremental refresh batching&lt;/strong&gt; processes large time windows in smaller batches instead of single long-running transactions. Before 2.28, &lt;code&gt;refresh_continuous_aggregate()&lt;/code&gt; materialized the entire window atomically, holding resources and blocking vacuums. Large windows could take hours and fail mid-way. Now you can batch them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;   &lt;span class="c1"&gt;-- Refresh a 30-day window in smaller batches&lt;/span&gt;
   &lt;span class="k"&gt;CALL&lt;/span&gt; &lt;span class="n"&gt;refresh_continuous_aggregate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
     &lt;span class="s1"&gt;'metrics_hourly'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;INTERVAL&lt;/span&gt; &lt;span class="s1"&gt;'30 days'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
     &lt;span class="k"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'{
       "buckets_per_batch": 10,
       "max_batches_per_execution": 20
     }'&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;jsonb&lt;/span&gt;
   &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Schema evolution&lt;/strong&gt; lets you add new aggregated columns without dropping and rebuilding. Before 2.28, adding a metric meant recreating the entire CAgg, recomputing all historical data (hours on large datasets), and breaking downstream consumers. Now you can &lt;code&gt;ADD COLUMN&lt;/code&gt; with &lt;code&gt;GENERATED ALWAYS AS&lt;/code&gt; and backfill incrementally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Add a new metric to an existing CAgg&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="n"&gt;MATERIALIZED&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;conditions_summary_hourly&lt;/span&gt;
  &lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;COLUMN&lt;/span&gt; &lt;span class="n"&gt;max_temp&lt;/span&gt; &lt;span class="nb"&gt;double&lt;/span&gt; &lt;span class="nb"&gt;precision&lt;/span&gt;
  &lt;span class="k"&gt;GENERATED&lt;/span&gt; &lt;span class="n"&gt;ALWAYS&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;STORED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Backfill historical data&lt;/span&gt;
&lt;span class="k"&gt;CALL&lt;/span&gt; &lt;span class="n"&gt;refresh_continuous_aggregate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s1"&gt;'conditions_summary_hourly'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;force&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ANALYZE&lt;/code&gt; and &lt;code&gt;VACUUM&lt;/code&gt; now work on continuous aggregates directly. Maintenance commands automatically maintain accurate planner statistics across the materialized hypertable and all its chunks, ensuring query plans stay optimal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faster queries on compressed data
&lt;/h2&gt;

&lt;p&gt;One of the most common queries in time-series workloads is "give me the latest value per series." Dashboards and monitoring systems run it constantly. It's a simple pattern: find the first or last value in a time range. But on compressed data, answering that query used to require decompressing entire batches just to find values that are already in the metadata. Time-sorted batches store first and last values as metadata. But before 2.28, the database decompressed anyway to answer those queries.&lt;/p&gt;

&lt;p&gt;In 2.28, TimescaleDB extracts first(value, time) and last(value, time) aggregates directly from batch sparse indexes. No decompression. For "latest reading" queries that consume significant resources at scale, that means meaningful speedup with zero query changes. Here's what that looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2sva9t6mujgkx8rgh8gk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2sva9t6mujgkx8rgh8gk.jpg" alt="TimescaleDB 2.28 - Metadata Optimization" width="800" height="621"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Define firstlast sparse index&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;metrics&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;tsdb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'firstlast(temperature)'&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Note: Use rebuild_sparse_index() to retrofit existing chunks&lt;/span&gt;
&lt;span class="c1"&gt;-- New chunks now answer this query from metadata alone&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;device_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;last&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;metrics&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nb"&gt;time&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;INTERVAL&lt;/span&gt; &lt;span class="s1"&gt;'7 days'&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;device_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Beyond first/last, we also extended vectorized execution to cover &lt;code&gt;CASE&lt;/code&gt; expressions. Before 2.28, conditional logic in aggregations forced columnar queries to fall back to row-by-row processing, making identical queries perform very differently depending on whether a &lt;code&gt;CASE&lt;/code&gt; expression was present.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- This query now stays fully vectorized&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;time_bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'1 hour'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;CASE&lt;/span&gt; &lt;span class="k"&gt;WHEN&lt;/span&gt; &lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;ELSE&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;END&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;error_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;CASE&lt;/span&gt; &lt;span class="k"&gt;WHEN&lt;/span&gt; &lt;span class="n"&gt;latency_ms&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;latency_ms&lt;/span&gt; &lt;span class="k"&gt;END&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;slow_avg_latency&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;ts&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;INTERVAL&lt;/span&gt; &lt;span class="s1"&gt;'7 days'&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pivot-style queries, error rate calculations, and conditional metrics all stay on the fast vectorized path. For workloads that use conditional aggregations on compressed history, that eliminates the surprise performance cliffs.&lt;/p&gt;

&lt;p&gt;Finally, Batch Sorted Merge now applies to more query patterns. &lt;code&gt;ORDER BY&lt;/code&gt; queries on unordered compressed chunks without segmentation no longer fall back to expensive external sorts. The planner now replaces those sorts with lightweight metadata merges over pre-sorted batches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better operational flexibility and efficiency
&lt;/h2&gt;

&lt;p&gt;Tuning time-series workloads means iterating on compression strategy. But historically, every configuration change (adding a sparse index, adjusting &lt;code&gt;segmentby&lt;/code&gt;, optimizing &lt;code&gt;orderby&lt;/code&gt;) only applied to future compressions. Existing chunks kept their old settings, creating inconsistent performance and confusion about why newly tuned queries behaved differently.&lt;/p&gt;

&lt;p&gt;2.28 eliminates that friction. &lt;code&gt;rebuild_sparse_index&lt;/code&gt; lets you retrofit sparse index configuration to existing chunks without recompressing. Sparse indexes are metadata. Updating them shouldn't require rewriting data. Below is the actual code snippet you can leverage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Change sparse index settings on the hypertable&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;metrics&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;tsdb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'minmax(value)'&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Retrofit existing chunks without recompression&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;_timescaledb_functions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rebuild_sparse_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s1"&gt;'_timescaledb_internal._hyper_1_42_chunk'&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Compression settings changes now emit warnings&lt;/strong&gt; clarifying that new settings apply only to future compressions. This closes the gap: users assume &lt;code&gt;ALTER TABLE&lt;/code&gt; sets configuration across the entire dataset, but it only affects new chunks.&lt;/p&gt;

&lt;p&gt;For correctness, &lt;strong&gt;nullable ORDER BY columns now safely fall back&lt;/strong&gt; to decompress-compress during recompression, preventing silent incorrect results when min/max metadata doesn't account for &lt;code&gt;NULL&lt;/code&gt;s.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gapfill row count estimation&lt;/strong&gt; improved so &lt;code&gt;time_bucket_gapfill&lt;/code&gt; queries get more accurate planner statistics and better query plans.&lt;/p&gt;

&lt;p&gt;For bulk migrations, a new GUC &lt;strong&gt;timescaledb.skip_cagg_invalidation&lt;/strong&gt; suppresses continuous aggregate invalidation tracking during bulk loads. Migration tools no longer generate useless invalidation entries that trigger expensive refresh storms.&lt;/p&gt;

&lt;h2&gt;
  
  
  PostgreSQL 15: Final Release and Migration Path
&lt;/h2&gt;

&lt;p&gt;PostgreSQL 15 support ends with TimescaleDB 2.28. Going forward, only PostgreSQL 16, 17, and 18 are supported.&lt;/p&gt;

&lt;p&gt;If you're on PG15, plan your upgrade to PG17 or PG18 now. We'll begin upgrading instances in production the week of September 15th, so you should plan your migration path over the next two months to avoid downtime. Postgres upgrades are typically non-disruptive (seconds to minutes of downtime using logical replication or physical backup/restore), and newer Postgres versions bring improvements in query parallelism, vector search optimization, and compression.&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrade to 2.28 today
&lt;/h2&gt;

&lt;p&gt;For workloads running continuous aggregates at scale, columnar queries with conditional logic, or iterating on compression configuration, 2.28 removes operational friction: refreshes don't serialize, queries stay vectorized, and tuning doesn't require rewrites.&lt;/p&gt;

&lt;p&gt;2.28 is available now. To learn more, &lt;a href="https://github.com/timescale/timescaledb/releases/tag/2.28.0" rel="noopener noreferrer"&gt;&lt;u&gt;check out the full release notes&lt;/u&gt;&lt;/a&gt; for a complete list of improvements, or &lt;a href="https://console.cloud.tigerdata.com/signup" rel="noopener noreferrer"&gt;&lt;em&gt;&lt;u&gt;try Tiger Cloud for free&lt;/u&gt;&lt;/em&gt;&lt;/a&gt; and experience TimescaleDB 2.28 on your largest hypertables. We welcome your feedback on &lt;a href="https://github.com/timescale/timescaledb" rel="noopener noreferrer"&gt;&lt;u&gt;GitHub&lt;/u&gt;&lt;/a&gt;. Please note that for Tiger Cloud customers, all improvements are live immediately. For self-hosted deployments, download the &lt;a href="https://github.com/timescale/timescaledb/releases/tag/2.28.0" rel="noopener noreferrer"&gt;&lt;u&gt;latest release&lt;/u&gt;&lt;/a&gt; and follow the &lt;a href="https://www.tigerdata.com/docs/reference/timescaledb/install/" rel="noopener noreferrer"&gt;&lt;u&gt;upgrade guide&lt;/u&gt;&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>announcementsrelease</category>
      <category>timescaledb</category>
      <category>database</category>
    </item>
    <item>
      <title>What's New in Tiger Cloud: Bigger Performance Gains, Wider Platform Reach, Better Visibility</title>
      <dc:creator>Nicole Ghalwash</dc:creator>
      <pubDate>Fri, 17 Jul 2026 18:51:12 +0000</pubDate>
      <link>https://dev.to/tigerdata/whats-new-in-tiger-cloud-bigger-performance-gains-wider-platform-reach-better-visibility-2pe0</link>
      <guid>https://dev.to/tigerdata/whats-new-in-tiger-cloud-bigger-performance-gains-wider-platform-reach-better-visibility-2pe0</guid>
      <description>&lt;p&gt;This year, we've focused on improving three areas that define the Tiger Cloud experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scale without splitting your architecture:&lt;/strong&gt; Compression becomes a performance advantage. &lt;code&gt;UPDATE&lt;/code&gt; and &lt;code&gt;DELETE&lt;/code&gt; on compressed data run up to 160x faster, summary queries up to 70x faster. Storage scales to 80,000 IOPS and 64 TB on demand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spend less time configuring, more time shipping:&lt;/strong&gt; Tiger Console auto-tunes hypertables, the &lt;a href="https://www.tigerdata.com/docs/integrate/connectors/source/sync-from-postgres" rel="noopener noreferrer"&gt;&lt;u&gt;PostgreSQL Source Connector&lt;/u&gt;&lt;/a&gt; moves data to Tiger Cloud without custom pipelines, and &lt;code&gt;pg_textsearch&lt;/code&gt; brings production-ready BM25 search natively in Postgres.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-grade reliability, without the DIY tax:&lt;/strong&gt; Tiger Cloud handles data residency, network isolation, disaster recovery, and visibility so you don't have to.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This past quarter we shipped deeper query engine optimizations in TimescaleDB, new regions, new enterprise networking options, and a long list of smaller improvements to how Tiger Console works day-to-day. Instead of listing every Tiger Cloud release on its own, here's what it adds up to, and why it matters: you can stay on Postgres as you scale, you'll spend less time configuring and more time shipping, and you get the reliability and visibility that time-series workloads actually need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scale without splitting your architecture
&lt;/h2&gt;

&lt;p&gt;The moment analytical queries start competing with transactional ones, teams feel pressure to bolt on a separate analytical database. This quarter's TimescaleDB releases and storage upgrades ensure Postgres keeps scaling for time-series and analytical workloads instead of becoming the reason you re-architect. Here's what shipped, and why it matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run queries and writes directly on compressed data, without the performance tax
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.tigerdata.com/docs/build/how-to/basic-compression" rel="noopener noreferrer"&gt;&lt;u&gt;Compression&lt;/u&gt;&lt;/a&gt; used to mean a trade-off: a smaller footprint for slower access. With the release of &lt;a href="https://github.com/timescale/timescaledb/releases/tag/2.26.0" rel="noopener noreferrer"&gt;&lt;u&gt;TimescaleDB v2.26&lt;/u&gt;&lt;/a&gt;, that trade-off keeps shrinking. Aggregate queries like &lt;code&gt;COUNT&lt;/code&gt;, &lt;code&gt;MIN&lt;/code&gt;, &lt;code&gt;MAX&lt;/code&gt;, and &lt;code&gt;FIRST&lt;/code&gt;/&lt;code&gt;LAST&lt;/code&gt; now read straight from compressed metadata instead of decompressing full batches, up to 70x faster. Grouping with time_bucket() runs roughly 3.5x faster. Multi-column filters push down directly into compressed scans, cutting unnecessary decompression by half or more.&lt;/p&gt;

&lt;p&gt;Writes get the same treatment. &lt;a href="https://github.com/timescale/timescaledb/releases/tag/2.27.0" rel="noopener noreferrer"&gt;&lt;u&gt;TimescaleDB v2.27&lt;/u&gt;&lt;/a&gt; lets &lt;code&gt;UPDATE&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;, and &lt;code&gt;UPSERT&lt;/code&gt; on compressed chunks skip decompressing data that can't match, so selective write operations run up to 160x faster. Query rewriting can automatically route matching aggregations to a continuous aggregate, and continuous aggregate refreshes can compress chunks as part of the same job instead of needing a separate policy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tigerdata.com/docs/learn/continuous-aggregates" rel="noopener noreferrer"&gt;&lt;u&gt;Continuous aggregates&lt;/u&gt;&lt;/a&gt; are now more reliable at scale. We fixed three stability issues that were constraining them: a memory leak, query correctness edge cases, and a deadlock during concurrent refreshes. As a result, you can now push continuous aggregates harder without operational workarounds or special handling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add full-text search without adding a search engine
&lt;/h3&gt;

&lt;p&gt;As part of the &lt;a href="https://github.com/timescale/pg_textsearch/releases#release-v1.0.0" rel="noopener noreferrer"&gt;&lt;u&gt;pg_textsearch v1.0.0&lt;/u&gt;&lt;/a&gt; release, &lt;a href="https://www.tigerdata.com/docs/deploy/tiger-cloud/tiger-cloud-aws/tiger-cloud-extensions/pg-textsearch" rel="noopener noreferrer"&gt;&lt;u&gt;BM25 full-text search&lt;/u&gt;&lt;/a&gt; now runs natively inside Postgres, and is production-ready. Add relevance-ranked search to your application without standing up and syncing a separate Elasticsearch cluster. In benchmarks at 138 million documents, &lt;code&gt;pg_textsearch&lt;/code&gt; ran up to 6.5x faster than ParadeDB on typical multi-word queries and sustained 8.7x higher concurrent throughput. It ships with an &lt;code&gt;&amp;lt;@&amp;gt;&lt;/code&gt; query syntax, a &lt;code&gt;bm25_force_merge()&lt;/code&gt; function for segment consolidation, and support for Postgres 17 and 18. One less system in your stack to operate and keep in sync.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scale storage on demand instead of provisioning for a peak that may not come
&lt;/h3&gt;

&lt;p&gt;Scale plan services can now choose between 16,000 and 40,000 IOPS with up to 1,500 MB/s of throughput. Enterprise plans go up to 80,000 IOPS and 2,000 MB/s, with total capacity up to 64 TB. Changes apply without downtime, and you pay only for the IOPS you use. &lt;a href="https://www.tigerdata.com/docs/build/data-management/storage/manage-storage#high-performance-storage-tier" rel="noopener noreferrer"&gt;&lt;u&gt;Size up as your workload grows instead of guessing at peak load today.&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Spend less time configuring, more time shipping
&lt;/h2&gt;

&lt;p&gt;None of the above matters much if half your week still goes to console configuration instead of building. The following updates hand more of that time back to you so you can focus on what matters: building your product, not configuring your database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Build hypertables in a few clicks, without writing SQL
&lt;/h3&gt;

&lt;p&gt;Define hypertable columns directly in Tiger Console instead of writing SQL. Configure a columnstore in the same step. For the best performance, you can enable&lt;a href="https://www.tigerdata.com/docs/build/performance-optimization/improve-hypertable-performance#automated-tuning" rel="noopener noreferrer"&gt;&lt;u&gt;automated chunk tuning&lt;/u&gt;&lt;/a&gt; afterward, so you won't have to manually set chunk intervals.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmdzegt3jgvt8fnb68oah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmdzegt3jgvt8fnb68oah.png" alt="Build hypertables in a few clicks, without writing SQL" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Move data from Postgres into Tiger Cloud without building your own pipeline
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://www.tigerdata.com/docs/integrate/connectors/source/sync-from-postgres" rel="noopener noreferrer"&gt;&lt;u&gt;PostgreSQL Source Connector&lt;/u&gt;&lt;/a&gt; is now stable and ready for production use. Replicate an existing Postgres database into Tiger Cloud without hand-rolling a migration or sync pipeline. It supports a configurable worker count for the initial data copy, table selection by publication or direct selection, SSH tunneling, and bulk updates for table and schema mappings. Everything you need to bring production data over reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production-grade reliability, without the DIY tax
&lt;/h2&gt;

&lt;p&gt;Data residency, network isolation, disaster recovery, and visibility into what's happening inside your database are table stakes for any fully-managed platform. The whole point of choosing Tiger Cloud is that you shouldn't have to design, build, and maintain that infrastructure yourself. Here's what shipped this quarter that takes more of that off your plate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Meet data residency requirements in more places
&lt;/h3&gt;

&lt;p&gt;Tiger Cloud is now available in two additional Azure regions: Germany West Central (Frankfurt) and Southeast Asia (Singapore). Teams with GDPR-sensitive workloads can now keep EU data in-region, and Asia-Pacific teams get local data residency and lower latency, without moving off Azure. For a &lt;a href="https://www.tigerdata.com/docs/learn/tiger-cloud/regions" rel="noopener noreferrer"&gt;&lt;u&gt;list of all available regions, click here&lt;/u&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep database traffic off the public internet
&lt;/h3&gt;

&lt;p&gt;Private endpoint support is now generally available across every supported AWS and Azure region. &lt;a href="https://www.tigerdata.com/docs/deploy/tiger-cloud/tiger-cloud-aws/security/aws-privatelink" rel="noopener noreferrer"&gt;&lt;u&gt;AWS PrivateLink&lt;/u&gt;&lt;/a&gt; connects from your VPC over the AWS private network. &lt;a href="https://www.tigerdata.com/docs/deploy/tiger-cloud/tiger-cloud-azure/security/azure-privatelink" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Private Link&lt;/u&gt;&lt;/a&gt; does the same from your VNet over Microsoft's private backbone. Both are configured directly in Tiger Console and included on Scale and Enterprise plans, so database traffic never has to touch the public internet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recover easily when a region goes down
&lt;/h3&gt;

&lt;p&gt;Cross-region backup already copies your data to a geographically distant region. Now Enterprise customers can restore directly from that backup in Tiger Console, closing the loop so a regional outage doesn't mean opening a support ticket to get your data back. &lt;a href="https://www.tigerdata.com/docs/deploy/tiger-cloud/tiger-cloud-aws/service-management/fork-services#pitr-forks" rel="noopener noreferrer"&gt;&lt;u&gt;To learn more, click here.&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Catch problems in the tools you already use, before they escalate
&lt;/h3&gt;

&lt;p&gt;Visibility should be simple. You shouldn't have to wait for a problem to surface before you can see it coming. The Tiger Cloud status page now lives at &lt;a href="https://status.tigerdata.com" rel="noopener noreferrer"&gt;&lt;u&gt;status.tigerdata.com&lt;/u&gt;&lt;/a&gt;, tied directly into incident response, so you can subscribe and get notified the moment an incident is created, updated, or resolved instead of finding out from a support thread.&lt;/p&gt;

&lt;p&gt;Inside the &lt;a href="https://www.tigerdata.com/docs/deploy/tiger-cloud/tiger-cloud-aws/monitoring#metrics" rel="noopener noreferrer"&gt;&lt;em&gt;&lt;u&gt;Metrics&lt;/u&gt;&lt;/em&gt;&lt;/a&gt; tab in Tiger Console, a new Queries per Second graph gives a real-time view of throughput, making it easier to spot spikes or drops in query volume.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fob69rtvlctg8rom5g7ox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fob69rtvlctg8rom5g7ox.png" alt="Inside the Metrics tab in Tiger Console, a new Queries per Second graph gives a real-time view of throughput" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;a href="https://www.tigerdata.com/docs/deploy/tiger-cloud/tiger-cloud-aws/monitoring#insights" rel="noopener noreferrer"&gt;&lt;em&gt;&lt;u&gt;Insights&lt;/u&gt;&lt;/em&gt;&lt;/a&gt; tab, the query deep dive page now tracks CPU, memory, and storage IO (read and write) over time, so you can catch a query's resource footprint trending the wrong way and see its downstream impact on system health before it turns into a bigger problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F71yn98pm1y6vmxpom68n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F71yn98pm1y6vmxpom68n.png" alt="In the Insights tab, the query deep dive page now tracks CPU, memory, and storage IO (read and write) over time" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Additionally, you can check the Chunk timeline in the &lt;a href="https://www.tigerdata.com/docs/deploy/tiger-cloud/tiger-cloud-aws/service-management/service-explorer" rel="noopener noreferrer"&gt;&lt;em&gt;&lt;u&gt;Explorer&lt;/u&gt;&lt;/em&gt;&lt;/a&gt; tab to see how your data is organized across chunks. You can inspect sizes, time ranges, and whether each chunk is in the &lt;a href="https://www.tigerdata.com/docs/learn/columnar-storage/understand-hypercore" rel="noopener noreferrer"&gt;&lt;u&gt;rowstore or columnstore&lt;/u&gt;&lt;/a&gt;. This lets you spot organization issues and monitor columnstore job health without running system queries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbqhu3ucab8dh1m0z75l0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbqhu3ucab8dh1m0z75l0.png" alt="check the Chunk timeline in the Explorer tab to see how your data is organized across chunks" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, if you already monitor infrastructure elsewhere, Tiger Cloud now exports telemetry to &lt;a href="https://www.tigerdata.com/docs/integrate/observability-alerting/azure-monitor" rel="noopener noreferrer"&gt;&lt;u&gt;Azure Monitor&lt;/u&gt;&lt;/a&gt;, plus PostgreSQL-specific metrics (replication, cache usage, background activity) to Amazon CloudWatch, Datadog, and Prometheus, with system-level disk IO and throughput metrics exported by default. Wherever you already look for problems, Tiger Cloud's data is there too. For a &lt;a href="https://www.tigerdata.com/docs/integrate/observability-alerting/exported-metrics" rel="noopener noreferrer"&gt;&lt;u&gt;full list of available metrics you can export with Tiger Cloud exporters, click here&lt;/u&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Tiger Cloud for free
&lt;/h2&gt;

&lt;p&gt;All of these features are live on Tiger Cloud. If you're already a customer, &lt;a href="https://console.cloud.timescale.com/login" rel="noopener noreferrer"&gt;&lt;u&gt;sign in&lt;/u&gt;&lt;/a&gt; and check out the latest TimescaleDB releases on your compressed hypertables and the new IOPS options if you're storage-bound.&lt;/p&gt;

&lt;p&gt;If you're new to Tiger Cloud, &lt;a href="https://console.cloud.timescale.com/signup" rel="noopener noreferrer"&gt;&lt;u&gt;start a free trial&lt;/u&gt;&lt;/a&gt; and see what a Postgres-native operational analytics database looks like.&lt;/p&gt;

</description>
      <category>tigercloud</category>
      <category>tigerdata</category>
      <category>platforms</category>
    </item>
  </channel>
</rss>
