PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 18 beta 2 » Référence » Applications client de PostgreSQL » pg_restore

pg_restore

pg_restore — restaure des bases de données PostgreSQL à partir d'archives créées par pg_dump ou pg_dumpall

Synopsis

pg_restore [option_connexion...] [option...] [nom_fichier]

Description

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.

Options

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.

Note

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.

Note

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.

Note

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.

Environnement

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).

Diagnostics

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.

Notes

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.

Exemples

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
   

Voir aussi

pg_dump, pg_dumpall, psql