すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:時系列データベース (TimescaleDB)

最終更新日:Jun 21, 2026

TimescaleDB 拡張機能は、自動パーティショニング、効率的な書き込みとクエリ、およびほぼリアルタイムの集計など、時系列データ向けの機能を ApsaraDB RDS for PostgreSQL インスタンスに追加します。

ApsaraDB RDS for PostgreSQL は、Apache ライセンスに基づくオープンソース版の TimescaleDB を提供しています。ライセンスの制限により、一部の高度な機能は利用できない場合があります。詳細については、「TimescaleDB」をご参照ください。

前提条件

  • インスタンスのメジャーバージョンは PostgreSQL 10 以降である必要があります。

  • インスタンスのマイナーエンジンバージョンは 20230330 以降である必要があります。PostgreSQL 17 のインスタンスでは、マイナーエンジンバージョンは 20241030 以降である必要があります。マイナーエンジンバージョンの確認とアップグレードについては、「マイナーエンジンバージョンの更新」をご参照ください。

    重要

    ApsaraDB RDS for PostgreSQL の拡張機能サポートポリシーは、2023 年 4 月 17 日に更新されました。これにより、この拡張機能はマイナーエンジンバージョン 20230330 以降でのみ作成できます。詳細については、「[通知] 2023 年 4 月 17 日以降、ApsaraDB RDS for PostgreSQL の以前のマイナーエンジンバージョンでは一部の拡張機能の作成が制限されます」をご参照ください。

    • インスタンスが PostgreSQL 14 を実行しており、20230330 より前のマイナーエンジンバージョンで TimescaleDB 拡張機能 (バージョン 2.5.0 以前) を使用していた場合、引き続き拡張機能を使用できます。ただし、マイナーエンジンバージョンを 20230330 以降にアップグレードした後は、引き続き使用するために ALTER EXTENSION timescaledb UPDATE; コマンドを実行する必要があります。

    • インスタンスが PostgreSQL 15、13、12、11、または 10 を実行しており、20230330 より前のマイナーエンジンバージョンで TimescaleDB 拡張機能を使用していた場合、使用には影響ありません。

    • この拡張機能を初めてインストールする場合、または再インストールする場合は、マイナーエンジンバージョンを 20230330 以降にアップグレードする必要があります。

説明

マイナーエンジンバージョンを更新する前に TimescaleDB 拡張機能を作成していた場合、更新後に次のエラーが発生する可能性があります。

ERROR:  could not access file "$libdir/timescaledb-1.3.0": No such file or directory

これを解決するには、該当するデータベースに接続し、次のコマンドを実行して拡張機能を更新します。

alter extension timescaledb update;

ステップ 1: TimescaleDB 拡張機能のインストール

コンソール

  1. [インスタンス] ページに移動し、上部メニューでリージョンを選択してから、対象のインスタンスの ID をクリックします。

  2. 左側のナビゲーションペインで、プラグイン をクリックします。

  3. プラグインの概要 ページで、timescaledb 拡張機能を探し、インストール をクリックします。

  4. ダイアログボックスで、対象のデータベースと特権アカウントを選択して、インストール をクリックします。

    インスタンスのステータスがメンテナンス中から実行中に変更されると、拡張機能がインストールされます。

SQL

  1. インスタンスパラメータを変更して、shared_preload_libraries パラメータの 適用中のパラメーター値timescaledb を追加します。 たとえば、適用中のパラメーター値'pg_stat_statements,auto_explain,timescaledb' に変更します。

  2. 対象のデータベースに接続 し、次のコマンドを実行して拡張機能をインストールします。

    CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
    説明

    インストールを確認するには、 SELECT * FROM pg_extension; を実行し、結果に timescaledb が表示されることを確認してください。

ステップ 2: ハイパーテーブルの作成

  1. 対象のデータベースに接続 し、標準の PostgreSQL テーブルを作成します。次の例では、 conditions という名前のテーブルを作成します。

    CREATE TABLE conditions (
      time        TIMESTAMPTZ       NOT NULL,
      location    TEXT              NOT NULL,
      temperature DOUBLE PRECISION  NULL,
      humidity    DOUBLE PRECISION  NULL
    );
  2. テーブルをハイパーテーブルに変換します。次の例では、 conditions テーブル内のデータを time 列でパーティション分割します。

    SELECT create_hypertable('conditions', 'time');
