SQL avance et PostgreSQL - 15 - Glossaire

Tous les termes SQL et PostgreSQL : ACID, B-tree, CTE, deadlock, GIN, index, MVCC, trigger, WAL et plus.

15 - Glossaire

Tous les termes utilises dans cette serie, avec des définitions concises et des renvois vers les articles concernes.


A

ACID

Les 4 propriétés d'une transaction : Atomicite (tout ou rien), Coherence (état valide vers état valide), Isolation (transactions concurrentes independantes), Durabilite (les donnees commitees survivent a un crash). Voir l'article 06.

Advisory lock

Un verrou applicatif dans PostgreSQL, identifié par un numero, pas lie a une ligne ou une table spécifique. Sert a coordonner des processus (empecher deux crons de tourner en meme temps, par exemple). SELECT pg_advisory_lock(42). Voir l'article 06.

ANALYZE

Commande PostgreSQL qui met à jour les statistiques d'une table. Le planificateur de requêtes utilise ces statistiques pour estimer le nombre de lignes et choisir le meilleur plan d'exécution. Si EXPLAIN ANALYZE montre un ecart entre les lignes estimees et reelles, lance ANALYZE nom_table. Voir l'article 13.

Autovacuum

Processus automatique de PostgreSQL qui nettoie les lignes mortes (voir VACUUM) et met à jour les statistiques. Il tourne en continu en arriere-plan. Configurable par table avec autovacuum_vacuum_scale_factor. Voir l'article 13.

B

B-tree

Le type d'index par défaut dans PostgreSQL. Un arbre balance qui permet les recherches en O(log n). Bon pour les opérateurs =, <, >, BETWEEN, ORDER BY. Cree automatiquement sur les PRIMARY KEY et UNIQUE. Voir l'article 05.

BRIN (Block Range INdex)

Un type d'index tres compact qui stocke le min/max de chaque bloc de pages. Ideal pour les grosses tables dont les donnees sont inserees dans l'ordre chronologique (logs, time-series). Beaucoup plus petit qu'un B-tree mais moins precis. Voir l'article 05.

C

Cardinalite

Le nombre de valeurs distinctes dans une colonne. Une colonne status avec 3 valeurs possibles a une faible cardinalite. Une colonne email unique a une forte cardinalite. Les index B-tree sont plus efficaces sur les colonnes a forte cardinalite.

Connection pool

Un pool de connexions reutilisables entre l'application et PostgreSQL. Evite de créer/détruire une connexion a chaque requête. PgBouncer est le pooler le plus utilise. Voir l'article 13.

CTE (Common Table Expression)

Un bloc nomme dans une requête, déclaré avec WITH. Permet de décomposer des requêtes complexes en étapes lisibles. Peut etre recursive avec WITH RECURSIVE. Voir l'article 04.

Cursor

Un pointeur vers le résultat d'une requête qui permet de le parcourir ligne par ligne. Utile pour traiter de tres gros résultats sans tout charger en mémoire. Declare avec DECLARE cursor_name CURSOR FOR SELECT ....

D

Deadlock

Situation ou deux transactions s'attendent mutuellement, chacune tenant un verrou dont l'autre a besoin. PostgreSQL détecté les deadlocks et annule une des deux transactions. Se previent en verrouillant toujours les ressources dans le meme ordre. Voir l'article 06.

Denormalization

Le fait de dupliquer des donnees dans plusieurs tables pour éviter des JOINs coûteux. Par exemple, stocker le customer_name directement dans orders au lieu de faire un JOIN avec customers. Ameliore les lectures, complique les ecritures. A utiliser avec parcimonie.

E

EXPLAIN

Commande qui montre le plan d'exécution d'une requête sans l'exécuter. EXPLAIN ANALYZE exécuté la requête et montre les temps réels. Indispensable pour diagnostiquer les problèmes de performance. Voir les articles 05 et 13.

F

Foreign key (clé etrangere)

Une contrainte qui garantit que la valeur d'une colonne référencé une ligne existante dans une autre table. REFERENCES other_table(id). PostgreSQL refuse les INSERT/UPDATE qui violeraient la référencé, et peut CASCADE les DELETE.

