PostgreSQLLa base de données la plus sophistiquée au monde.

pg_dump

pg_dump — sauvegarder une base de données PostgreSQL™ dans un script ou tout autre fichier d'archive

Synopsis

pg_dump [option...] [nom_base]

Description

pg_dump est un outil de sauvegarde d'une base de données PostgreSQL™. Les sauvegardes réalisées sont cohérentes, même lors d'accès concurrents à la base de données. pg_dump ne bloque pas l'accès des autres utilisateurs (ni en lecture ni en écriture).

Les extractions peuvent être réalisées sous la forme de scripts ou de fichiers d'archive. Les scripts sont au format texte et contiennent les commandes SQL nécessaires à la reconstruction de la base de données dans l'état où elle était au moment de la sauvegarde. La restauration s'effectue en chargeant ces scrits avec psql(1). Ces scripts permettent de reconstruire la base de données sur d'autres machines et d'autres architectures, et même, au prix de quelques modifications, sur d'autres bases de données SQL.

La reconstruction de la base de données à partir d'autres formats de fichiers archive est obtenue avec pg_restore(1). pg_restore permet, à partir de ces formats, de sélectionner les éléments à restaurer, voire de les réordonner avant restauration. Les fichiers d'archive sont conçus pour être portables au travers d'architectures différentes.

Lorsqu'il est utilisé avec un des formats de fichier d'archivé en combinaison avec pg_restore, pg_dump fournit un mécanisme d'archivage et de transfert flexible. pg_dump peut être utilisé pour sauvegarder une base de données dans son intégralité ; pg_restore peut alors être utilisé pour examiner l'archive et/ou sélectionner les parties de la base de données à restaurer. Le format de fichier de sortie le plus flexible est le format « personnalisé » (custom en anglais, -Fc). Compressé par défaut, il permet de sélectionner et réordonner les éléments archivés. Non compressé, le format tar (-Ft) ne permet pas de réordonner les données au chargement mais est somme toute assez flexible. Qui plus est, il est utilisable par des outils Unix standard comme tar.

Lors de l'exécution de pg_dump, il est utile de surveiller les messages d'avertissement (affichés sur la sortie erreur standard), en particulier en ce qui concerne les limitations indiquées ci-dessous.

Options

Les options suivantes de la ligne de commande contrôlent le contenu et le format de la sortie.

nom_base

Le nom de la base de données à sauvegarder. En l'absence de précision, la variable d'environnement PGDATABASE est utilisée. Si cette variable n'est pas positionnée, le nom de l'utilisateur de la connexion est utilisé.

-a, --data-only

Seules les données sont sauvegardées, pas le schéma (définition des données).

Cette option n'a d'intérêt que pour le format texte. Pour les formats archive, l'option est spécifiée à l'appel de pg_restore.

-b, --blobs

Inclut les objets larges dans la sauvegarde. C'est le comportement par défaut sauf si vous ajoutez une des options suivantes : --schema, --table ou --schema-only. Donc cette option -b est seulement utile pour ajouter les objets larges dans le cas des sauvegardes sélectives.

-c, --clean

Les commandes de nettoyage (suppression) des objets de la base sont écrites avant les commandes de création.

Cette option n'a d'intérêt que pour le format texte. Pour les formats archive, l'option est spécifiée à l'appel de pg_restore.

-C, --create

La sortie débute par une commande de création de la base de données et de connexion à cette base. Peu importe dans ce cas la base de données à laquelle la connexion est faite avant la restauration.

Cette option n'a d'intérêt que pour le format texte. Pour les formats archive, l'option est spécifiée à l'appel de pg_restore.

-d, --inserts

Les données sont copiées à l'aide de commandes INSERT plutôt que COPY. La restauration en est considérablement ralentie. Cela s'avère essentiellement utile pour créer des sauvegardes rechargées dans des bases de données autres que PostgreSQL™. De plus, comme cette option génère une commande séparée pour chaque ligne, une erreur lors du chargement d'une ligne ne fera que perdre cette ligne plutôt que le contenu entier de la table. La restauration échoue tout de même si les colonnes ont été réorganisées. L'option -D est sûre même avec des modifications dans l'ordre des colonnes, mais elle est du coup bien plus lente.

