CodeGym /Cours /SQL SELF /Travailler avec les tables temporaires dans PostgreSQL

Travailler avec les tables temporaires dans PostgreSQL

SQL SELF
Niveau 18 , Leçon 3
Disponible

Les tables temporaires, c’est des tables qui existent seulement pendant ta session ou ta transaction actuelle. Dès que ta session se termine (ou que la transaction est close), la table temporaire et ses données disparaissent comme des traces sur le sable. C’est parfait pour stocker des données temporairement, faire des calculs intermédiaires ou préparer des données pour des opérations un peu velues.

Pourquoi on en a besoin ?

  • Stockage temporaire de données : Par exemple, t’as des calculs compliqués à faire en plusieurs étapes. Au lieu de surcharger ta table principale, tu peux utiliser des tables temporaires.
  • Analyse de données : Tu peux rassembler des données de plusieurs sources, les traiter, puis supprimer la table temporaire après l’analyse.
  • Optimisation de requêtes complexes : Parfois, c’est plus rapide de découper une requête en plusieurs étapes avec des tables temporaires.
  • Minimiser les risques : Aucun risque de flinguer tes vraies tables par accident — les tables temporaires sont totalement isolées.

La magie des tables temporaires, c’est que leurs données sont visibles que par toi ! Les autres utilisateurs de la base ne peuvent pas y jeter un œil, donc c’est safe pour faire des tests et des expériences.

Créer des tables temporaires

Créer une table temporaire, c’est comme créer une table normale, sauf qu’on ajoute le mot-clé TEMP ou TEMPORARY.

Syntaxe :

CREATE TEMP TABLE table_name (
    column_name data_type constraints,
    ...
);

Facile, non ? La table temporaire disparaîtra automatiquement à la fin de ta session.

Par exemple, on va créer une table temporaire pour stocker des infos sur les étudiants :

CREATE TEMP TABLE temp_students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INTEGER CHECK (age > 0)
);

Maintenant, on a une table temporaire temp_students dans laquelle tu peux insérer des données et bosser dessus comme une table normale. Juste n’oublie pas — elle disparaîtra dès que tu fermes la session.

Créer une table temporaire à partir d’une requête

Parfois, t’as pas envie de décrire la structure de la table temporaire à la main — surtout si tu veux juste sauvegarder le résultat d’une requête et bosser dessus. Dans ce cas, tu peux utiliser :

CREATE TEMP TABLE nom_de_table AS
SELECT ...;

Cette construction crée la table temporaire et la remplit direct avec les données du SELECT.

Imaginons que tu veux sauvegarder les étudiants qui ne sont inscrits à aucun cours :

CREATE TEMP TABLE temp_unregistered_students AS
    SELECT s.id, s.name
    FROM students s
    LEFT JOIN enrollments e ON s.id = e.student_id
    WHERE e.student_id IS NULL;

Maintenant, t’as une table temp_unregistered_students que tu peux utiliser ailleurs dans ton script — plus besoin de refaire la requête à chaque fois.

Pourquoi faire ça ?

  • Pas besoin de préciser les colonnes et types — PostgreSQL les devine à partir du résultat du SELECT.
  • Tu peux réutiliser les données temporaires plusieurs fois sans recalculer.
  • C’est super utile pour les rapports, les opérations ETL et l’analytics.

Tables temporaires dans les transactions

Tu peux créer des tables temporaires à l’intérieur d’une transaction. Dans ce cas, elles seront supprimées automatiquement quand la transaction se termine. C’est top si tu veux être sûr que les données temporaires ne restent pas dans la base. Je te parlerai des transactions plus en détail dans quelques niveaux — pour l’instant, profite de la vie sans te prendre la tête :P

Exemple :

BEGIN;

CREATE TEMP TABLE temp_transactions (
    transaction_id SERIAL PRIMARY KEY,
    amount NUMERIC(10, 2) NOT NULL,
    status VARCHAR(50)
);

INSERT INTO temp_transactions (amount, status)
VALUES (100.50, 'En attente');

-- On regarde les données
SELECT * FROM temp_transactions;

COMMIT;
-- Maintenant la table temp_transactions a disparu !

Si au lieu de COMMIT tu fais ROLLBACK, les données et la table seront aussi supprimées.

Utiliser les tables temporaires dans des cas réels

Exemple 1 : Fusion temporaire de données

Imaginons qu’on a deux tables : students et courses. On veut savoir quels étudiants ne sont pas encore inscrits à des cours. On peut d’abord rassembler les données dans une table temporaire, puis faire l’analyse.

CREATE TEMP TABLE temp_unregistered_students AS
	SELECT s.id, s.name
	FROM students s
	LEFT JOIN enrollments e ON s.id = e.student_id
	WHERE e.student_id IS NULL;

-- Maintenant on peut bosser avec la table temporaire temp_unregistered_students.
SELECT * FROM temp_unregistered_students;

Exemple 2 : Préparer des données pour un rapport

Parfois, il faut rassembler des données de plusieurs tables, les transformer et préparer un rapport. Les tables temporaires sont parfaites pour ça.

CREATE TEMP TABLE temp_sales AS
	SELECT p.product_id, p.name, SUM(s.quantity) AS total_quantity
	FROM products p
	JOIN sales s ON p.product_id = s.product_id
	GROUP BY p.product_id, p.name;

-- On a créé une table temporaire avec le résultat. Maintenant, on peut faire un rapport dessus :
SELECT name, total_quantity FROM temp_sales WHERE total_quantity > 50;

Astuces et particularités des tables temporaires

Nommer les tables temporaires : si t’as déjà une table normale qui s’appelle students, tu peux quand même créer une table temporaire avec le même nom ! La table temporaire sera prioritaire dans ta session. Mais fais gaffe, ça peut être trompeur si tu oublies que tu bosses sur une table temporaire.

Optimiser les tables temporaires : PostgreSQL crée automatiquement des index pour les colonnes avec PRIMARY KEY ou UNIQUE même dans les tables temporaires. Si tu veux accélérer les requêtes, tu peux ajouter des index à la main :

CREATE INDEX idx_temp_students_age ON temp_students (age);

Supprimer une table temporaire : si tu veux supprimer une table temporaire avant la fin de ta session, utilise la commande DROP TABLE :

DROP TABLE temp_students;

Volume de données dans une table temporaire : les tables temporaires sont stockées en mémoire (si t’as assez de ressources), donc c’est super rapide. Mais attention, si t’as trop de données, ça peut finir sur le disque.

Erreurs fréquentes et comment les éviter

Erreur 1 : "La table existe déjà"

Si tu essaies de créer une table temporaire avec un nom déjà pris par une autre table temporaire, tu vas avoir une erreur. Utilise CREATE TEMP TABLE IF NOT EXISTS ou supprime la table avant de la créer :

DROP TABLE IF EXISTS temp_students;
CREATE TEMP TABLE temp_students (...);

Erreur 2 : "La table disparaît trop tôt"

Si tu crées une table temporaire dans une transaction, n’oublie pas qu’elle disparaîtra quand la transaction se termine. Planifie tes actions à l’avance !

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