La recherche en texte integral native de PostgreSQL. Utilise tsvector (le document indexé), tsquery (la requête de recherche), et les index GIN. Plus performant que LIKE '%mot%' et supporte le stemming, les stop words, le ranking.

G

Generated column

Une colonne dont la valeur est calculee automatiquement à partir d'autres colonnes. GENERATED ALWAYS AS (expression) STORED. Recalculee a chaque INSERT/UPDATE. Voir l'article 09.

GIN (Generalized Inverted Index)

Un type d'index pour les valeurs composites : JSONB, arrays, full-text search. Indexe chaque élément individuellement. Supporte les opérateurs @>, ?, ?|, ?& sur JSONB. Voir les articles 05 et 10.

GiST (Generalized Search Tree)

Un type d'index pour les types non lineaires : geometrie (PostGIS), ranges de dates, intervalles. Supporte les contraintes d'exclusion (EXCLUDE USING GIST). Voir l'article 05.

GRANT

Commande pour donner des permissions a un rôle. GRANT SELECT ON table TO role. Fonctionne au niveau schema, table, colonne, sequence. L'inverse est REVOKE. Voir l'article 14.

I

Index

Une structure de donnees qui accéléré les lectures au prix d'un coût supplementaire sur les ecritures. Plusieurs types dans PostgreSQL : B-tree, GIN, GiST, BRIN. Voir l'article 05.

