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 拡張機能を追加する
コンソールを使用して拡張機能をインストールする
RDS インスタンスリスト にアクセスし、上部でリージョンを選択して、ターゲットインスタンス ID をクリックします。
左側のナビゲーションバーで、[拡張機能の管理] をクリックします。
[拡張機能マーケットプレイス] ページで、下にスクロールして timescaledb 拡張機能を見つけ、[インストール] をクリックします。
ポップアップウィンドウで、ターゲットデータベースと特権アカウントを選択し、[インストール] をクリックして、ターゲットデータベースに拡張機能をインストールします。
インスタンスの状態が [インスタンスのメンテナンス中] から [実行中] に変わると、拡張機能が正常にインストールされたことを示します。
SQL 文を実行して拡張機能をインストールする
インスタンスパラメータを設定する、shared_preload_libraries の [実行中のパラメータ値] に timescaledb を追加します。たとえば、[実行中のパラメータ値] を
'pg_stat_statements,auto_explain,timescaledb'
に変更します。ターゲットデータベースに接続する、次の SQL を実行して拡張機能をインストールします。
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
説明SELECT * FROM pg_extension;
を実行して、インストールされている拡張機能を表示します。
ステップ 2:時系列テーブルを作成する
ターゲットデータベースに接続する、conditions という名前の標準テーブルを作成します。例:
CREATE TABLE conditions ( time TIMESTAMPTZ NOT NULL, location TEXT NOT NULL, temperature DOUBLE PRECISION NULL, humidity DOUBLE PRECISION NULL );
時系列テーブルを作成します。例:
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 ドキュメント」をご参照ください。