-D, --column-inserts, --attribute-inserts

Les données sont copiées à l'aide de commandes INSERT qui explicitent les noms de colonnes (INSERT INTO table (colonne, ...) VALUES ...). La restauration en est considérablement ralentie. Cela s'avère essentiellement utile pour créer des sauvegardes rechargées dans des bases de données autres que PostgreSQL™. De plus, comme cette option génère une commande séparée pour chaque ligne, une erreur lors du chargement d'une ligne ne fera que perdre cette ligne plutôt que le contenu entier de la table.

-f file, --file=file

La sortie est redirigée vers le fichier spécifié. Sans précision, la sortie standard est utilisée.

-E codage, --encoding=codage

La sauvegarde est créée dans l'encodage spécifié. Par défaut, la sauvegarde utilise celui de la base de données. Le même résultat peut être obtenu en positionnant la variable d'environnement PGCLIENTENCODING avec le codage désiré pour la sauvegarde.

-F format, --format=format

Le format de la sortie. format correspond à un des éléments suivants :

p

Fichier de scripts SQL en texte simple (défaut).

t

Archive tar utilisable par pg_restore. Ce format permet d'ordonner et/ou d'exclure des objets lors de la restauration de la base. Il est également possible de restreindre les données rechargées lors de la restauration.

c

Archive personnalisée utilisable par pg_restore. C'est le format le plus flexible puisqu'il permet d'ordonner le chargement des données et la définition des objets. Ce format est compressé par défaut.

-i, --ignore-version

Les différences de version entre pg_dump et le serveur de bases de données sont ignorées.

pg_dump peut créer des sauvegardes de bases de données de versions différentes, mais les très anciennes versions ne sont plus supportées (actuellement celles antérieures à la 7.0). Sauvegarder à partir d'une version de serveur plus récente que celle de pg_dump a toutes les chances de ne pas fonctionner du tout. Cette option est utilisée lorsque la vérification de version ne doit pas être effectuée. Dans ce cas, il se peut que pg_dump échoue.

-n schéma, --schema=schéma

Sauvegarde seulements les schémas correspondant à schema ; la sélection se fait à la fois sur le schéma et sur les objets qu'il contient. Quand cette option n'est pas indiquée, tous les schémas non système de la base cible seront sauvegardés. Plusieurs schémas peuvent être indiqués en utilisant plusieurs fois l'option -n. De plus, le paramètre schéma est interprété comme un modèle suivant les règles utilisées par les commandes \d de psql (voir Modèles). Du coup, plusieurs schémas peuvent être sélectionnés en utilisant des caractères joker dans le modèle. Lors de l'utilisation de ces caractères, faites attention à placer le modèle entre guillemets si nécessaire pour empêcher le shell de remplacer les jokers.

[Note]

Note

Quand -n est indiqué, pg_dump ne sauvegarde aucun autre objets de la base que ceux dont les schémas sélectionnés dépendent. Du coup, il n'est pas garantie que la sauvegarde d'un schéma puisse être restaurée avec succès dans une base vide.

[Note]

Note

Les objets qui ne font pas partie du schéma comme les objets larges ne sont pas sauvegardés quand -n est précisé. Vous pouvez de nouveau ajouter les objets larges avec l'option --blobs.

-N schéma, --exclude-schema=schéma

Ne sauvegarde pas les schémas correspondant au modèle schéma. Le modèle est interprété suivant les même règles que -n. -N peut aussi être indiqué plus d'une fois pour exclure des schémas correspondant à des modèles différents.

Quand les options -n et -N sont indiquées, seront seulement sauvegardés les schémas qui correspondent à au moins une option -n et à aucune option -N. Si -N apparaît sans -n, alors les schémas correspondant à -N sont exclus de ce qui est une sauvegarde normale.

-o, --oids

