Descubra como otimizar seu banco de dados com particionamento no PostgreSQL
O particionamento é um dos recursos mais desejados do PostgreSQL, amplamente adotado pelos desenvolvedores. Isso não é verdade apenas para o PostgreSQL 15, mas também para versões mais antigas que não ofereciam tantos recursos quanto a versão mais recente do banco de dados. É por isso que você deve saber não apenas como particionar tabelas corretamente, mas também como descobrir a qual partição um dado pertence.
O particionamento no PostgreSQL é uma técnica que permite dividir uma tabela grande em várias partes menores, conhecidas como partições, de forma transparente para o usuário. Cada partição é armazenada em um arquivo separado, o que pode melhorar o desempenho em consultas e operações de manutenção de dados.
Existem dois tipos de particionamento no PostgreSQL:
- Particionamento por intervalo: as partições são criadas com base em um intervalo de valores de uma coluna específica da tabela. Por exemplo, se a tabela for particionada por data, cada partição pode conter os dados de um determinado ano.
- Particionamento por lista: as partições são criadas com base em uma lista de valores de uma coluna específica da tabela. Por exemplo, se a tabela for particionada por região, cada partição pode conter os dados de uma região específica.
Para criar partições em uma tabela no PostgreSQL, é necessário seguir os seguintes passos:
- Criar a tabela pai: essa tabela deve conter a definição das colunas que serão particionadas, mas não deve ter dados.
- Criar as tabelas filhas: cada tabela filha representa uma partição da tabela pai e deve conter a mesma estrutura da tabela pai.
- Definir as regras de particionamento: isso é feito usando a cláusula “CREATE TABLE … PARTITION BY” e especificando o tipo de particionamento e a coluna que será usada como referência.
- Inserir dados nas partições: isso pode ser feito usando a cláusula “INSERT INTO … VALUES” ou “INSERT INTO … SELECT” para inserir dados em cada partição.
Portanto, há uma pequena questão que sempre surge: como descubro em qual partição acabei de inserir meus dados? Alguns pequenos “truques de velho consultor” podem ajudar a descobrir.
Para começar, primeiro você precisa criar uma atabela particionada:
CREATE
TABLE
t_turnover (
id serial,
country text,
t timestamptz,
task text,
turnover
numeric
) PARTITION
BY
LIST (country);
CREATE
TABLE
t_austria
PARTITION
OF
t_turnover
FOR
VALUES
IN
(
'Austria'
);
CREATE
TABLE
t_usa
PARTITION
OF
t_turnover
FOR
VALUES
IN
(
'USA'
);
CREATE
TABLE
t_ger_swiss
PARTITION
OF
t_turnover
FOR
VALUES
IN
(
'Germany'
,
'Switzerland'
);
Nesse caso, você criou uma tabela simples para armazenar o faturamento. Atualmente, 4 idiomas são suportados. No entanto, muitas vezes você desejará dizer ao PostgreSQL que todos os outros dados devem ir para uma partição padrão. Veja como criar essa partição padrão:
CREATE
TABLE
t_rest PARTITION
OF
t_turnover
DEFAULT
;
CREATE
TABLE
Esta tabela conterá todos os dados que não devem ir para nenhuma outra partição.
Insert em uma tabela particionada
Agora, vamos inserir nesta tabela e ver o que acontece:
sample=# \x
Expanded display
is
on
.
sample=#
INSERT
INTO
t_turnover (country, t, task, turnover)
VALUES
(
'Uganda'
, now(),
'Some task'
, 200)
RETURNING tableoid::regclass, *;
-[ RECORD 1 ]
---------------------------
tableoid | t_rest
id | 1
country | Uganda
t | 2022-11-01 09:35:38.991547+01
task |
Some
task
turnover | 200
Aplicamos um pequeno truque aqui: No caso de INSERT
, você pode usar RETURNING *
, que é uma maneira simples e comumente usada para ver o que você acabou de inserir. Porém, há mais: Existe uma coluna oculta chamada “tableoid”: Ela representa o ID do objeto da tabela que você acabou de inserir. Observe que este é o ID do objeto da partição – não da tabela pai.
Select de uma tabela particionada
Até agora, você viu que pode usar o tableoid para determinar a partição em INSERT. No entanto, você também pode fazer a mesma coisa ao consultar a tabela:
sample=#
SELECT
tableoid, tableoid::regclass, *
FROM
t_turnover
ORDER
BY
id;
tableoid | tableoid | id | country | t | task | turnover
----------+-----------+----+---------+-------------------------------+--------------------+----------
27616 | t_rest | 1 | Uganda | 2022-11-01 09:35:30.193676+01 |
Some
task | 200
27597 | t_austria | 3 | Austria | 2022-11-01 11:11:40.583728+01 | PostgreSQL support | 900
(3
rows
)
sample=#
SELECT
tableoid::regclass,
count
(*)
FROM
t_turnover
GROUP
BY
1
ORDER
BY
1;
tableoid |
count
-----------+-------
t_austria | 1
t_rest | 1
(2
rows
)
Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:
About author
Você pode gostar também
O ‘Elefante’ faz aniversário.
No dia 8 de julho de 2024, o PostgreSQL comemora informalmente 28 anos de vida. O evento que serviu de base para a escolha desta data foi que em 8
Guia Prático: Instalação e Configuração do pgAdmin4 via Docker
O pgAdmin4 é a plataforma de administração e desenvolvimento open source mais popular para PostgreSQL. Neste post, vamos instalar e configurar esta ferramenta via Docker. DOCKER Compartilhe este post: Share
Descubra as vantagens e como utilizar o banco de dados NoSQL MongoDB
Caros leitores, hoje vamos tratar de um assunto que anda muito na moda ultimamente. Os bancos de dados conhecidos como não relacionais, ou NoSQL. Longe das brigas com relação à