0Pricing
SQL Academy · Aula

Particionamento por intervalo, lista e hash

Escolha a estratégia de particionamento adequada: intervalo para séries temporais, lista para locatários e hash para distribuição uniforme.

Particionamento por intervalo, lista e hash é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Particionamento por intervalo

Cada partição abrange um intervalo contínuo de valores. É mais comum em séries temporais:

CREATE TABLE events (
  id BIGSERIAL,
  ts TIMESTAMPTZ NOT NULL,
  data JSONB
) PARTITION BY RANGE (ts);

CREATE TABLE events_2024_q1 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE events_2024_q2 PARTITION OF events
  FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');

Os limites dos intervalos são semiabertos

FROM é inclusivo e TO é exclusivo. Os limites se alinham perfeitamente — sem sobreposições nem lacunas.

Particionamento por lista

Cada partição contém valores específicos:

CREATE TABLE customers (
  id BIGSERIAL,
  country TEXT NOT NULL,
  name TEXT
) PARTITION BY LIST (country);

CREATE TABLE customers_us PARTITION OF customers FOR VALUES IN ('US');
CREATE TABLE customers_eu PARTITION OF customers FOR VALUES IN ('DE','FR','IT','ES','NL');
CREATE TABLE customers_other PARTITION OF customers DEFAULT;

Partição DEFAULT

Captura as linhas que não correspondem a nenhuma outra partição. Sem uma partição desse tipo, os INSERTs de linhas sem correspondência falham.

Particionamento por hash

As linhas são distribuídas usando o hash da chave de particionamento. É adequado quando você deseja uma distribuição uniforme, mas não tem um intervalo ou uma lista natural:

CREATE TABLE sessions (
  id UUID,
  user_id BIGINT,
  data JSONB
) PARTITION BY HASH (user_id);

CREATE TABLE sessions_0 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE sessions_1 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE sessions_2 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE sessions_3 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 3);

Escolhendo uma estratégia

  • Intervalo — séries temporais e identificadores que crescem monotonamente
  • Lista — locatários, países e camadas de alta demanda
  • Hash — quando não há uma distribuição natural e você deseja apenas paralelismo

Subparticionamento

As partições também podem ser particionadas (em vários níveis):

CREATE TABLE events_2024 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')
  PARTITION BY HASH (user_id);
-- 2024 is a yearly range partition, internally hashed by user_id.

Índices em tabelas particionadas

Os índices da tabela pai são propagados automaticamente para todas as partições. As restrições UNIQUE precisam incluir a chave de particionamento:

CREATE INDEX events_user_idx ON events (user_id);
-- Creates one index per partition automatically.

ALTER TABLE events ADD CONSTRAINT events_uniq UNIQUE (id, ts);
-- ts must be in the constraint because it's the partition key.

Chaves primárias e partições

A PRIMARY KEY de uma tabela particionada precisa incluir a coluna de particionamento. Essa é uma restrição fundamental do particionamento declarativo.

Adicionando e removendo partições

Operações baratas:

CREATE TABLE events_2024_q3 PARTITION OF events
  FOR VALUES FROM ('2024-07-01') TO ('2024-10-01');

DROP TABLE events_2023_q1;
-- Instant; equivalent to deleting all old data.

Criação automática de partições

O PostgreSQL não cria automaticamente as partições futuras. Soluções comuns:

  • Extensão pg_partman — partições mensais gerenciadas
  • Trabalho agendado que executa CREATE para a próxima partição

Chaves estrangeiras

As chaves estrangeiras para uma tabela particionada precisam do PG 12+. As chaves estrangeiras de uma tabela particionada para uma tabela normal funcionam normalmente.

Resumo

Três estratégias de particionamento abrangem a maioria dos casos.

  • Intervalo para tempo e sequências
  • Lista para conjuntos discretos
  • Hash para distribuição uniforme
  • A PK precisa incluir a coluna de particionamento

Verificação rápida

Você deseja particionar uma tabela de sessões por user_id, com distribuição uniforme e sem uma ordenação natural. Qual estratégia deve usar?

Perguntas Frequentes

A aula “Particionamento por intervalo, lista e hash” é grátis?

Sim — o texto completo de “Particionamento por intervalo, lista e hash” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Particionamento por intervalo, lista e hash”?

Escolha a estratégia de particionamento adequada: intervalo para séries temporais, lista para locatários e hash para distribuição uniforme. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Particionamento por intervalo, lista e hash”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Por que particionar: poda e manutenção
  2. Particionamento por intervalo, lista e hash
  3. Desanexação e anexação de partições
  4. Consultas eficientes entre partições
← Voltar para SQL Academy