Todos os produtos
Search
Central de documentação

PolarDB:Interval range partitioning

Última atualização: Jun 28, 2026

O particionamento por intervalo de faixa estende o particionamento por faixa e cria novas partições automaticamente à medida que os dados chegam. Se os dados inseridos ultrapassarem o valor máximo da última partição de faixa definida, o banco de dados criará uma nova partição sem intervenção manual.

Para usar o particionamento por intervalo de faixa, inclua a cláusula INTERVAL na instrução CREATE TABLE e especifique o tamanho da partição. O valor da chave de partição determina o limite superior de cada partição de faixa, que atua como ponto de transição: dados acima desse limite acionam a criação automática de partições.

Como funciona o salto: Se os dados caírem dois ou mais intervalos além do ponto de transição atual, o banco de dados cria apenas a partição que contém esses dados e ignora as intermediárias.

Exemplo: Suponha um intervalo mensal com ponto de transição em 15 de fevereiro de 2019. Ao inserir uma linha datada de 10 de maio de 2019, o sistema cria a partição referente ao período de 15 de abril a 15 de maio de 2019. As partições de 15 de fevereiro a 15 de março e de 15 de março a 15 de abril são ignoradas; somente a partição que realmente contém os dados é criada.

Sintaxe

CREATE TABLE [schema.]<table_name>
   <table_definition>
   PARTITION BY RANGE (<column> [, <column>]...)
   [INTERVAL (<constant> | <expression>)]
   [SUBPARTITION BY {RANGE | LIST | HASH} (<column> [, <column>]...)]
   (<range_partition_definition> [, <range_partition_definition>]...);

Em que range_partition_definition é:

PARTITION [<partition_name>]
  VALUES LESS THAN (<value> [, <value>]...)
  [TABLESPACE <tablespace_name>]
  [(<subpartition>, ...)]

O parâmetro INTERVAL aceita expressões numéricas e de tempo:

Tipo

Expressão

Efeito

Numérico

INTERVAL (10)

Uma partição a cada 10 valores consecutivos

Ano

INTERVAL (NUMTOYMINTERVAL(1, 'year'))

Uma partição por ano

Mês

INTERVAL (NUMTOYMINTERVAL(1, 'month'))

Uma partição por mês

Dia

INTERVAL (NUMTODSINTERVAL(1, 'day'))

Uma partição por dia

Semana

INTERVAL (NUMTODSINTERVAL(7, 'day'))

Uma partição por semana

Para ver a sintaxe completa de CREATE TABLE ... PARTITION BY, consulte CREATE TABLE... PARTITION BY.

Exemplo

O exemplo abaixo cria uma tabela sales particionada por sold_month com intervalo mensal. Duas partições de faixa iniciais estabelecem o ponto de transição; linhas além desse ponto acionam a criação automática de partições.

Crie a tabela:

CREATE TABLE sales
(
  prod_id           int,
  prod_quantity     int,
  sold_month        date
)
PARTITION BY RANGE(sold_month)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
  PARTITION p1
    VALUES LESS THAN('15-JAN-2019'),
  PARTITION p2
    VALUES LESS THAN('15-FEB-2019')
);
CREATE TABLE sales
(
  prod_id           int,
  prod_quantity     int,
  sold_month        date
)
PARTITION BY RANGE(sold_month) SUBPARTITION BY HASH(prod_id)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
SUBPARTITION TEMPLATE  4
(
  PARTITION p1
    VALUES LESS THAN('15-JAN-2019'),
  PARTITION p2
    VALUES LESS THAN('15-FEB-2019')
);

Selecione as partições iniciais:

SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |      high_value
----------------+--------------------------------------------------------------
 P1             | FOR VALUES FROM ('15-JAN-19 00:00:00') TO ('15-FEB-19 00:00:00')
 P2             | FOR VALUES FROM (MINVALUE) TO ('15-JAN-19 00:00:00')
(2 rows)

Insira uma linha além do ponto de transição:

INSERT INTO sales VALUES (1, 200, '10-MAY-2019');
INSERT 0 1

Selecione as partições novamente:

SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |      high_value
----------------+--------------------------------------------------------------
 SYS596430103   | FOR VALUES FROM ('15-APR-19 00:00:00') TO ('15-MAY-19 00:00:00')
 P1             | FOR VALUES FROM ('15-JAN-19 00:00:00') TO ('15-FEB-19 00:00:00')
 P2             | FOR VALUES FROM (MINVALUE) TO ('15-JAN-19 00:00:00')
(3 rows)

O banco de dados criou automaticamente uma nova partição para armazenar a linha de 10 de maio de 2019. Como nenhum dado caiu nas faixas de 15 de fevereiro a 15 de março e de 15 de março a 15 de abril, essas partições foram ignoradas.

O sistema atribui um nome com prefixo SYS (como SYS596430103) a cada partição criada automaticamente. Esse nome é único, mas varia conforme a sessão.

Restrições do particionamento por intervalo de faixa

  • A chave de partição deve ser uma única coluna que especifique uma faixa numérica ou de data.

  • Defina pelo menos uma partição de faixa antes que a cláusula INTERVAL entre em vigor.

  • Tabelas organizadas por índice não suportam a cláusula INTERVAL.

  • Não crie índices de domínio em tabelas particionadas por lista.

  • A coluna da chave de partição não pode conter valores NULL, NaN (Not-a-Number) ou Infinito.

  • As expressões na cláusula INTERVAL devem resultar em valores constantes não negativos.

  • A criação de partições de intervalo de faixa ocorre exclusivamente em ordem crescente.