Vues, états de sortie et sauvegarde
Livrer un résultat exploitable, et protéger son travail.
Après cette fiche, vous saurez :
- créer une vue et s'en servir
- produire un état de sortie exploitable
- exporter un résultat en CSV
- sauvegarder et restaurer une base de données
1Les vues
Une vue est une requête à laquelle on donne un nom. Ensuite, on l'utilise comme si c'était une table.
CREATE VIEW v_emprunts_en_cours AS
SELECT e.num_emprunt,
lec.nom AS lecteur,
lec.telephone,
liv.titre AS livre,
e.date_emprunt,
e.date_prevue
FROM emprunts e
INNER JOIN lecteurs lec ON e.num_lecteur = lec.num_lecteur
INNER JOIN livres liv ON e.num_livre = liv.num_livre
WHERE e.date_retour IS NULL;Et maintenant, cette requête compliquée s'interroge comme une table :
SELECT * FROM v_emprunts_en_cours ORDER BY date_prevue;
À retenir
Une vue ne stocke rien. Elle ne contient aucune donnée.
Chaque fois que vous l'interrogez, PostgreSQL réexécute la requête d'origine. Les résultats sont donc toujours à jour.
C'est un raccourci, pas une copie.
| Une vue sert à… | Exemple |
|---|---|
| Éviter de réécrire une requête compliquée | les emprunts en cours, utilisés dix fois par jour |
| Simplifier le travail des utilisateurs | un collègue interroge la vue sans savoir joindre trois tables |
| Masquer des colonnes sensibles | une vue du personnel sans la colonne salaire |
-- Voir la liste des vues
SELECT table_name FROM information_schema.views
WHERE table_schema = 'public';
-- Modifier une vue existante
CREATE OR REPLACE VIEW v_emprunts_en_cours AS
SELECT ...;
-- Supprimer une vue
DROP VIEW v_emprunts_en_cours;À retenir
Convention : préfixez vos vues par v_.
Dans l'arborescence de pgAdmin, les vues sont rangées séparément, sous Views et non sous Tables. Mais dans les requêtes, rien ne les distingue d'une table — d'où l'intérêt du préfixe.
2Les états de sortie
Un état de sortie est un document destiné à être lu par un humain : une liste imprimée, un récapitulatif mensuel, un courrier de rappel.
Attention
PostgreSQL n'a pas de générateur d'états intégré.
Contrairement à Microsoft Access, il n'y a pas d'assistant « Rapport ». C'est normal : PostgreSQL est un moteur de base de données, pas une suite bureautique.
Un état de sortie se construit donc en trois temps :
- une requête SQL qui produit exactement les bonnes colonnes, bien nommées et bien triées ;
- un export, en CSV ou par copier-coller ;
- la mise en forme finale dans un tableur ou un traitement de texte.
La partie qu'on évalue, c'est la première. C'est elle qui demande du métier.
Une requête d'état bien écrite
Comparez. Voici une requête techniquement correcte, mais inutilisable telle quelle :
SELECT * FROM emprunts WHERE date_retour IS NULL AND date_prevue < CURRENT_DATE;
Et voici le même besoin, en état de sortie :
SELECT lec.nom AS "Nom", lec.prenom AS "Prénom", lec.telephone AS "Téléphone", liv.titre AS "Titre du livre", e.date_prevue AS "À rendre le", CURRENT_DATE - e.date_prevue AS "Jours de retard" FROM emprunts e INNER JOIN lecteurs lec ON e.num_lecteur = lec.num_lecteur INNER JOIN livres liv ON e.num_livre = liv.num_livre WHERE e.date_retour IS NULL AND e.date_prevue < CURRENT_DATE ORDER BY "Jours de retard" DESC;
Nom | Prénom | Téléphone | Titre du livre | À rendre le | Jours de retard --------+--------+---------------+-----------------+-------------+---------------- Benali | Karim | 0475 22 33 44 | Le Petit Prince | 2026-09-05 | 4
À retenir
Ce qui fait la différence :
- les colonnes sont choisies, pas toutes déversées ;
- les en-têtes sont en français lisible, grâce à
AS; - les numéros techniques ont disparu, remplacés par des noms et des titres ;
- le téléphone est là, parce qu'on va appeler les gens ;
- le tri met les cas les plus urgents en premier.
Le second document se donne à un employé de la bibliothèque. Le premier, non.
3Exporter en CSV
Deux méthodes, selon ce que vous voulez faire.
Depuis pgAdmin
- Exécuter la requête Dans le Query Tool.
- Cliquer sur l'icône de téléchargement En haut à droite du panneau de résultats. Elle ressemble à une flèche vers le bas.
- Choisir les options Séparateur, encodage, en-têtes de colonnes. Gardez UTF-8 et cochez les en-têtes.
- Ouvrir dans un tableur
Le fichier
.csvs'ouvre dans Excel ou LibreOffice Calc.
Attention
Le piège du CSV dans Excel en Belgique.
Un CSV utilise la virgule comme séparateur. Or Excel en configuration belge attend le point-virgule, et interprète la virgule comme séparateur décimal.
Résultat : tout se retrouve dans une seule colonne, ou les montants sont massacrés.
La solution : choisissez le point-virgule comme séparateur dans pgAdmin, ou utilisez « Données → À partir d'un fichier texte » dans Excel plutôt qu'un double-clic.
Depuis le serveur : la commande COPY
COPY (
SELECT lec.nom, lec.prenom, liv.titre, e.date_prevue
FROM emprunts e
INNER JOIN lecteurs lec ON e.num_lecteur = lec.num_lecteur
INNER JOIN livres liv ON e.num_livre = liv.num_livre
WHERE e.date_retour IS NULL
)
TO 'C:/exports/retards.csv'
WITH (FORMAT CSV, HEADER true, DELIMITER ';');Plus rapide, et automatisable. Mais attention : le fichier est écrit sur la machine du serveur, pas sur la vôtre. Sur votre poste de laboratoire c'est la même machine, donc cela fonctionne.
4Sauvegarder la base
Une base de données contient souvent des années de travail. Une sauvegarde n'est pas une option.
À retenir
Ce que contient une sauvegarde PostgreSQL : un fichier qui permet de tout reconstruire — les tables, les contraintes, les vues, les index et les données.
C'est bien plus qu'une copie des données : c'est la base entière, transportable sur une autre machine.
Sauvegarder depuis pgAdmin
- Clic droit sur la base
Sur
bibliotheque, puis Backup… - Choisir le fichier
Donnez un nom parlant, avec la date :
bibliotheque_2026-09-15.backup - Choisir le format
Custom pour une sauvegarde compacte à restaurer avec pgAdmin.
Plain pour un fichier
.sqllisible dans un éditeur de texte. - Lancer Cliquez sur Backup. Un message de confirmation apparaît en bas à droite.
- Copier le fichier ailleurs Clé USB, disque externe, espace en ligne. Une sauvegarde sur le même disque que la base ne sert à rien.
| Format | Fichier | Quand l'utiliser |
|---|---|---|
| Custom | .backup, compressé | Sauvegarde de routine. Restauration sélective possible. |
| Plain | .sql, du texte | Pour lire, modifier ou transférer vers un autre SGBD. |
Restaurer
- Créer une base vide Clic droit sur Databases → Create. Ne restaurez pas par-dessus une base existante.
- Clic droit sur la nouvelle base Puis Restore…
- Choisir le fichier de sauvegarde Et lancer.
En ligne de commande
C'est ce que pgAdmin appelle en coulisse. Utile pour automatiser.
-- Sauvegarder pg_dump -U postgres -d bibliotheque -F c -f bibliotheque_2026-09-15.backup -- Restaurer pg_restore -U postgres -d bibliotheque_copie bibliotheque_2026-09-15.backup -- Sauvegarder en SQL lisible pg_dump -U postgres -d bibliotheque -F p -f bibliotheque.sql
Attention
Une sauvegarde jamais testée n'est pas une sauvegarde.
Prenez l'habitude de vérifier : créez une base bibliotheque_test,
restaurez-y votre fichier, et regardez si tout est là.
Beaucoup d'organisations découvrent que leurs sauvegardes ne fonctionnent pas le jour où elles en ont besoin. C'est trop tard.
À retenir
La règle des trois copies, appliquée par les professionnels :
- 3 copies de vos données ;
- sur 2 supports différents ;
- dont 1 à un autre endroit physique.
Un incendie, un vol ou un dégât des eaux ne fait pas de tri entre le serveur et le disque de sauvegarde posé à côté.
→Exercices
- Créez la vue
v_emprunts_en_coursde la section 1. - Interrogez-la avec un
SELECT *. - Retrouvez-la dans pgAdmin. Où est-elle rangée ?
- Ajoutez un nouvel emprunt, puis réinterrogez la vue. Que constatez-vous ?
Solution
INSERT INTO emprunts (date_emprunt, date_prevue, num_lecteur, num_livre) VALUES (CURRENT_DATE, CURRENT_DATE + 21, 2, 4); SELECT * FROM v_emprunts_en_cours ORDER BY date_prevue;
3. Sous bibliotheque > Schemas > public > Views,
et non sous Tables. Pensez à rafraîchir.
4. Le nouvel emprunt apparaît immédiatement dans la vue, sans qu'on ait rien fait de spécial.
C'est la preuve qu'une vue ne stocke rien : elle rejoue sa requête à chaque appel. Si elle avait été une copie, il aurait fallu la rafraîchir.
Notez aussi : CURRENT_DATE + 21 ajoute 21 jours à la date du
jour. C'est exactement la règle des trois semaines de prêt de la bibliothèque.
La bibliothèque veut un courrier de rappel mensuel.
- Écrivez la requête qui liste les emprunts en retard, avec : nom, prénom, adresse, téléphone du lecteur, titre du livre, date prévue, et jours de retard.
- Nommez les colonnes en français lisible.
- Triez du plus gros retard au plus petit.
- Transformez-la en vue nommée
v_retards. - Exportez le résultat en CSV et ouvrez-le dans un tableur.
Solution
CREATE OR REPLACE VIEW v_retards AS SELECT lec.nom AS "Nom", lec.prenom AS "Prénom", lec.adresse AS "Adresse", lec.telephone AS "Téléphone", liv.titre AS "Titre du livre", e.date_prevue AS "À rendre le", CURRENT_DATE - e.date_prevue AS "Jours de retard" FROM emprunts e INNER JOIN lecteurs lec ON e.num_lecteur = lec.num_lecteur INNER JOIN livres liv ON e.num_livre = liv.num_livre WHERE e.date_retour IS NULL AND e.date_prevue < CURRENT_DATE; SELECT * FROM v_retards ORDER BY "Jours de retard" DESC;
Un détail à connaître : le ORDER BY est placé dans le
SELECT final, pas dans la vue.
C'est délibéré. Une vue triée impose son tri à tous ses utilisateurs, et le tri est recalculé même quand personne n'en a besoin. La bonne pratique est de laisser le tri à celui qui interroge.
Sur l'export CSV : pensez au séparateur point-virgule si vous ouvrez dans Excel en configuration belge. Et vérifiez que les accents des en-têtes sortent correctement — sinon, c'est un problème d'encodage : forcez l'UTF-8.
Ce qu'on évalue dans un état de sortie : pas la beauté du tableur, mais que la requête donne exactement ce dont l'utilisateur a besoin. Ici, l'adresse et le téléphone sont là parce qu'on va écrire et téléphoner. Les numéros techniques ont disparu parce que personne n'en a l'usage.
- Sauvegardez votre base au format Custom, avec la date dans le nom.
- Créez une base vide nommée
bibliotheque_test. - Restaurez-y votre sauvegarde.
- Vérifiez que les tables, les données et les vues sont bien là.
- Refaites une sauvegarde au format Plain, et ouvrez le
.sqldans un éditeur de texte. Que contient-il ?
Solution
4. La vérification
-- À exécuter sur bibliotheque_test SELECT COUNT(*) FROM auteurs; SELECT COUNT(*) FROM livres; SELECT COUNT(*) FROM emprunts; SELECT * FROM v_retards;
Les comptages doivent correspondre à l'original, et la vue doit fonctionner. Si la vue manque, c'est que la sauvegarde n'a pas tout pris — vérifiez que vous n'avez pas coché « Data only » dans les options.
5. Ce que contient le fichier .sql
Du SQL lisible, dans cet ordre :
- des commandes
CREATE TABLE, avec toutes vos contraintes ; - des commandes
COPYouINSERTavec toutes vos données ; - les
CREATE INDEX; - les
ALTER TABLE … ADD CONSTRAINTpour les clés étrangères ; - les
CREATE VIEW.
Deux choses à remarquer.
D'abord, les clés étrangères sont ajoutées à la fin, après les données. C'est astucieux : cela évite tous les problèmes d'ordre d'insertion dont nous avons parlé aux fiches 7 et 8.
Ensuite, ce fichier est votre base. Vous pouvez l'ouvrir, le lire, le corriger, l'envoyer par courriel, le déposer sur Classroom. C'est le format à privilégier pour rendre un travail.
Une dernière remarque qui vaut pour toute votre carrière : la sauvegarde que vous venez de tester est la seule qui compte. Celle que vous n'avez jamais restaurée n'est qu'un fichier dont vous espérez qu'il fonctionne.
Je sais faire
- Je sais créer une vue avec CREATE VIEW.
- Je sais produire un état de sortie mis en forme.
- Je sais exporter un résultat en CSV depuis pgAdmin.
- Je sais sauvegarder ma base et la restaurer.
Une case qui coince ? Relisez la partie concernée avant de passer à la fiche suivante.