このトピックでは、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インスタンスのマイナーエンジンバージョンを更新すると、次のようなエラーメッセージが表示されることがあります。
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;
時系列テーブルの作成
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');
詳細については、「ハイパーテーブルの作成」をご参照ください。
時系列テーブルにデータを挿入する
標準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」をご参照ください。