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

ApsaraDB RDS:TimescaleDB 拡張機能を使用する

最終更新日:Jun 25, 2025

RDS PostgreSQL インスタンス向けの TimescaleDB 拡張機能は、時系列データの自動シャーディング、効率的な書き込み、取得、およびほぼリアルタイムの集計をサポートします。

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

前提条件

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

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

    重要

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

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

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

    • 初めて拡張機能を作成する場合、またはこの拡張機能を再作成する場合は、RDS インスタンスのマイナーエンジンバージョンを 20230330 以降に更新する必要があります。

説明

一部の既存ユーザーは、すでに TimescaleDB 拡張機能を作成している場合があります。マイナーエンジンバージョンのアップグレード後にエラーが発生した場合:

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

問題を解決するには、RDS インスタンスで次の SQL 文を実行して、TimescaleDB 拡張機能を更新する必要があります。

alter extension timescaledb update;

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

コンソールを使用して拡張機能をインストールする

  1. RDS インスタンスリスト にアクセスし、上部でリージョンを選択して、ターゲットインスタンス 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 ライセンス契約では、[database-as-a-service] および [software-as-a-service] を提供するために 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, ...) を使用してインデックスを作成できます。これにより、ロック保持時間が最小限に抑えられます。詳細については、「Timescale ドキュメント」をご参照ください。