pg_restore — restaure des bases de données PostgreSQL à partir d'archives créées par pg_dump ou pg_dumpall
pg_restore
[option_connexion
...] [option
...] [nom_fichier
]
pg_restore est un outil permettant de restaurer une base de données ou une instance PostgreSQL à partir d'une archive créée par pg_dump ou pg_dumpall dans l'un des formats non textuels. Il exécute les instructions nécessaires pour reconstruire la base de données ou l'instance dans l'état où elle se trouvait lors de l'export. Les fichiers d'archive permettent aussi à pg_restore d'être sélectif sur ce qui est restauré ou même de réordonner les éléments à restaurer. Les formats d'archive sont conçus pour être portables entre les architectures.
pg_restore peut fonctionner selon deux modes. Si un nom de base de données est spécifié, pg_restore se connecte à cette base et restaure directement le contenu de l'archive dans celle-ci. Lors de la restauration à partir d'un export généré par pg_dumpall, chaque base de données est créée, puis la restauration est effectuée dans cette base. Sinon, si aucun nom de base de données n'est spécifié, un script contenant les commandes SQL nécessaires à la reconstruction de la base de données ou de l'instance est généré, puis écrit dans un fichier ou envoyé vers la sortie standard. Ce script est équivalent au format texte brut produit par pg_dump ou pg_dumpall. Certaines des options contrôlant la sortie sont donc similaires à celles de pg_dump.
Évidemment, pg_restore ne peut pas restaurer des
informations qui ne sont pas présentes dans le fichier d'archive.
Par exemple, si l'archive a été créée avec l'option
« export des données sous forme de commandes
INSERT
», alors pg_restore
ne pourra pas charger les données en utilisant des instructions
COPY
.
pg_restore accepte les options en ligne de commande suivantes.
nom_fichier
Spécifie l'emplacement du fichier d'archive (ou du répertoire pour une archive au format « directory ») à restaurer. S'il n'est pas spécifié, l'entrée standard est utilisée.
-a
--data-only
Restaure seulement les données, pas les schémas (définitions des données) ou les statistiques. Les données des tables, les Large Objects, et les valeurs des séquences sont restaurées si elles sont présentes dans l'archive.
Cette option est similaire à --section=data
mais, pour
des raisons historiques, elle n'est pas identique.
-c
--clean
Avant de restaurer les objets de la base, lance des commandes SQL
DROP
pour supprimer tous les objets à restaurer.
Cette option est utile pour surcharger une base existante. Si un
des objets n'existe pas dans la base de destination, des messages
d'erreurs, à ignorer, seront renvoyées sauf si l'option
--if-exists
est aussi indiquée.
-C
--create
Crée la base de données avant de la restaurer. Si l'option
--clean
est aussi indiquée, supprime puis crée de
nouveau la base de données cible avant de s'y connecter.
Avec l'option --create
, pg_restore
restaure également le commentaire associé à la base de données, s'il a été
défini, ainsi que toutes les variables de configuration spécifiques à cette
base. Cela inclut notamment toutes les commandes ALTER DATABASE ...
SET ...
et ALTER ROLE ... IN DATABASE ... SET
...
qui se réfèrent à cette base. Les droits d'accès (ACL) sur la base
elle-même sont également restaurés, sauf si l'option --no-acl
est
spécifiée.
L'option --create
est requise lors de la restauration de
plusieurs bases de données à partir d'une archive créée par pg_dumpall.
Quand cette option est utilisée, la base de données indiquée avec
-d
est utilisée uniquement pour exécuter les commandes
DROP DATABASE
et CREATE DATABASE
initiales.
Toutes les données sont restaurées dans la base dont le nom est indiqué
dans l'archive.
-d nom_base
--dbname=nom_base
Se connecte à la base de données nom_base
et restaure directement dans
la base de données. Ce nom de base peut être remplacé par une chaîne de connexion. Dans ce cas, les
paramètres de la chaîne de connexion surchargeront toutes les options
en ligne de commande conflictuelles.
-e
--exit-on-error
Quitte si une erreur est rencontrée lors de l'envoi des commandes SQL à la base de données. La valeur par défaut est de continuer et d'afficher le nombre d'erreurs à la fin de la restauration.
-f nom_fichier
--file=filename
Spécifie le fichier en sortie pour le script généré ou pour la liste
lorsqu'elle est utilisée avec -l
. Utilisez
-
pour stdout.
-F format
--format=format
Spécifie le format de l'archive. Il n'est pas nécessaire de le spécifier car pg_restore détermine le format automatiquement. Si spécifié, il peut s'agir de l'une des valeurs suivantes :
c
custom
L'archive est dans le format personnalisé de pg_dump.
d
directory
L'archive est un répertoire (directory).
t
tar
L'archive est une archive tar
.
-g
--globals-only
Restaure uniquement les objets globaux (rôles et tablespaces), sans les bases de données.
Cette option n'est pertinente que lors de la restauration à partir d'une archive créée avec pg_dumpall.
-I index
--index=index
Restaure uniquement la définition des index mentionnés. Plusieurs index
peuvent être spécifiés en utilisant autant de fois l'option
-I
.
-j nombre-de-jobs
--jobs=nombre-de-jobs
Exécute les parties les plus consommatrices en temps de
pg_restore -- celles des chargements de
données, créations d'index et créations de contraintes -- en
parallèle, utilisant jusqu'à nombre-de-jobs
sessions parallèles.
Cette option peut réduire de beaucoup le temps pour restaurer une
grosse base de données pour un serveur fonctionnant sur une machine
multi-processeur. Cette option est ignorée lorsqu'un script est généré
au lieu d'établir une connexion directe avec un serveur de bases de
données.
Chaque job est un processus ou un thread, suivant le système d'exploitation, et utilise une connexion séparée au serveur.
La valeur optimale pour cette option dépend de la configuration matérielle du serveur, du client et du réseau. Les facteurs incluent le nombre de cœurs CPU et la configuration disque. Une bonne valeur de départ est le nombre de cœurs CPU du serveur, mais une valeur plus grande peut mener à des temps de restauration encore meilleurs dans de nombreux cas. Bien sûr, les valeurs trop hautes apporteront de moins bonnes performances.
Seuls les formats d'archive personnalisé et répertoire sont supportés
avec cette option. Le fichier en entrée doit être un fichier ou un
répertoire classique (et non, par exemple, un « pipe » ou l'entrée standard).
De plus, plusieurs jobs ne peuvent pas être utilisés conjointement avec
l'option --single-transaction
.
-l
--list
Liste le contenu de l'archive. Le résultat de cette opération peut être
utilisé en entrée de l'option -L
. Notez que, si vous
utilisez des options de filtre telles que -n
ou
-t
avec l'option -l
, elles
restreignent les éléments listés.
-L fichier_liste
--use-list=fichier_liste
Ne restaure que les éléments présents dans le fichier
fichier_liste
, et les
restaure dans l'ordre où ils apparaissent dans ce fichier. Notez que si
des options de filtre telles que -n
ou
-t
sont utilisées avec -L
, elles
restreindront encore davantage les éléments restaurés.
fichier_liste
est
normalement créé en éditant la sortie d'une précédente opération
-l
. Les lignes peuvent être déplacées ou supprimées,
et peuvent aussi être mises en commentaire en ajoutant un point-virgule
(;
) au début de la ligne. Voir ci-dessous pour des
exemples.
-n nom_schema
--schema=nom_schema
Restaure seulement les objets qui sont dans le schéma mentionné. Plusieurs
schémas peuvent être spécifiés en utilisant autant de fois l'option
-n
. Elle peut être combinée avec l'option
-t
pour ne restaurer qu'une seule table.
-N nom_schema
--exclude-schema=nom_schema
Ne pas restaurer les objets qui sont dans le schéma mentionné. Plusieurs
schémas à exclure peuvent être spécifiés en utilisant autant de fois
l'option -N
.
Lorsqu'à la fois -n
et -N
sont spécifiés
pour le même nom de schéma, c'est l'option -N
qui prévaut
et le schéma est exclu.
-O
--no-owner
Ne génère pas les commandes permettant d'attribuer les objets restaurés
à leur propriétaire d'origine. Par défaut,
pg_restore génère des instructions
ALTER OWNER
ou SET SESSION
AUTHORIZATION
pour rétablir le propriétaire des éléments du
schéma créés. Ces instructions échoueront sauf si la connexion initiale à
la base de données est effectuée par un superutilisateur (ou par le même
utilisateur que le propriétaire de tous les objets dans le script). Avec
-O
, n'importe quel nom d'utilisateur peut être utilisé
pour la connexion initiale, et cet utilisateur deviendra propriétaire de
tous les objets créés.
-P nom_fonction(argtype [,
...])
--function=nom_fonction(argtype [,
...])
Restaure seulement la fonction mentionnée. Veillez à orthographier le nom
de la fonction et ses arguments exactement comme ils apparaissent dans
la table des matières de l'export. Plusieurs fonctions peuvent
être spécifiées en utilisant autant de fois l'option -P
.
-P
.
-r
--no-reconnect
Cette option est obsolète mais est toujours acceptée pour des raisons de compatibilité ascendante.
-s
--schema-only
Restaure seulement le schéma (autrement dit, la définition des données), mais pas les données, à condition que cette définition soit présente dans l'archive.
Cette option ne peut pas être utilisée avec --data-only
ou --statistics-only
. Elle est
similaire, mais pas identique (pour des raisons historiques), à
--section=pre-data --section=post-data --no-statistics
.
(Ne pas la confondre avec l'option --schema
qui
utilise le mot « schema » dans un contexte différent.)
-S nom_utilisateur
--superuser=nom_utilisateur
Spécifie le nom d'utilisateur du superutilisateur à utiliser pour
désactiver les triggers. Ceci est seulement nécessaire si
--disable-triggers
est utilisé.
-t table
--table=table
Restaure la définition et/ou les données de la table mentionnée uniquement.
Dans ce contexte, « table » inclut les vues, les vues
matérialisées, les séquences et les tables distantes. Plusieurs tables
peuvent être sélectionnées en utilisant autant de fois l'option
-t
. Cette option peut être combinée avec l'option
-n
pour sélectionner des tables d'un schéma particulier.
Lorsqu'on utilise l'option -t
,
pg_restore ne tente pas de restaurer les
autres objets de la base de données dont la ou les tables sélectionnées
pourraient dépendre. Par conséquent, il n'y a aucune garantie qu'une
restauration d'une table spécifique dans une base vide réussira.
Cette option ne se comporte pas de la même façon que l'option
-t
de pg_dump. Il n'existe
actuellement aucun support pour la recherche avec des jokers dans
pg_restore, ni la possibilité d'inclure un nom
de schéma dans -t
. De plus, tandis que l'option
-t
de pg_dump exporte également
les objets dépendants (comme les index) des tables sélectionnées, celle de
pg_restore n'inclut pas ces objets.
Dans les versions de PostgreSQL antérieures à la 9.6, cette option ne correspondait qu'aux tables, et non aux autres types de relations.
-T trigger
--trigger=trigger
Restaure uniquement le trigger mentionné. Plusieurs triggers peuvent être
spécifiés en utilisant autant de fois l'option -T
.
-v
--verbose
Spécifie le mode verbeux. Ceci aura pour conséquence que pg_restore affichera des commentaires détaillés sur les objets, ainsi que les heures de début et de fin dans le fichier en sortie, et des messages de progression sur la sortie des erreurs. Répéter cette option cause l'apparition de messages de débogage supplémentaires sur la sortie des erreurs.
-V
--version
Affiche la version de pg_restore, puis quitte.
-x
--no-privileges
--no-acl
Empêche la restauration des droits d'accès (commandes grant/revoke).
-1
--single-transaction
Exécute la restauration en une seule transaction (autrement dit, toutes
les commandes de restauration sont placées entre un
BEGIN
et un COMMIT
). Ceci assure à
l'utilisateur que soit toutes les commandes réussissent, soit aucun
changement n'est appliqué. Cette option implique
--exit-on-error
.
--disable-triggers
Cette option n'est pertinente que lors d'une restauration sans schéma. Elle demande à pg_restore d'exécuter des commandes pour désactiver temporairement les triggers sur les tables cibles pendant que les données sont rechargées. Utilisez ceci si vous avez des vérifications d'intégrité référentielle sur les tables que vous ne voulez pas appeler lors du rechargement des données.
Actuellement, les commandes émises pour
--disable-triggers
doivent être exécutées par un
superutilisateur. Donc, vous devriez aussi spécifier un nom de
superutilisateur avec -S
ou, de préférence, lancer
pg_restore en tant que superutilisateur
PostgreSQL.
--enable-row-security
Cette option n'est pertinente que lors de la restauration du contenu d'une table disposant de la sécurité au niveau ligne (RLS). Par défaut, pg_restore configurera row_security à off, pour s'assurer que toutes les données sont restaurées dans la table. Si l'utilisateur n'a pas les droits nécessaires pour contourner la sécurité au niveau ligne, alors une erreur est levée. Ce paramètre demande à pg_restore de configurer row_security à on, permettant à l'utilisateur d'essayer de restaurer le contenu de la table avec la sécurité au niveau ligne activée. Ceci pourrait échouer si l'utilisateur n'a pas le droit d'insérer des lignes dans la table.
Notez que cette option requiert aussi actuellement que la sauvegarde
soit au format INSERT
car COPY
FROM
n'est pas supportée par la sécurité au niveau ligne.
--exclude-database=motif
Ne restaure pas les bases de données dont le nom correspond au
motif
.
Plusieurs motifs peuvent être exclus en répétant plusieurs fois
l'option --exclude-database
.
Le paramètre motif
est
interprété comme un motif selon les mêmes règles que les commandes
\d
de psql
(voir Motifs).
Il est donc possible d'exclure plusieurs bases de données en utilisant
des jokers dans le motif. Dans ce cas, prenez soin d'encadrer le motif de
guillemets simples si nécessaire, pour empêcher le shell de les interpréter.
Cette option n'est pertinente que lors de la restauration à partir d'une archive créée avec pg_dumpall.
--filter=filename
Spécifie un nom de fichier à partir duquel lire les motifs des objets
à exclure ou à inclure lors de la restauration. Les motifs sont interprétés
selon les mêmes règles que
-n
/--schema
pour inclure les objets
dans les schémas,
-N
/--exclude-schema
pour exclure
les objets dans les schémas,
-P
/--function
pour restaurer les
fonctions mentionnées, -I
/--index
pour
restaurer les index mentionnés,
-t
/--table
pour restaurer les
tables mentionnées ou -T
/--trigger
pour
restaurer les triggers. Pour lire depuis
STDIN
, utilisez -
comme nom
de fichier. L'option --filter
peut être utilisée en
même temps que les options listées ci-dessus pour inclure ou exclure
des objets, et peut aussi être spécifiée plusieurs fois pour utiliser
plusieurs fichiers de filtres.
Le fichier liste un motif de base de données par ligne en respectant le format suivant :
{ include | exclude } { function | index | schema | table | trigger } MOTIF
Le premier mot clé indique si les objets correspondant au motif doivent être inclus ou exclus. Le deuxième mot clé précise le type d'objet à filtrer à l'aide du motif :
function
: fonctions, fonctionne comme
l'option -P
/--function
. Ce
mot clé peut seulement être utilisé avec le mot clé
include
.
index
: index, fonctionne comme l'option
-I
/--indexes
. Ce mot clé peut
seulement être utilisé avec le mot clé include
.
schema
: schémas, fonctionne comme les
options -n
/--schema
et
-N
/--exclude-schema
.
table
: tables, fonctionne comme l'option
-t
/--table
. Ce mot clé peut
seulement être utilisé avec le mot clé include
.
trigger
: triggers, fonctionne comme
l'option -T
/--trigger
. Ce mot
clé peut seulement être utilisé avec le mot clé
include
.
Les lignes commençant avec #
sont considérées
comme des commentaires et, de ce fait, sont ignorées. Les
commentaires peuvent aussi être placés à la suite d'une ligne de motif
d'objet. Les lignes vides sont elles-aussi ignorées. Voir
Motifs pour savoir comment réaliser
l'échappement dans les motifs.
--if-exists
Utilise des commandes DROP ... IF EXISTS
pour
supprimer des objets dans le mode --clean
. Cela
permet de supprimer les erreurs « does not exist » qui
seraient sinon renvoyées. Cette option n'est pas valide sauf si
--clean
est aussi spécifiée.
--no-comments
Ne génère pas les commandes pour restaurer les commentaires, même si l'archive en contient.
--no-data
Ne génère pas les commandes pour restaurer les données, même si l'archive en contient.
--no-data-for-failed-tables
Par défaut, les données de la table sont restaurées même si la commande de création de cette table a échoué (par exemple parce qu'elle existe déjà). Avec cette option, les données de cette table seront ignorées. Ce comportement est utile si la base cible contient déjà des données pour cette table. Par exemple, les tables supplémentaires des extensions de PostgreSQL comme PostGIS pourraient avoir déjà été créées et remplies sur la base cible ; indiquer cette option empêche l'ajout de données dupliquées ou obsolètes.
Cette option est seulement efficace lors de la restauration directe d'une base, pas lors de la réalisation d'une sortie de script SQL.
--no-policies
Ne génère pas les commandes pour restaurer les politiques de sécurité au niveau ligne, même si l'archive en contient.
--no-publications
Ne génère pas les commandes pour restaurer les publications, même si l'archive en contient.
--no-schema
Ne génère pas les commandes pour restaurer le schéma (définitions des données), même si l'archive en contient.
--no-security-labels
Ne génère pas les commandes pour restaurer les labels de sécurité, même si l'archive en contient.
--no-statistics
Ne génère pas les commandes pour restaurer les statistiques, même si l'archive en contient.
--no-subscriptions
Ne génère pas les commandes pour restaurer les souscriptions, même si l'archive en contient.
--no-table-access-method
Ne génère pas les commandes pour sélectionner les méthodes d'accès aux tables. Avec cette option, tous les objets seront créés avec la méthode d'accès aux tables par défaut lors de la restauration.
--no-tablespaces
Ne sélectionne pas les tablespaces. Avec cette option, tous les objets seront créés dans le tablespace par défaut lors de la restauration.
--section=nom_section
Restaure seulement la section mentionnée. Le nom de la section peut être
pre-data
, data
ou
post-data
. Cette option peut être spécifiée plus d'une
fois pour sélectionner plusieurs sections. La valeur par défaut est
toutes les sections.
La section data contient toutes les données des tables ainsi que la définition des Large Objects. Les éléments post-data consistent en la définition des index, triggers, règles et contraintes (autres que les contraintes de vérification). Les éléments pre-data consistent en tous les autres éléments de définition.
--statistics-only
Restaure uniquement les statistiques, sans le schéma (définitions des données) ni les données.
--strict-names
Requiert que chaque qualificateur de schéma (-n
/
--schema
) et table (-t
/
--table
) corresponde à au moins un schéma ou une table
présent dans le fichier à restaurer.
--transaction-size=N
Exécute la restauration sous forme d'une série de transactions, chacune
traitant jusqu'à N
objets de la base de données. Cette option implique
--exit-on-error
.
--transaction-size
propose un choix intermédiaire
entre le comportement par défaut (une transaction par commande SQL) et
l'option -1
/--single-transaction
(une seule transaction pour tous les objets restaurés). Alors que
--single-transaction
a la surcharge la moins
importante, cela pourrait se révéler peu pratique pour les grosses
bases de données du fait du verrou pris par la transaction sur chaque
objet restauré, risquant d'épuiser tout l'espace mémoire du serveur
disponible pour les verrous. Utiliser --transaction-size
avec une taille de quelques milliers d'objets offre quasiment les
mêmes avantages en termes de performance tout en limitant la quantité de
mémoire nécessaire pour les verrous.
--use-set-session-authorization
Génère des commandes SET SESSION AUTHORIZATION
conformes
au standard SQL au lieu des commandes ALTER OWNER
pour définir le propriétaire des objets. Cela rend l'export
plus conforme aux standards, mais selon l'historique des objets contenus
dans l'archive, la restauration pourrait ne pas s'effectuer correctement.
--with-data
Génère les commandes pour restaurer les données, si l'archive en contient. C'est le comportement par défaut.
--with-schema
Génère les commandes pour restaurer le schéma (définitions des données), si l'archive en contient. C'est le comportement par défaut.
--with-statistics
Génère les commandes pour restaurer les statistiques, si l'archive en contient. C'est le comportement par défaut.
-?
--help
Affiche l'aide sur les arguments en ligne de commande de pg_restore, puis quitte.
pg_restore accepte également les arguments en ligne de commande suivants pour les paramètres de connexion :
-h hôte
--host=hôte
Spécifie le nom d'hôte de la machine sur laquelle le serveur de bases de
données est en cours d'exécution. Si la valeur commence par une barre
oblique (/), elle est interprétée comme le répertoire du socket de
domaine Unix. Par défaut, la valeur est tirée de la variable
d'environnement PGHOST
, si elle est définie ;
sinon, une connexion via socket de domaine Unix est tentée.
-p port
--port=port
Spécifie le port TCP ou l'extension du fichier socket de domaine Unix
sur lequel le serveur écoute les connexions. La valeur par défaut est
celle de la variable d'environnement PGPORT
, si elle est
définie. Dans le cas contraire, il s'agit de la valeur fournie à la
compilation.
-U
nom_utilisateur
--username=nom_utilisateur
Spécifie le nom d'utilisateur utilisé pour la connexion.
-w
--no-password
Ne jamais demander de mot de passe. Si le serveur requiert une
authentification par mot de passe et qu'aucun mot de passe n'est disponible
par un autre moyen (par exemple via le fichier .pgpass
),
la tentative de connexion échouera. Cette option peut être utile dans les
scripts ou les traitements de type batch, où aucun utilisateur
n'est présent pour saisir un mot de passe.
-W
--password
Force pg_restore à demander un mot de passe avant la connexion à une base de données.
Cette option n'est jamais indispensable car
pg_restore demande automatiquement un mot de
passe si le serveur exige une authentification par mot de passe.
Néanmoins, pg_restore perd une tentative de
connexion pour tester si le serveur requiert un mot de passe. Dans
certains cas, il est préférable d'ajouter l'option -W
pour éviter cette tentative de connexion supplémentaire.
--role=nom_rôle
Spécifie un rôle à utiliser pour la restauration. Avec cette option,
pg_restore émet une commande SET
ROLE
nom_rôle
après s'être connecté à la base de données. C'est utile quand l'utilisateur
authentifié (indiqué par -U
) n'a pas les droits dont
pg_restore a besoin, mais peut basculer vers un
rôle qui les a. Certaines installations ont une politique qui est
contre se connecter directement en tant que superutilisateur, et
l'utilisation de cette option permet aux restaurations de se faire
sans violer cette politique.
PGHOST
PGOPTIONS
PGPORT
PGUSER
Paramètres de connexion par défaut.
PG_COLOR
Indique s'il faut utiliser la couleur dans les messages de diagnostic.
Les valeurs possibles sont always
,
auto
, never
.
Cet outil, comme la plupart des autres outils PostgreSQL, utilise les variables d'environnement supportées par la bibliothèque libpq (voir Section 32.15).
Lorsqu'une connexion directe à la base de données est spécifiée à l'aide de
l'option -d
, pg_restore exécute
en interne des instructions SQL. Si vous rencontrez des
problèmes lors de l'exécution de pg_restore,
assurez-vous que vous pouvez interroger la base de données,
par exemple à l'aide de psql.
Par ailleurs, tous les paramètres de connexion par défaut et variables
d'environnement utilisés par la bibliothèque cliente
libpq s'appliquent.
Si votre installation contient des ajouts locaux dans la base de données
template1
, veillez à charger la sortie de
pg_restore dans une base réellement vide ;
dans le cas contraire, vous risquez d'obtenir des erreurs dues à des
définitions en double des objets ajoutés. Pour créer une base vide sans
ajouts locaux, copiez-la depuis template0
plutôt que
template1
, par exemple :
CREATE DATABASE foo WITH TEMPLATE template0;
Les limitations de pg_restore sont détaillées ci-dessous.
Lors de la restauration des données dans une table préexistante, si
l'option --disable-triggers
est utilisée,
pg_restore génère des commandes pour désactiver
les triggers sur les tables utilisateur avant l'insertion des données,
puis génère les commandes pour les réactiver après l'insertion.
Si la restauration est interrompue en cours de traitement, les catalogues
système pourraient se retrouver dans un état incohérent.
pg_restore ne peut pas restaurer les « Large
Objects » de manière sélective, par exemple uniquement ceux associés à
une table spécifique. Si une archive contient des « Large Objects », alors
ils seront tous restaurés, ou aucun s'ils sont exclus à l'aide de
-L
, -t
ou d'autres options.
Voir aussi la documentation de pg_dump pour les détails sur les limitations de pg_dump.
Par défaut, pg_restore
restaure les statistiques de
l'optimiseur si elles sont incluses dans l'archive. Si toutes les statistiques
ne sont pas restaurées, il peut être utile d'exécuter
ANALYZE
sur chaque table restaurée afin que l'optimiseur
dispose de statistiques utiles.
Voir Section 24.1.3 et Section 24.1.6
pour plus d'informations.
Supposons que nous avons exporté une base nommée
ma_base
dans un fichier d'archive au format
personnalisé :
$
pg_dump -Fc ma_base > ma_base.dump
Pour supprimer la base et la re-créer à partir de l'export :
$
dropdb ma_base
$
pg_restore -C -d postgres ma_base.dump
La base nommée avec l'option -d
peut être toute base de
données existante dans l'instance ;
pg_restore l'utilise seulement pour exécuter la
commande CREATE DATABASE
pour
ma_base
. Avec -C
, les données sont
toujours restaurées dans la base de données dont le nom apparaît dans
l'export.
Pour charger l'export dans une nouvelle base nommée
nouvelle_base
:
$
createdb -T template0 nouvelle_base
$
pg_restore -d nouvelle_base db.dump
Notez que nous n'utilisons pas -C
et que nous nous sommes
connectés directement sur la base à restaurer. De plus, notez que nous
clonons la nouvelle base à partir de template0
et non
pas de template1
, pour s'assurer qu'elle est vide.
Pour réordonner les éléments de la base de données, il est tout d'abord nécessaire de générer la table des matières de l'archive :
$
pg_restore -l ma_base.dump > ma_base.liste
Le fichier de liste se compose d'un en-tête et d'une ligne pour chaque élément, par exemple :
; ; Archive created at Mon Sep 14 13:55:39 2009 ; dbname: DBDEMOS ; TOC Entries: 81 ; Compression: 9 ; Dump Version: 1.10-0 ; Format: CUSTOM ; Integer: 4 bytes ; Offset: 8 bytes ; Dumped from database version: 8.3.5 ; Dumped by pg_dump version: 8.3.8 ; ; ; Selected TOC Entries: ; 3; 2615 2200 SCHEMA - public pasha 1861; 0 0 COMMENT - SCHEMA public pasha 1862; 0 0 ACL - public pasha 317; 1247 17715 TYPE public composite pasha 319; 1247 25899 DOMAIN public domain0 pasha
Les points-virgules introduisent un commentaire, et les numéros en début de ligne font référence à l'identifiant interne attribué à chaque élément dans l'archive.
Les lignes dans le fichier peuvent être commentées, supprimées et réordonnées. Par exemple :
10; 145433 TABLE map_resolutions postgres ;2; 145344 TABLE species postgres ;4; 145359 TABLE nt_header postgres 6; 145402 TABLE species_records postgres ;8; 145416 TABLE ss_old postgres
peut être utilisé en entrée de pg_restore et ne restaure que les éléments 10 et 6 dans cet ordre :
$
pg_restore -L mabase.liste mabase.fichier