PostgreSQL pour les devs web : les bases qui comptent vraiment
Index, jointures, relations… Le SQL qu'un développeur web utilise tous les jours, sans le superflu.
La plupart des développeurs web traitent la base de données comme une boîte noire. On passe par un ORM, on évite d'écrire du SQL — en Go, on écrit souvent le SQL directement, ce qui force à comprendre les index et les jointures. Et on se retrouve souvent avec des requêtes qui font 500ms pour retourner 10 lignes.
PostgreSQL est puissant. Mais comme tout outil puissant, il faut comprendre quelques concepts clés pour ne pas s'en faire un ennemi.
Les index : la chose la plus utile que tu peux faire aujourd'hui
Sans index, chaque requête scanne toute la table. Avec un index sur la colonne filtrée, PostgreSQL va directement aux bonnes lignes.
-- Sans index : scan complet (lent sur 1M lignes)
SELECT * FROM articles WHERE slug = 'mon-article';
-- Créer l'index
CREATE INDEX idx_articles_slug ON articles(slug);
-- Maintenant c'est instantané, peu importe la taille de la tableLes jointures : pas si compliquées
Une jointure combine des données de plusieurs tables. Le cas le plus courant :
-- Articles avec le nom de leur catégorie
SELECT
a.title,
a.date,
c.name AS category
FROM articles a
JOIN categories c ON a.category_id = c.id
WHERE a.published = true
ORDER BY a.date DESC
LIMIT 10;Un ORM fait ça pour toi, mais comprendre ce qu'il génère te permet de l'optimiser quand ça devient lent. PostgreSQL tourne souvent dans un conteneur Docker — les volumes garantissent la persistance entre les restarts.
Les transactions : l'opération atomique
Si tu modifies plusieurs tables et qu'une opération échoue à mi-chemin, tu veux annuler tout ce qui a été fait. C'est le rôle des transactions :
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- Si une ligne échoue, ROLLBACK automatiqueLes transactions garantissent que ta base reste dans un état cohérent, même en cas d'erreur ou de crash. Utilise-les chaque fois que tu modifies plusieurs tables en même temps.