Module V1
Dalibo SCOP
24.12
18 décembre 2024
Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :
PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.
Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 13 à 17.
VACUUM
FULL
pg_dump
…ou la réinvention de la roue
Historique, ou pour un cas très spécifique
CREATE TABLE mammiferes (pattes int) INHERITS (animaux) ; CREATE TABLE primates (debout boolean) INHERITS (mammiferes) ;
Liste de valeurs par partition
Clé de partitionnement forcément mono-colonne
Syntaxe :
CREATE TABLE t1(c1 integer, c2 text) PARTITION BY LIST (c1) ; CREATE TABLE t1_a PARTITION OF t1 FOR VALUES IN (1, 2, 3); CREATE TABLE t1_b PARTITION OF t1 FOR VALUES IN (4, 5); …
MINVALUE
MAXVALUE
CREATE TABLE t2(c1 integer, c2 text) PARTITION BY RANGE (c1); CREATE TABLE t2_1 PARTITION OF t2 FOR VALUES FROM (1) TO (100); CREATE TABLE t2_2 PARTITION OF t2 FOR VALUES FROM (100) TO (MAXVALUE); …
Pour une répartition uniforme des données :
Hachage de valeurs par partition
Clé de partitionnement mono- ou multicolonnes
CREATE TABLE t3(c1 integer, c2 text) PARTITION BY HASH (c1); CREATE TABLE t3_a PARTITION OF t3 FOR VALUES WITH (modulus 3,remainder 0); CREATE TABLE t3_b PARTITION OF t3 FOR VALUES WITH (modulus 3,remainder 1); CREATE TABLE t3_c PARTITION OF t3 FOR VALUES WITH (modulus 3,remainder 2);
CREATE TABLE t1(c1 integer, c2 text, c3 date) PARTITION BY RANGE (c1, c3) ; CREATE TABLE t1_a PARTITION OF t1 FOR VALUES FROM (1,'2017-08-10') TO (100, '2017-08-11') ; …
S’il y a deux chemins d’accès privilégiés :
CREATE TABLE objets (id int, statut int, annee int, t text) PARTITION BY LIST (statut) ; CREATE TABLE objets_123 PARTITION OF objets FOR VALUES IN (1, 2, 3) PARTITION BY LIST (annee) ; CREATE TABLE objets_123_2023 PARTITION OF objets_123 FOR VALUES IN (2023) ; CREATE TABLE objets_123_2024 PARTITION OF objets_123 FOR VALUES IN (2024) ; CREATE TABLE objets_45 PARTITION OF objets FOR VALUES IN (4,5) ;
CREATE TABLE t2_autres PARTITION OF t2 DEFAULT ;
ALTER TABLE … ATTACH PARTITION … FOR VALUES … ;
CHECK
ALTER TABLE … DETACH PARTITION …
CONCURRENTLY
BEGIN ; ALTER TABLE … DETACH PARTITION … CONCURRENTLY ; ALTER TABLE … ATTACH PARTITION … FOR <nouveau critère> ; END ;
DROP TABLE nom_partition ;
\dP
pg_partition_tree ('logs')
pg_partition_root ('logs_2019')
pg_partition_ancestors ('logs_201901')
La clé primaire doit contenir toutes les colonnes de la clé de partitionnement.
enable_partitionwise_aggregate
enable_partitionwise_join
VACUUM FULL
ANALYZE
REINDEX
Sauvegarde physique : peu de différence
Avec pg_dump :
--jobs
--load-via-partition-root
--table-and-children
--exclude-table-and-children
--exclude-table-data-and-children
IDENTITY
Le partitionnement déclaratif a de gros avantages pour le DBA
https://dali.bo/v1_quiz