Les identifiants d'objets (OID) sont sauvegardés comme donnée des tables. Cette option est utilisée dans le cas d'applications utilisant des références aux colonnes OID (dans une contrainte de clé étrangère, par exemple). Elle ne devrait pas être utilisée dans les autres cas.

-O, --no-owner

Les commandes d'initialisation des possessions des objets au regard de la base de données originale ne sont pas produites. Par défaut, pg_dump engendre des instructions ALTER OWNER ou SET SESSION AUTHORIZATION pour fixer ces possessions. Ces instructions échouent lorsque le script n'est pas lancé par un superutilisateur (ou par l'utilisateur qui possède tous les objets de ce script). L'option -O est utilisée pour créer un script qui puisse être restauré par n'importe quel utilisateur. En revanche, c'est cet utilisateur qui devient propriétaire de tous les objets.

Cette option n'a d'intérêt que pour le format texte. Pour les formats archive, l'option est spécifiée à l'appel de pg_restore.

-R, --no-reconnect

Cette option, obsolète, est toujours acceptée pour des raisons de compatibilité ascendante.

-s, --schema-only

Seule la définition des objets (le schéma) est sauvegardée, pas les données.

-S nomutilisateur, --superuser=nomutilisateur

Le nom du superutilisateur à utiliser lors de la désactivation des déclencheurs. Cela n'a d'intérêt que si l'option --disable-triggers est précisée. (En règle générale, il est préférable de ne pas utiliser cette option et de lancer le script engendré en tant que superutilisateur.)

-t table, --table=table

Sauvegarde seulement les tables (ou vues ou séquences) correspondant à table. Plusieurs tables sont sélectionnables en utilisant plusieurs fois l'option -t. De plus, le paramètre table est interprété comme un modèle suivant les règles utilisées par les commandes \d de psql (voir Modèles). Du coup, plusieurs tables peuvent être sélectionnées en utilisant des caractères joker dans le modèle. Lors de l'utilisation de ces caractères, faites attention à placer le modèle entre guillemets si nécessaire pour empêcher le shell de remplacer les jokers.

Les options -n et -N n'ont aucun effet quand l'option -t est utilisée car les tables sélectionnées par -t seront sauvegardées quelque soit la valeur des options relatives aux schémas et les objets qui ne sont pas des tables ne seront pas sauvegardés.

[Note]

Note

Quand -t est indiqué, pg_dump ne sauvegarde aucun autre objet de la base que la (ou les) table(s) sélectionnée(s) dépendent. Du coup, il n'est pas garantie que la sauvegarde spécifique d'une table puisse être restaurée avec succès dans une base vide.

[Note]

Note

Le comportement de l'option -t n'est pas entièrement compatible avec les versions de PostgreSQL™ antérieures à la 8.2. Auparavant, écrire -t tab aurait sauvegardé toutes les tables nommées tab mais maintenant, seules sont sauvegardées celles qui sont visibles dans votre chemin de recherche des objets. Pour obtenir l'ancien comportement, vous pouvez écrire -t '*.tab'. De plus, vous devez aussi écrire quelque chose comme -t sch.tab pour sélectionner une table dans un schéma particulier plutôt que l'ancienne syntaxe -n sch -t tab.

-T table, --exclude-table=table

Ne sauvegarde pas les tables correspondant au modèle table. Le modèle est interprété suivant les même règles que -t. -T peut aussi être indiqué plus d'une fois pour exclure des tables correspondant à des modèles différents.

Quand les options -t et -T sont indiquées, seront seulement sauvegardées les tables qui correspondent à au moins une option -t et à aucune option -T. Si -T apparaît sans -t, alors les tables correspondant à -T sont exclues de ce qui est une sauvegarde normale.

-v, --verbose

Mode verbeux. pg_dump affiche des commentaires détaillés sur les objets et les heures de début et de fin dans le fichier de sauvegarde. Des messages de progression sont également affichés sur la sortie erreur standard.

-x, --no-privileges, --no-acl

Les droits d'accès (commandes grant/revoke) ne sont pas sauvegardés.

--disable-dollar-quoting

Cette option désactive l'utilisation des guillemets dollar pour le corps des fonctions. La syntaxe SQL standard des chaînes est utilisée pour la mise entre guillemets du corps des fonctions.

--disable-triggers

Cette option n'a d'intérêt que dans le cas de sauvegarde des données seules. Dans ce cas, pg_dump inclut à la sortie des commandes permettant de désactiver temporairement les déclencheurs sur les tables cibles lors du chargement des données. Cette commande est utilisée lorsqu'il existe sur les tables des vérifications d'intégrité référentielles ou des déclencheurs dont l'exécution n'est pas souhaitable lors du chargement des données.

À l'heure actuelle, les commandes engendrées par --disable-triggers doivent être exécutées par le superutilisateur. Il est donc nécessaire que le nom du superutilisateur soit également précisé, à l'aide de -S. Le script résultant peut aussi être lancé par le superutilisateur (c'est d'ailleurs préférable).

Cette option n'a d'intérêt que pour le format texte. Pour les formats archive, l'option est spécifiée à l'appel de pg_restore.

--use-set-session-authorization

Les commandes SET SESSION AUTHORIZATION du standard SQL sont affichées à la place des commandes ALTER OWNER pour préciser le propriétaire d'un objet. Cela rend la sauvegarde plus compatible avec le standard mais, en fonction de l'historique des objets dans la sauvegarde, il se peut que la restauration soit incorrecte. De plus, une sauvegarde qui utilise SET SESSION AUTHORIZATION nécessite pour la restauration des droits superutilisateur tandis que ALTER OWNER requiert des privilèges moins étendus.

-Z 0..9, --compress=0..9

Spécifie le niveau de compression à utiliser. Zéro signifie sans compression. Pour le format d'archive personnalisé, cela signifie la compression des segments individuels des données des tables. La valeur par défaut est de compresser à un niveau modéré. Pour le format texte, indiquer une valeur différente de zéro fait que le fichier entier est compressé, bien qu'il a été envoyé à gzip ; mais par défaut, la sortie n'est pas compressée. Le format d'archive tar ne supporte pas du tout la compression.

Les options de ligne de commande suivantes gèrent les paramètres de connexion :

-h hôte, --host hôte

Le nom d'hôte de la machine sur laquelle le serveur de bases de données est exécuté. Si la valeur commence par une barre oblique (/), elle est utilisée comme répertoire pour le socket de domaine Unix. La valeur par défaut est fournie par la variable d'environnement PGHOST, si elle est initialisée. Dans le cas contraire, une connexion sur la socket de domaine Unix est tentée.

-p port, --port port

Le port TCP ou le fichier local de socket de domaine Unix sur lequel le serveur écoute les connexions. La valeur par défaut est fournie par la variable d'environnement PGPORT, si elle est initialisée. Dans le cas contraire, il s'agit de la valeur fournie à la compilation.

-U nomutilisateur

Le nom d'utilisateur utilisé pour la connexion.

-W

Un mot de passe est demandé dans tous les cas. Ce comportement est celui automatiquement obtenu lorsque le serveur requiert une authentification par mot de passe.

Environnement

PGDATABASE, PGHOST, PGPORT, PGUSER

Paramètres de connexion par défaut.

Cet outil, comme la plupart des autres outils PostgreSQL™, utilise aussi les variables d'environnement supportées par la bibliothèque libpq (voir Section 29.12, « Variables d'environnement »).

