このトピックでは、ApsaraDB RDS for PostgreSQLインスタンスでTimescaleDB拡張機能を使用する方法について説明します。 TimescaleDB拡張機能は、時系列データの自動シャーディング、効率的な書き込み、取得、およびほぼリアルタイムの集計をサポートします。
ApsaraDB RDS for PostgreSQLは、オープンソースのTimescaleDB拡張機能のみをサポートしており、ライセンスの問題により特定の高度な機能をサポートしない場合があります。 詳細については、「TimescaleDB」をご参照ください。
前提条件
RDSインスタンスはPostgreSQL 10以降を実行します。
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インスタンスのマイナーエンジンバージョンを更新すると、次のようなエラーメッセージが表示されることがあります。
エラー: ファイル "$libdir/timescaledb-1.3.0" にアクセスできませんでした: そのようなファイルやディレクトリがありません
この問題を解決するには、RDSインスタンスで次のSQLステートメントを実行して、TimescaleDB拡張機能を更新する必要があります。
alter extension timescaledb update;
TimescaleDB拡張機能の作成
pgAdminを使用してRDSインスタンスに接続します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスへの接続」をご参照ください。 次に、次のステートメントを実行して、TimescaleDB拡張機能を作成します。
タイムスケールb CASCADEを超えない場合は延長を作成します。
時系列テーブルの作成
conditionsという名前の標準テーブルを作成します。 例:
テーブル条件の作成 ( time TIMESTAMPTZ NOT NULL, location TEXT NOT NULL, temperature DOUBLE PRECISION NULL, 湿度ダブル精度NULL );
時系列テーブルを作成します。 例:
SELECT create_hypertable('conditions', 'time');
詳細については、「ハイパーテーブルの作成」をご参照ください。
時系列テーブルにデータを挿入する
標準SQL文を実行して、データをハイパーテーブルに挿入できます。 例:
INSERTに条件 (時間、場所、温度、湿度)
値 (NOW() 、'office' 、70.0、50.0);
一度に複数行のデータをハイパーテーブルに挿入することもできます。 例:
INSERT INTO条件
VALUES
(NOW(), 'office', 70.0, 50.0),
(NOW(), 'basement', 66.5, 60.0),
(NOW() 、'garage' 、77.0、65.2);
データの取得
高度な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() -間隔「3時間」
GROUP BY fifteen_min, location
注文BY fifteen_min DESC、max_temp DESC;
組み込み関数を使用して、データをクエリおよび分析することもできます。 例:
-中央値を照会します。
SELECT percentile_cont(0.5)
WITHIN GROUP (ORDER BY temperature)
から条件;
-- 移動平均を照会します。
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'
時間DESC;
によって順序よくある質問
TimescaleDB拡張機能を使用しているときに次のエラーが発生した場合はどうすればよいですか?
ERROR: 現在のライセンスではサポートされていない機能 "ApacheOnly" 、ライセンス
ヒント: この無料のコミュニティ機能
にアクセスするには、TimescaleライセンスのバイナリにアップグレードするTimescaleDBライセンス契約には、TSLライセンスソフトウェアを使用してdatabase-as-a-serviceサービスまたは任意の形式のSoftware-as-a-serviceを提供することが禁止されていることが記載されています。 詳細については、「TimescaleDBライセンス契約のセクション2.2」をご参照ください。