Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Use the TimescaleDB extension

Última atualização: Sep 24, 2026

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.

Importante

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

  1. Acesse a página Instances. Selecione a região na barra de navegação superior e clique no ID da sua instância.

  2. No painel de navegação à esquerda, clique em Plug-ins.

  3. Na aba Extension Marketplace, localize a seção timescaledb e clique em Install.

    image

  4. 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

  1. Adicione timescaledb ao parâmetro shared_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.

  2. 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.

  1. 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
    );
  2. 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.

Próximos passos