Diagnostiques

pg_dump exécute intrinsèquement des instructions SELECT. Si des problèmes apparaissent à l'exécution de pg_dump, psql(1) peut être utilisé pour s'assurer de la possibilité de sélectionner des informations dans la base de données. De plus, tout paramètre de connexion par défaut et toute variable d'environnement utilisé par la bibliothèque libpq s'appliqueront.

Notes

Si des ajouts locaux à la base template1 ont été effectués dans le groupe de bases de données, il est impératif de s'assurer que la sortie de pg_dump est effectivement restaurée dans une base vide ; dans le cas contraire, il est fort probable que la duplication des définitions des objets ajoutés engendre des erreurs. Pour obtenir une base vide de tout ajout local, on utilise template0 à la place de template1 comme modèle. Par exemple :

CREATE DATABASE foo WITH TEMPLATE template0;

pg_dump souffre quelques limitations :

  • Lorsqu'une sauvegarde des seules données est sélectionnée et que l'option --disable-triggers est utilisée, pg_dump engendre des commandes de désactivation des déclencheurs sur les tables utilisateur avant l'insertion des données et des commandes de réactivation après l'insertion. Si la restauration est interrompue, il se peut que les catalogues systèmes conservent cette position.

Les fichiers d'une archive tar sont limités à une taille inférieure à 8 Go. (C'est une limitation inhérente au format des fichiers tar.) Ce format ne peut donc pas être utilisé si la représentation textuelle d'une table dépasse cette taille. La taille totale d'une archive tar et de tout autre format de sortie n'est pas limitée, sauf peut-être par le système d'exploitation.

