Particionamento de Tabelas no PostgreSQL
Gabarito: letra A. O comando CREATE TABLE TESTE_X PARTITION OF TESTE FOR VALUES IN ('SP', 'RJ'); cria uma partição filha da tabela TESTE para armazenar apenas as linhas cujo valor da chave de partição seja 'SP' ou 'RJ' — caracterizando o particionamento por Lista (List Partitioning). A sintaxe é nativa do PostgreSQL desde a versão 10.
O PostgreSQL implementa três tipos de particionamento: Range, List e Hash. No particionamento por Lista, cada partição é definida por uma lista explícita de valores. É exatamente o que FOR VALUES IN ('SP', 'RJ') faz.
Característica | Particionamento por Lista (List) | Particionamento por Range | View (Table View) | Índice Clusterizado | Cópia de Estrutura com Dados |
|---|
Sintaxe principal | FOR VALUES IN (lista)
| FOR VALUES FROM ... TO ...
| CREATE VIEW ... AS SELECT
| CLUSTER (PostgreSQL)
| CREATE TABLE ... AS SELECT ou LIKE
|
Tipo de objeto criado | Partição física (tabela filha) | Partição física (tabela filha) | Objeto virtual (somente leitura) | Índice físico | Tabela física independente |
Critério de seleção de dados | Valores explícitos em uma lista | Intervalo contínuo de valores | Resultado de uma consulta SQL | Reordenação física com base em índice | Cópia integral de dados no momento da criação |
Permite inserção/atualização | Sim (herda da tabela pai) | Sim (herda da tabela pai) | Não (apenas consulta) | Sim (a tabela subjacente) | Sim (tabela independente) |
Relação com a tabela TESTE | Partição filha vinculada | Partição filha vinculada | Nenhuma (objeto separado) | Nenhuma (opera na tabela) | Cópia independente (não vinculada) |
Alternativa A — ✅ Correta ⟵ GABARITO
O comando cria uma partição da tabela TESTE com base em valores específicos ('SP' e 'RJ'), ou seja, particionamento por Lista. A cláusula PARTITION OF vincula a nova tabela como uma partição da tabela particionada TESTE.
Alternativa B — ❌ Incorreta
O comando utiliza FOR VALUES IN, que é próprio do particionamento por Lista, e não por Range. O particionamento por Range usaria FOR VALUES FROM ... TO ....
Alternativa C — ❌ Incorreta
O comando cria uma tabela física (partição), não uma view. Views são criadas com CREATE VIEW ... AS SELECT ... e são objetos virtuais.
Alternativa D — ❌ Incorreta
O comando não tem relação com índices clusterizados; ele define uma partição filha. Índices clusterizados são um conceito à parte (no PostgreSQL, o termo equivalente é CLUSTER).
Alternativa E — ❌ Incorreta
A nova tabela TESTE_X não é somente leitura (ela pode ser inserida e consultada como qualquer partição) e sua estrutura não é copiada — ela herda a estrutura da tabela TESTE e é instanciada vazia, recebendo apenas os registros que se enquadram nos valores da partição.
Gabarito: letra A.