Une fois que t’as fait une sauvegarde comme un admin de base de données responsable, arrive le moment de vérité : la restauration des données. Et là, le héros du jour débarque — la commande pg_restore. Si pg_dump était ton super-héros pour faire des backups, pg_restore c’est son acolyte qui ressuscite les données à partir des sauvegardes.
pg_restore sert à restaurer des données depuis des fichiers créés avec pg_dump dans des formats binaires (custom ou directory). Si jamais ta base de données a été abîmée, ou si tu veux migrer des données sur un nouveau serveur, cet outil va devenir ton meilleur pote.
Pourquoi tu as besoin de pg_restore :
- Il te permet de restaurer toute la base de données ou juste certains morceaux (schéma, tables, données).
- C’est un outil puissant pour les scénarios de restauration complexes où tu veux tout contrôler dans le détail.
Syntaxe de base de la commande
Pour bosser avec pg_restore, on commence par la syntaxe de base :
pg_restore -U username -d database_name backup_file.dump
Les paramètres de la commande :
-U username: indique le nom d’utilisateur PostgreSQL pour se connecter.-d database_name: le nom de la base où tu veux restaurer les données.backup_file.dump: le fichier de sauvegarde créé avant avecpg_dumpau formatcustomoudirectory
Par exemple, si tu veux restaurer la base university depuis le fichier backup.dump en tant qu’utilisateur postgres, la commande sera :
pg_restore -U postgres -d university backup.dump
Quand tu lances cette commande, pg_restore démarre la restauration et remet les données dans la base !
Types de backups et leur compatibilité
Toutes les sauvegardes ne se valent pas. Tu te souviens peut-être qu’avec pg_dump on pouvait choisir différents formats. Certains sont compatibles avec pg_restore, d’autres non.
| Format du backup | Description | Supporté par pg_restore |
|---|---|---|
plain (texte) |
Script SQL contenant les commandes de restauration. | ❌ Non |
custom |
Backup compressé au format propriétaire PostgreSQL. | ✅ Oui |
directory |
Backup sauvegardé sous forme de dossier avec plusieurs fichiers. | ✅ Oui |
tar |
Archive au format TAR. | ✅ Oui |
Attention, pour les backups texte (plain), tu ne peux pas utiliser pg_restore. Ces fichiers se restaurent à la main avec la commande psql. Par exemple :
psql -U username -d database_name -f backup.sql
La flexibilité de pg_restore : options de restauration
Une des raisons pour lesquelles pg_restore est si populaire, c’est sa flexibilité. Tu peux restaurer toute la base ou juste des parties.
Restaurer la structure des données. Si tu veux restaurer uniquement la structure de la base (schémas de tables, index, triggers, etc.), utilise le flag --schema-only :
pg_restore -U postgres -d university --schema-only backup.dump
C’est pratique si tu veux analyser la structure de la base ou créer une copie “vide”.
Restaurer uniquement les données. Si seules les données t’intéressent (sans la structure), utilise --data-only :
pg_restore -U postgres -d university --data-only backup.dump
Ça peut servir si la structure existe déjà mais que tu veux remettre le contenu des tables.
Nettoyer avant de restaurer. Parfois, les tables ou schémas existent déjà dans la base. Pour les supprimer avant la restauration, utilise --clean :
pg_restore -U postgres -d university --clean backup.dump
Avec cette option, pg_restore va d’abord supprimer les objets existants puis restaurer les données du backup.
Filtrer les objets. pg_restore te permet de choisir quels objets du backup tu veux restaurer. Pour ça, utilise le flag --table :
pg_restore -U postgres -d university --table=students backup.dump
Dans cet exemple, seule la table students sera restaurée.
Afficher le SQL dans le terminal
Si tu veux voir ce qui va être exécuté pendant la restauration sans toucher à la base, utilise --list :
pg_restore -l backup.dump
Et pour avoir les commandes SQL en texte qui seront exécutées, ajoute --verbose :
pg_restore -U postgres --verbose --schema-only backup.dump
Exemples de restauration
- Restauration complète de la base de données.
Le scénario le plus classique : tu veux tout restaurer depuis le backup :
pg_restore -U postgres -d university backup.dump
- Restaurer une table précise.
Par exemple, si tu as perdu les données de la table courses, restaure-la séparément :
pg_restore -U postgres -d university --table=courses backup.dump
- Restaurer le schéma de la base.
Pour restaurer juste la structure des tables (sans les données) :
pg_restore -U postgres -d university --schema-only backup.dump
- Restaurer en recréant les objets.
Si tu veux écraser les données existantes :
pg_restore -U postgres -d university --clean backup.dump
Erreurs classiques à la restauration et comment les éviter
Incompatibilité de versions. Si tu fais un backup avec une version de PostgreSQL et que tu essaies de le restaurer sur une autre (surtout plus ancienne), tu risques d’avoir des erreurs d’incompatibilité. Solution : essaie d’utiliser la même version de PostgreSQL pour le backup et la restauration.
Erreur "Role does not exist". Si le backup utilise des rôles (utilisateurs) qui n’existent pas sur le serveur de restauration, tu auras cette erreur. Solution : crée les rôles nécessaires à l’avance sur le nouveau serveur.
Erreur "Table already exists". Cette erreur arrive si tu essaies de restaurer une table qui existe déjà. Utilise
--cleanpour éviter le conflit.
GO TO FULL VERSION