Le fichier de sauvegarde engendré par pg_dump ne contient pas les statistiques utilisées par l'optimiseur pour la planification des requêtes. Il est donc conseillé, pour assurer des performances correctes, de lancer ANALYZE après la restauration d'une sauvegarde.

pg_dump est utilisé pour transférer des données vers les nouvelles versions de PostgreSQL™. De ce fait, le résultat de pg_dump peut être chargé dans des bases de données PostgreSQL™ de versions supérieures. Ce résultat peut aussi être lu par des serveurs PostgreSQL™ plus anciens. Néanmoins, pg_dump ne peut généralement pas lire des bases de données plus récentes ou produire une sauvegarde qui puisse être chargée par des versions antérieures. Pour cela, une édition manuelle de la sauvegarde peut se révéler nécessaire.

Exemples

Pour sauvegarder une base appelée ma_base dans un script SQL :

$ pg_dump ma_base > base.sql

Pour charger ce script dans une base nouvellement créée et nommée nouvelle_base:

$ psql -d nouvelle_base -f base.sql

Pour sauvegarder une base dans un fichier au format personnalisé :

$ pg_dump -Fc ma_base > base.dump

Pour charger un fichier d'archive dans une nouvelle base nommée nouvelle_base :

$ pg_restore -d nouvelle_base base.dump

Pour sauvegarder la table nommée mytab :

$ pg_dump -t ma_table ma_base > base.sql

Pour sauvegarder toutes les tables du schéma detroit et dont le nom commence par emp sauf la table nommée traces_employes :

$ pg_dump -t 'detroit.emp*' -T detroit.traces_employes ma_base > base.sql

Pour sauvegarder tous les schémas dont le nom commence avec est ou ouest et termine avec gsm, en excluant les schémas dont le nom contient le mot test :

$ pg_dump -n 'est*gsm' -n 'ouest*gsm' -N '*test*' ma_base > base.sql

Idem mais en utilisant des expressions rationnelles dans les options :

$ pg_dump -n '(est|ouest)*gsm' -N '*test*' ma_base > base.sql

Pour sauvegarder tous les objets de la base sauf les tables dont le nom commence par ts_ :

$ pg_dump -T 'ts_*' ma_base > base.sql

Pour indiquer un nom qui comporte des majuscules dans les options -t et assimilées, vous avez besoin d'ajouter des guillemets doubles ; sinon le nom sera converti en minuscule (voirModèles). Les guillemets doubles sont interprétés par le shell, donc vous devez les placer entre guillemets. Du coup, pour sauvegarder une seule table dont le nom comporte des majuscules, vous devez utiliser une commande du style :

$ pg_dump -t '"NomAMajuscule"' ma_base > ma_base.sql

Historique

L'outil pg_dump est apparu à l'oigine dans Postgres95 version 0.02. Les formats de sortie non textuels ont été introduits dans la version 7.1 de PostgreSQL™.

Voir aussi

pg_dumpall(1), pg_restore(1), psql(1)