O TimescaleDB estende o ApsaraDB RDS for PostgreSQL com sharding automático, gravações eficientes, recuperação e agregação de dados de séries temporais quase em tempo real. Isso o torna ideal para telemetria de IoT, métricas de aplicações e dados de ticks financeiros.
O ApsaraDB RDS for PostgreSQL oferece suporte apenas à extensão TimescaleDB open source (licenciada pela Apache). Alguns recursos avançados estão restritos à licença comercial da Timescale e não estão disponíveis. Para mais detalhes, consulte TimescaleDB.
Pré-requisitos
Antes de começar, verifique se você possui:
Uma instância RDS executando o PostgreSQL 10 ou posterior
Uma versão secundária do mecanismo 20230330 ou posterior (o PostgreSQL 17 requer a 20241030 ou posterior)
Para verificar e atualizar a versão secundária do mecanismo, consulte Atualize a versão secundária do mecanismo de uma instância ApsaraDB RDS for PostgreSQL.
A partir de 17 de abril de 2023, algumas extensões não podem mais ser criadas em instâncias que executam versões secundárias do mecanismo anteriores a 20230330. Para mais detalhes, consulte [[Aviso] A partir de 17 de abril de 2023, algumas extensões não podem mais ser criadas em instâncias do ApsaraDB RDS for PostgreSQL que executam versões secundárias do mecanismo anteriores](https://www.alibabacloud.com/help/en/doc-detail/2253699.html).
PostgreSQL 14 com TimescaleDB 2.5.0 ou anterior: Se a versão secundária do mecanismo for anterior a 20230330, execute
ALTER EXTENSION timescaledb UPDATE;após atualizar para 20230330 ou posterior.PostgreSQL 10, 11, 12, 13 e 15: As instalações existentes do TimescaleDB não são afetadas pelo requisito de versão secundária do mecanismo.
Primeira instalação ou reinstalação: Atualize a versão secundária do mecanismo para 20230330 ou posterior antes de continuar.
Se o TimescaleDB já estava instalado antes de uma atualização da versão secundária do mecanismo, o seguinte erro poderá aparecer posteriormente. Execute a seguinte instrução para resolvê-lo:
ERROR: could not access file "$libdir/timescaledb-1.3.0": No such file or directory
ALTER EXTENSION timescaledb UPDATE;
Etapa 1: Instale a extensão
Instale pelo console
Acesse a página Instances. Selecione a região na barra de navegação superior e clique no ID da sua instância.
No painel de navegação à esquerda, clique em Plug-ins.
-
Na aba Extension Marketplace, localize a seção timescaledb e clique em Install.

Na caixa de diálogo, selecione um banco de dados e uma conta privilegiada e, em seguida, clique em Install.
A extensão estará pronta quando o status da instância mudar de Maintaining Instance para Running.
Instale via SQL
Adicione
timescaledbao parâmetroshared_preload_libraries. Por exemplo, defina o Running Value como'pg_stat_statements,auto_explain,timescaledb'. Para mais detalhes, consulte Modifique os parâmetros de uma instância ApsaraDB RDS for PostgreSQL.-
Connect to the target database e execute:
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
Verifique a instalação, execute SELECT * FROM pg_extension; e confirme se o timescaledb aparece nos resultados.
Etapa 2: Crie uma hypertable
A hypertable é a estrutura de dados principal do TimescaleDB para dados de séries temporais. O TimescaleDB a particiona automaticamente por tempo e, opcionalmente, por uma dimensão adicional, mantendo o desempenho das consultas estável à medida que os dados crescem.
-
Connect to the database e crie uma tabela padrão:
CREATE TABLE conditions ( time TIMESTAMPTZ NOT NULL, location TEXT NOT NULL, temperature DOUBLE PRECISION NULL, humidity DOUBLE PRECISION NULL ); -
Converta a tabela em uma hypertable, particionada pela coluna
time:SELECT create_hypertable('conditions', 'time');
Para mais opções de configuração, consulte Crie hypertables .
Etapa 3: Inserir dados
Use instruções INSERT padrão. O TimescaleDB roteia cada linha para o chunk correto automaticamente.
Linha única:
INSERT INTO conditions(time, location, temperature, humidity)
VALUES (NOW(), 'office', 70.0, 50.0);
Várias linhas (recomendado para maior throughput):
INSERT INTO conditions
VALUES
(NOW(), 'office', 70.0, 50.0),
(NOW(), 'basement', 66.5, 60.0),
(NOW(), 'garage', 77.0, 65.2);
O envio em lote de linhas em um único INSERT é mais eficiente porque o TimescaleDB as agrupa por chunk e grava cada chunk em uma única transação.
Etapa 4: Consultar dados
O TimescaleDB adiciona funções SQL específicas para tempo às consultas padrão do PostgreSQL. Os exemplos a seguir usam a tabela conditions criada na Etapa 2.
Agrupar dados em intervalos de tempo
A função time_bucket() arredonda os timestamps para um intervalo fixo, facilitando o cálculo de agregações por período.
-- Aggregate data into 15-minute buckets over the last 3 hours.
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;
Exemplo de resultado:
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
Calcular uma média móvel
Use uma função de janela SQL padrão para suavizar dados de sensores com ruído:
-- 10-reading moving average for garage temperature over the last day.
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;
Exemplo de resultado:
time | smooth_temp
------------------------------+-------------
2024-12-20 16:11:14.691822+08 | 77
Calcular a mediana
Use a função percentile_cont padrão do PostgreSQL para encontrar a mediana ou qualquer outro percentil:
-- Median temperature across all records.
SELECT percentile_cont(0.5)
WITHIN GROUP (ORDER BY temperature)
FROM conditions;
Exemplo de resultado:
percentile_cont
-----------------
70
Solução de problemas
Erro de licença
Erro:
ERROR: functionality not supported under the current license "ApacheOnly", license
HINT: Upgrade to a Timescale-licensed binary to access this free community feature
O ApsaraDB RDS for PostgreSQL é fornecido com a compilação open source (licenciada pela Apache) do TimescaleDB. Alguns recursos estão restritos à licença comercial da Timescale, que proíbe o uso em ofertas de banco de dados como serviço (database-as-a-service) ou software como serviço (software-as-a-service). Para mais detalhes, consulte a Seção 2,2 do TimescaleDB License Agreement.
Erro de criação simultânea de índice
Erro:
hypertables do not support concurrent index creation.
O TimescaleDB não oferece suporte a CREATE INDEX CONCURRENTLY em hypertables. Use a seguinte alternativa, que reduz o tempo de retenção de bloqueios criando o índice um chunk por vez:
CREATE INDEX ON conditions (location, time)
WITH (timescaledb.transaction_per_chunk);
Para mais detalhes, consulte a documentação do Timescale.