説明

コマンドの詳細な構文については、「ハイパーテーブルの作成」をご参照ください。

ステップ 3: データの効率的な挿入

  • 標準 SQL の INSERT ステートメントを使用して、ハイパーテーブルにデータを挿入します。次の例では、1 行を挿入します。

    INSERT INTO conditions(time, location, temperature, humidity)
      VALUES (NOW(), 'office', 70.0, 50.0);
  • 書き込みパフォーマンスを向上させるには、1 つのステートメントで複数の行を挿入します。次の例では、3 行を挿入します。

    INSERT INTO conditions
      VALUES
        (NOW(), 'office', 70.0, 50.0),
        (NOW(), 'basement', 66.5, 60.0),
        (NOW(), 'garage', 77.0, 65.2);

ステップ 4: データのクエリ

  • 標準 SQL クエリと TimescaleDB 専用の機能を使用して、データをクエリします。次の例では、過去 3 時間のデータを 15 分のバケットに集計します。

    -- 過去 3 時間のデータを 15 分のバケットに集計し、
    -- 時刻と温度で結果を並べ替えます。
    SELECT time_bucket('15 minutes', time) AS fifteen_min,
        location, COUNT(*),
        MAX(temperature) AS max_temp,
        MAX(humidity) AS max_hum
      FROM conditions
      WHERE time > NOW() - interval '3 hours'
      GROUP BY fifteen_min, location
      ORDER BY fifteen_min DESC, max_temp DESC;

    サンプル結果:

          fifteen_min       | location | count | max_temp | max_hum 
    ------------------------+----------+-------+----------+---------
     2024-12-20 16:00:00+08 | garage   |     1 |       77 |    65.2
     2024-12-20 16:00:00+08 | office   |     2 |       70 |      50
     2024-12-20 16:00:00+08 | basement |     1 |     66.5 |      60
    • 中央値クエリ

      -- 温度の中央値を計算します。
      SELECT percentile_cont(0.5)
        WITHIN GROUP (ORDER BY temperature)
        FROM conditions;

      サンプル結果:

       percentile_cont 
      -----------------
                    70
    • 移動平均

      -- 温度の移動平均を計算します。
      SELECT time, AVG(temperature) OVER(ORDER BY time
            ROWS BETWEEN 9 PRECEDING AND CURRENT ROW)
          AS smooth_temp
        FROM conditions
        WHERE location = 'garage' and time > NOW() - interval '1 day'
        ORDER BY time DESC;

      サンプル結果:

                   time              | smooth_temp 
      -------------------------------+-------------
       2024-12-20 16:11:14.691822+08 |          77

よくある質問

  • Q: 次のライセンスエラーを解決するにはどうすればよいですか。

    ERROR:  functionality not supported under the current license "ApacheOnly", license
    HINT:  Upgrade to a Timescale-licensed binary to access this free community feature

    A: ApsaraDB RDS for PostgreSQL は、Apache ライセンスに準拠した TimescaleDB のオープンソースビルドを使用しています。一部の TimescaleDB 機能は、Timescale ライセンス契約 (TSL) の下でのみ利用可能です。この契約では、データベースアズアサービスソフトウェアアズアサービスなどのサービスでの使用が禁止されています。詳細については、「TimescaleDB ライセンス契約のセクション 2.2」をご参照ください。

  • Q: hypertables do not support concurrent index creation. というエラーが表示された場合はどうすればよいですか。

    A: TimescaleDB は、ハイパーテーブルでの CREATE INDEX CONCURRENTLY の使用をサポートしていません。代わりに、CREATE INDEX ... WITH (timescaledb.transaction_per_chunk, ...) を使用してください。この方法では、一度に 1 つのチャンクずつインデックスを作成することで、ロック保持時間を短縮します。詳細については、「Timescale ドキュメント」をご参照ください。