CodeGym /Cours /SQL SELF /Découverte de PL/pgSQL

Découverte de PL/pgSQL

SQL SELF
Niveau 49 , Leçon 0
Disponible

PostgreSQL ne "parle" pas que SQL ! Voici PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language), un langage de programmation procédural intégré à PostgreSQL. Il a été conçu pour simplifier l'exécution d'opérations complexes en utilisant des requêtes SQL et des structures de contrôle comme les conditions (IF, CASE) et les boucles (LOOP, FOR, WHILE).

PL/pgSQL et SQL, c'est un peu comme une chaîne de montage automatisée et un outil "manuel" classique comme un marteau. Comme le marteau, SQL est un outil fiable. Mais pour chaque coup, tu dois lever la main et le faire toi-même. PL/pgSQL, c'est la chaîne de montage : tu définis une fois ce qu'il faut faire et comment, et après ça roule tout seul — ça exécute les commandes, mémorise, vérifie si un truc cloche, et continue tranquille. Pourquoi planter chaque clou à la main si tu peux juste regarder la machine bosser ? Avoue, c'est le rêve !

Comparaison de PL/pgSQL avec les requêtes SQL classiques

Voyons un peu en quoi PL/pgSQL se distingue des requêtes SQL simples.

SQL marche super bien quand tu dois faire une tâche précise : genre sélectionner tous les étudiants d'une table ou ajouter une nouvelle ligne. Mais dès que tu dois gérer de la logique "si ceci alors cela" ou répéter les mêmes actions, SQL commence à galérer.

Par exemple, imagine que tu dois :

  1. Vérifier s'il existe déjà une entrée pour un étudiant dans la table.
  2. Si l'entrée existe — mettre à jour les données.
  3. Si l'entrée n'existe pas — ajouter une nouvelle ligne.

Avec du SQL classique, tu devrais écrire plusieurs requêtes et gérer le résultat côté client. Avec PL/pgSQL, tu peux tout faire dans une seule procédure qui s'exécute côté base de données.

PL/pgSQL est vraiment top dans les projets plus complexes. Il permet de :

  • stocker des résultats intermédiaires dans des variables ;
  • gérer les erreurs pour éviter que la base "crashe" à la moindre surprise ;
  • utiliser des boucles et des conditions pour exécuter des algos plus costauds.

Domaines d'utilisation de PL/pgSQL

PL/pgSQL est super utile dans les cas suivants :

  1. Automatisation des tâches. Par exemple, créer automatiquement des entrées dans le journal (log) à chaque mise à jour de données.

  2. Logique métier. T'as une règle : chaque étudiant qui a plus de 5 absences doit être marqué automatiquement comme "inactif". Pourquoi ne pas mettre cette règle dans une fonction PL/pgSQL ?

  3. Analytique et rapports. Au lieu de faire des allers-retours entre la base et l'appli cliente, tu peux tout agréger côté serveur.

  4. Triggers. PL/pgSQL sert à écrire des triggers qui exécutent automatiquement des actions lors d'une insertion, mise à jour ou suppression de données.

Exemple d'utilisation de PL/pgSQL

Voici un exemple de fonction qui prend deux nombres, les additionne et renvoie le résultat :

CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT AS $$
BEGIN
    RETURN a + b;
END;
$$ LANGUAGE plpgsql;

Explication :

  • CREATE FUNCTION add_numbers(a INT, b INT) — on crée une fonction qui s'appelle add_numbers et qui prend deux arguments de type INT (entier).
  • RETURNS INT — ça indique que la fonction renvoie un entier.
  • BEGIN ... END — c'est le bloc principal où la logique de la fonction s'exécute.
  • RETURN a + b; — le résultat de l'addition est renvoyé.

Pour appeler cette fonction, tu utilises une requête SQL classique :

SELECT add_numbers(10, 20);

Résultat : 30.

Pièges et limitations

PL/pgSQL est un outil puissant, mais faut faire gaffe :

  • Performance : des fonctions trop complexes peuvent ralentir la base. Teste et optimise toujours.
  • Tests : les bugs dans les fonctions peuvent passer inaperçus jusqu'à ce que tu les appelles. N'oublie pas les tests !
  • Lisibilité : les grosses fonctions et procédures avec une logique tordue peuvent être dures à relire. Essaie d'écrire du code que tu comprendras encore dans un mois.

Maintenant que tu sais un peu ce qu'est PL/pgSQL, on va continuer avec sa syntaxe et ses fonctionnalités de base. On va apprendre à créer des blocs de code, déclarer des variables et manipuler les types de données dans les prochaines leçons. Allez, on se lance dans la prog côté base de données !

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION