CodeGym /Cours /SQL SELF /Restauration des données avec pg_restore

Restauration des données avec pg_restore

SQL SELF
Niveau 43 , Leçon 3
Disponible

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 avec pg_dump au format custom ou directory

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

  1. 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
  1. 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
  1. 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
  1. 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 --clean pour éviter le conflit.

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