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

ApsaraDB RDS:TimescaleDB

最終更新日:Nov 09, 2025

ApsaraDB RDS for PostgreSQL インスタンスは TimescaleDB 拡張機能をサポートしており、時系列データに対して自動シャーディング、効率的な書き込み、データ取得、ほぼリアルタイムの集約などの機能を提供します。

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

前提条件

  • インスタンスのメジャーエンジンバージョンが PostgreSQL 10 以降であること。

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

    重要

    この拡張機能は、マイナーエンジンバージョン 20230330 より前にサポートされていました。しかし、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

データベースで次の SQL 文を実行して、拡張機能を更新できます。

alter extension timescaledb update;

ステップ 1:TimescaleDB 拡張機能を追加する

コンソールでの拡張機能のインストール

  1. [インスタンス] ページに移動します。上部のナビゲーションバーでリージョンを選択します。次に、ターゲットインスタンスの ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[拡張機能の管理] をクリックします。

  3. [拡張機能マーケットプレイス] ページで、下にスクロールして timescaledb 拡張機能を見つけ、[インストール] をクリックします。

    image

  4. 表示されたダイアログボックスで、ターゲットデータベースと特権アカウントを選択します。次に、[インストール] をクリックして、拡張機能をターゲットデータベースにインストールします。

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

SQL コマンドを実行して拡張機能をインストールする

  1. インスタンスパラメーターを設定します。shared_preload_libraries パラメーターの [実行中のパラメーター値] に timescaledb を追加します。たとえば、[実行中のパラメーター値]'pg_stat_statements,auto_explain,timescaledb' に変更します。

  2. ターゲットデータベースに接続し、次の SQL 文を実行して拡張機能をインストールします。

    CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
    説明

    SELECT * FROM pg_extension; を実行して、インストールされている拡張機能を表示できます。

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

  1. ターゲットデータベースに接続し、conditions という名前の標準テーブルを作成します。次のサンプルコードに例を示します。

    CREATE TABLE conditions (
      time        TIMESTAMPTZ       NOT NULL,
      location    TEXT              NOT NULL,
      temperature DOUBLE PRECISION  NULL,
      humidity    DOUBLE PRECISION  NULL
    );
  2. ハイパーテーブルを作成します。次のサンプルコードに例を示します。

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

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

ステップ 3: データの効率的な書き込み

  • 標準の SQL 文を使用して、ハイパーテーブルにデータを挿入できます。次のサンプルコードに例を示します。

    INSERT INTO conditions(time, location, temperature, humidity)
      VALUES (NOW(), 'office', 70.0, 50.0);
  • 一度に複数のデータ行をハイパーテーブルに挿入することもできます。次のサンプルコードに例を示します。

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

ステップ 4: データの取得

  • 高度な SQL クエリを使用してデータを取得できます。次のサンプルコードに例を示します。

    -- 過去 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: TimescaleDB の公式ライセンス契約では、Timescale License Agreement (TSL) に基づく機能を使用して [database-as-a-service] および [software-as-a-service] を提供することは禁止されています。詳細については、TimescaleDB の公式ライセンス契約のセクション 2.2 をご参照ください。

  • Q: 拡張機能の使用時に hypertables do not support concurrent index creation. エラーが発生した場合、どのようにトラブルシューティングすればよいですか?

    A: TimescaleDB は CREATE INDEX CONCURRENTLY メソッドを使用したインデックス作成をサポートしていません。CREATE INDEX ... WITH (timescaledb.transaction_per_chunk, ...) を使用してインデックスを作成できます。このメソッドは、ロックの保持時間を最小限に抑えます。詳細については、「Timescale ドキュメント」をご参照ください。