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 拡張機能を追加する
コンソールでの拡張機能のインストール
[インスタンス] ページに移動します。上部のナビゲーションバーでリージョンを選択します。次に、ターゲットインスタンスの 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 featureA: 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 ドキュメント」をご参照ください。