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

ApsaraDB RDS:TimescaleDB拡張の使用

最終更新日:Nov 12, 2024

このトピックでは、ApsaraDB RDS for PostgreSQLインスタンスでTimescaleDB拡張機能を使用する方法について説明します。 TimescaleDB拡張機能は、時系列データの自動シャーディング、効率的な書き込み、取得、およびほぼリアルタイムの集計をサポートします。

ApsaraDB RDS for PostgreSQLは、オープンソースのTimescaleDB拡張機能のみをサポートしており、ライセンスの問題により特定の高度な機能をサポートしない場合があります。 詳細については、「TimescaleDB」をご参照ください。

前提条件

  • RDSインスタンスはPostgreSQL 10以降を実行します。

    説明

    この拡張機能は、PostgreSQL 17を実行するApsaraDB RDS for PostgreSQLインスタンスではサポートされていません。

  • RDSインスタンスのマイナーエンジンバージョンが20230330以降です。 RDSインスタンスのマイナーエンジンバージョンを表示および更新する方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのマイナーエンジンバージョンの更新」をご参照ください。

    重要

    拡張機能は、20230330より前のマイナーエンジンバージョンでサポートされています。 ただし、ApsaraDB RDS for PostgreSQLインスタンスでサポートされている拡張機能は変更されています。 2023年4月17日以降、20230330より前のマイナーエンジンバージョンを実行するRDSインスタンスの一部の拡張機能を作成できなくなりました。 詳細については、「 [お知らせ] 」をご参照ください。2023年4月17日以降、以前のマイナーエンジンバージョンを実行するApsaraDB RDS For PostgreSQLインスタンスの拡張機能を作成できなくなりました

    • RDSインスタンスが20230330以前のマイナーエンジンバージョンでPostgreSQL 14を実行し、バージョン2.5.0以前のTimescaleDB拡張機能を使用している場合は、マイナーエンジンバージョンを20230330以降に更新した後、ALTER extension timescaledb UPDATE; ステートメントを実行して拡張機能を手動で更新する必要があります。 このようにして、拡張機能を期待どおりに実行できます。 RDSインスタンスのマイナーエンジンバージョンを更新しない場合、拡張機能は影響を受けません。

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

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

  • timescaledbは、shared_preload_librariesパラメーターの値に追加されます。

    ApsaraDB RDS for PostgreSQLのパラメーター変更機能を使用して、shared_preload_librariesパラメーターの値にtimescaledbを追加できます。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのパラメーターの変更」をご参照ください。

説明

TimescaleDB拡張機能が作成されている場合、RDSインスタンスのマイナーエンジンバージョンを更新すると、次のようなエラーメッセージが表示されることがあります。

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

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

alter extension timescaledb update;

TimescaleDB拡張機能の作成

pgAdminを使用してRDSインスタンスに接続します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスへの接続」をご参照ください。 次に、次のステートメントを実行して、TimescaleDB拡張機能を作成します。

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

時系列テーブルの作成

  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');
説明

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

時系列テーブルにデータを挿入する

標準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);

データの取得

高度なSQLクエリを実行してデータを取得できます。 例:

--Collect data from the most recent 3 hours at 15-minute intervals and sort the data by time and temperature. 
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;

組み込み関数を使用して、データをクエリおよび分析することもできます。 例:

-- Query the median.
SELECT percentile_cont(0.5)
  WITHIN GROUP (ORDER BY temperature)
  FROM conditions;

-- Query the moving average.
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;

よくある質問

TimescaleDB拡張機能を使用しているときに次のエラーが発生した場合はどうすればよいですか?

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

TimescaleDBのライセンス契約には、TLSライセンスソフトウェアを使用してdatabase-as-a-serviceサービスまたはSoftware-as-a-serviceを提供することが禁止されていることが記載されています。 詳細については、「TimescaleDBライセンス契約のセクション2.2」をご参照ください。