Isolation level (niveau d'isolation)

Le degre de visibilité des modifications entre transactions concurrentes. PostgreSQL supporte READ COMMITTED (défaut), REPEATABLE READ et SERIALIZABLE. Voir l'article 06.

J

JOIN

Opération qui combine les lignes de deux ou plusieurs tables selon une condition. Types : INNER (intersection), LEFT (tout a gauche), RIGHT (tout a droite), FULL OUTER (tout), CROSS (produit cartesien). Voir l'article 02.

JSON / JSONB

Types PostgreSQL pour stocker du JSON. JSON stocke le texte brut, JSONB stocke en binaire (indexable, plus rapide). Toujours préférer JSONB. Voir l'article 10.

M

Materialized view (vue materialisee)

Une vue dont le résultat est stocke sur disque. Se rafraichit manuellement avec REFRESH MATERIALIZED VIEW. CONCURRENTLY permet le refresh sans bloquer les lectures. Voir l'article 09.

Migration

Un fichier SQL versionne qui modifie le schema de la base de donnees. Les outils de migration (Prisma Migrate, Drizzle Kit, golang-migrate) appliquent les fichiers dans l'ordre et tracent lesquels ont deja ete exécutés. Voir l'article 12.

MVCC (Multi-Version Concurrency Control)

Le mecanisme de concurrence de PostgreSQL. Chaque UPDATE créé une nouvelle version de la ligne au lieu de modifier l'ancienne en place. Les anciennes versions sont nettoyees par VACUUM. C'est ce qui permet a PostgreSQL de gerer les lectures et ecritures en parallèle sans verrous exclusifs.

N

N+1 (problème)

Un anti-pattern ou une requête de liste (1) est suivie de N requêtes de détail (une par élément). Total : N+1 requêtes au lieu d'une ou deux. Cause principale : lazy loading des ORM. Corrections : JOIN, eager loading (include), DataLoader. Voir l'article 11.

Normalization

Le processus de structurer les tables pour éviter la redondance de donnees. Première forme normale (1NF) : pas de valeurs repetees. Deuxieme (2NF) : chaque colonne non-clé depend de la clé entière. Troisieme (3NF) : pas de dépendance transitive. En pratique, la 3NF est le standard pour les bases transactionnelles.

P

Partial index (index partiel)

Un index qui ne couvre qu'un sous-ensemble des lignes, défini par une clause WHERE. CREATE INDEX idx ON table (col) WHERE condition. Plus petit et plus rapide qu'un index complet. Voir l'article 05.

PgBouncer

Un proxy de connexions leger pour PostgreSQL. Gere un pool de connexions et les réutilisé entre les clients. Le mode "transaction pooling" est le plus utilise en production. Voir l'article 13.

PL/pgSQL

Le langage procedural natif de PostgreSQL pour écrire des fonctions et des triggers. Syntaxe avec DECLARE, BEGIN/END, IF/ELSIF, FOR, LOOP, RAISE, EXCEPTION. Voir les articles 07 et 08.

Primary key (clé primaire)

Une contrainte qui identifié chaque ligne de facon unique. Combine UNIQUE et NOT NULL. Cree automatiquement un index B-tree. Généralement un SERIAL (auto-increment) ou un UUID.

R

RLS (Row Level Security)

Fonctionnalite PostgreSQL qui filtre automatiquement les lignes visibles en fonction du rôle connecte. Activee avec ALTER TABLE ENABLE ROW LEVEL SECURITY, configuree avec des policies (CREATE POLICY). Utilisee pour le multi-tenant. Voir l'article 14.

ROLLBACK

Commande qui annule toutes les modifications depuis le dernier BEGIN. La transaction est abandonnee, aucune modification n'est appliquee. Voir l'article 06.

S

Schema

Un namespace dans une base de donnees PostgreSQL. Par défaut, tout va dans le schema public. Les schemas permettent d'organiser les tables et de gerer les permissions par groupe de tables. Voir l'article 14.

Sequence

Un generateur de nombres auto-incrementes. Cree implicitement par SERIAL et BIGSERIAL. nextval('sequence_name') retourne la prochaine valeur. Les sequences ne sont pas annulees par un ROLLBACK (pour éviter les conflits de concurrence), donc il peut y avoir des trous dans les IDs.

Stored procedure

Un bloc de code PL/pgSQL appele avec CALL. Contrairement aux fonctions, les procedures ne retournent pas de valeur et peuvent gerer des transactions (COMMIT/ROLLBACK internes). Voir l'article 07.

T

Transaction

Un ensemble d'opérations SQL qui forment une unité atomique. Soit tout reussit (COMMIT), soit tout est annule (ROLLBACK). Delimitee par BEGIN/COMMIT. Voir l'article 06.

Trigger

Une fonction qui s'exécuté automatiquement sur INSERT, UPDATE ou DELETE. BEFORE pour modifier ou annuler, AFTER pour les effets de bord. Cas d'usage : timestamps, audit, validation. Voir l'article 08.

V

VACUUM

Commande qui nettoie les lignes mortes laissees par MVCC. VACUUM standard récupéré l'espace pour réutilisation. VACUUM FULL reecrit la table (plus lent, prend un lock exclusif). L'autovacuum le fait automatiquement. Voir l'article 13.

View (vue)

Une requête SQL nommee, stockee comme un objet de base de donnees. N'a pas de stockage propre, la requête est exécutée a chaque appel. Les vues simples sont modifiables. Voir l'article 09.

W

WAL (Write-Ahead Log)

Le journal de transactions de PostgreSQL. Toutes les modifications sont ecrites dans le WAL avant d'etre appliquees aux fichiers de donnees. C'est ce qui garantit la durabilité (le D d'ACID) : meme si le serveur crashe, les transactions commitees sont recuperables en rejouant le WAL. Le WAL est aussi la base de la replication.

Window function

Une fonction qui calcule un résultat sur un ensemble de lignes "autour" de la ligne courante, sans regrouper les lignes (contrairement a GROUP BY). Exemples : ROW_NUMBER(), RANK(), LAG(), LEAD(), SUM() OVER (PARTITION BY ...). Permet de faire des classements, des totaux cumulatifs, et des comparaisons avec les lignes précédentes/suivantes dans une meme requête.

sqlSELECT name, total,
  ROW_NUMBER() OVER (ORDER BY total DESC) AS rang,
  SUM(total) OVER (ORDER BY created_at) AS cumul
FROM orders;

C'est la fin de la serie. Si tu as suivi depuis l'introduction, tu as maintenant les bases pour écrire, optimiser et sécuriser du SQL en production avec PostgreSQL. Le reste, c'est de la pratique. Ouvre un psql, créé des tables, exécuté des requêtes, regarde les EXPLAIN ANALYZE. C'est comme ca qu'on apprend.


Article précédent : 14 - Sécurité

Sources

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.