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

pg_dump

pg_dump — exporter une base de données PostgreSQL sous forme de script SQL ou dans d'autres formats

Synopsis

pg_dump [option_connexion...] [option...] [nom_base]

Description

pg_dump est un outil d'export d'une base de données PostgreSQL. Les exports réalisés sont cohérents, 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). Notez toutefois que, sauf dans des cas simples, pg_dump n'est généralement pas le choix le plus adapté pour effectuer des sauvegardes régulières de bases de données en production. Consultez Chapitre 25 pour plus d'informations à ce sujet.

pg_dump n'exporte qu'une seule base de données. Pour exporter une instance complète, ou pour exporter les objets globaux communs à toutes les bases de données d'une même instance (tels que les rôles et les tablespaces), utilisez pg_dumpall.

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 se trouvait au moment de l'export. La restauration s'effectue en exécutant ces scripts avec psql. Ces scripts permettent de reconstruire la base de données sur d'autres machines et d'autres architectures, et même, moyennant quelques modifications, sur d'autres systèmes de gestion de bases de données SQL.

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

Utilisé avec l'un des formats de fichier d'archive et combiné avec pg_restore, pg_dump fournit un mécanisme d'archivage et de transfert flexible. pg_dump peut être utilisé pour exporter une base de données dans son intégralité ; pg_restore peut alors servir à examiner l'archive et/ou à sélectionner les parties de la base de données à restaurer. Les formats de sortie les plus flexibles sont le format « custom » (-Fc) et le format « directory » (-Fd). Ils permettent de sélectionner et de réorganiser tous les éléments archivés, prennent en charge la restauration en parallèle, et sont compressés par défaut. Le format « directory » est aussi le seul format à permettre les exports parallélisés.

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 en ligne de commande suivantes contrôlent le contenu et le format de la sortie.

nom_base

Le nom de la base de données à exporter. Si ce paramètre n'est pas précisé, la variable d'environnement PGDATABASE est utilisée. Si celle-ci n'est pas définie, le nom d'utilisateur spécifié pour la connexion est utilisé.

-a
--data-only

Seules les données sont exportées, et non le schéma (définitions des données) ni les statistiques. Les données des tables, les Large Objects, et les valeurs des séquences sont exportés.

Cette option est similaire à --section=data mais, pour des raisons historiques, elle n'est pas identique.

-b
--large-objects
--blobs (obsolète)

Inclut les « Large Objects » dans l'export. C'est le comportement par défaut, sauf si une des options suivantes est ajoutée : --schema, --table, --schema-only, --statistics-only ou --no-data. L'option -b n'est de ce fait utile que pour ajouter des Large Objects aux sauvegardes pour lesquelles un schéma particulier ou une table particulière a été demandée. Notez que les Large Objects sont considérés comme des données et, de ce fait, seront inclus si --data-only est utilisé, mais pas quand --schema-only ou --statistics-only l'est.

-B
--no-large-objects
--no-blobs (obsolète)

Exclut les « Large Objects » de l'export.

Lorsque les options -b et -B sont toutes deux spécifiées, le comportement est d'inclure les « Large Objects » lors de l'export des données. Voir la documentation de -b pour plus de détails.

-c
--clean

Les commandes de suppression (DROP) des objets de la base sont écrites avant les commandes de création. Cette option est utile quand la restauration doit écraser une base existante. Si certains objets n'existent pas dans la base de destination, des messages d'erreur, à ignorer, seront renvoyés lors de la restauration sauf si l'option --if-exists est aussi précisée.

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

-C
--create

La sortie commence par une commande de création de la base de données, suivie d'une connexion à cette base nouvellement créée. Avec un tel script, peu importe la base à laquelle on est connecté avant l'exécution du script. Si --clean est également spécifiée, le script supprime puis recrée la base de données cible avant de s'y reconnecter.

Avec --create, la sortie inclut aussi le commentaire associé à la base de données, s'il existe, et toute variable de configuration spécifique à cette base de données, configurée via les commandes ALTER DATABASE ... SET ... et ALTER ROLE ... IN DATABASE ... SET ... la mentionnant. Les droits d'accès à la base elle-même sont aussi exportés, sauf si --no-acl est spécifié.

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

-e motif
--extension=motif

Exporte uniquement les extensions correspondantes au motif spécifié. Sans cette option, toutes les extensions non système de la base de données cible seront exportées. Plusieurs extensions peuvent être sélectionnées en répétant le paramètre -e. Le motif est interprété selon les mêmes règles que les commandes \d de psql (voir Motifs), ce qui permet ainsi de sélectionner plusieurs extensions à l'aide de jokers. Dans ce cas, prenez soin d'encadrer le motif de guillemets simples si nécessaire, pour empêcher le shell de les interpréter.

Toute table de configuration enregistrée via pg_extension_config_dump est incluse dans l'export si son extension est spécifiée dans --extension.

Note

Quand -e est spécifié, pg_dump ne tente pas d'exporter les autres objets dont l'extension pourrait dépendre. Il n'est donc pas garanti qu'un export limité à une extension spécifique puisse être restauré avec succès dans une base de données vide.

-E codage
--encoding=codage

L'export est créé dans l'encodage indiqué. Par défaut, l'export utilise celui de la base de données. Le même résultat peut être obtenu en définissant la variable d'environnement PGCLIENTENCODING avec l'encodage souhaité. Les encodages supportés sont décrits dans Section 23.3.1.

-f fichier
--file=fichier

La sortie est redirigée vers le fichier spécifié. Ce paramètre peut être omis pour les formats de sortie basés sur des fichiers, auquel cas la sortie standard sera utilisée. Par contre, il doit être précisé pour le format 'directory' (répertoire), où il désigne le répertoire cible plutôt qu'un fichier. Dans ce cas, le répertoire est créé par pg_dump et ne doit pas exister au préalable.

-F format
--format=format

Sélectionne le format de la sortie. format peut être l'un des éléments suivants :

p

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

c

Archive personnalisée utilisable par pg_restore. Avec le format de sortie répertoire, c'est le format le plus souple, car il permet la sélection manuelle et la réorganisation des objets archivés au moment de la restauration. Ce format est aussi compressé par défaut.

d
directory

Archive au format répertoire utilisable par pg_restore. Cela créera un répertoire avec un fichier pour chaque table et Large Object exporté, ainsi qu'un fichier appelé Table of Contents (table des matières) décrivant les objets exportés dans un format machine que pg_restore peut lire. Une archive au format répertoire peut être manipulée avec des outils Unix standard ; par exemple, les fichiers d'une archive non-compressée peuvent être compressés avec les outils gzip, lz4 ou zstd. Ce format est compressé par défaut en utilisant gzip et supporte aussi les exports parallélisés.

t

Archive tar utilisable par pg_restore. Le format tar est compatible avec le format répertoire ; l'extraction d'une archive au format tar produit une archive au format répertoire valide. Toutefois, le format tar ne supporte pas la compression. Par ailleurs, lors de l'utilisation du format tar, l'ordre de restauration des données des tables ne peut pas être changé au moment de la restauration.

-j njobs
--jobs=njobs

Exécute l'export en parallèle en traitant njobs tables simultanément. Cette option peut réduire le temps nécessaire à l'export, mais elle augmente également la charge sur le serveur de base de données. Cette option n'est utilisable qu'avec le format de sortie répertoire, car c'est le seul format permettant à plusieurs processus d'écrire leurs données en parallèle.

pg_dump ouvrira njobs + 1 connexions à la base de données. Assurez-vous donc que la valeur de max_connections est configurée suffisamment haut pour permettre autant de connexions.

Réclamer des verrous exclusifs sur les objets de la base pendant un export en parallèle peut provoquer l'échec de l'export. Cela s'explique par le fait que le processus principal de pg_dump réclame des verrous partagés (ACCESS SHARE) sur les objets que les processus fils vont traiter plus tard, afin de s'assurer que personne ne les supprime pendant l'export. Si un autre client demande ensuite un verrou exclusif sur une table, ce verrou ne pourra pas être accordé immédiatement et sera mis en attente jusqu'à ce que le verrou partagé du processus principal soit libéré. Par conséquent, tout autre accès à la table ne sera pas non plus accepté et sera mis en attente, derrière la demande de verrou exclusif. Cela inclut le processus fils essayant d'exporter la table. Sans autre précaution, cela résulterait donc en un classique « deadlock ». Pour détecter ce conflit, le processus fils de pg_dump demande à son tour un verrou partagé, en utilisant l'option NOWAIT. Si ce verrou ne peut pas être obtenu, cela signifie qu'un autre client a probablement demandé un verrou exclusif entre-temps, et il n'est alors plus possible de poursuivre l'export. Dans ce cas, pg_dump n'a pas d'autre choix que d'interrompre l'export.

Pour effectuer un export en parallèle, le serveur de base de données doit supporter les instantanés (« snapshots ») synchronisées. Cette fonctionnalité a été introduite avec PostgreSQL version 9.2 pour les serveurs primaires et version 10 pour les serveurs secondaires. Grâce à cette fonctionnalité, les clients peuvent s'assurer qu'ils accèdent au même jeu de données, même s'ils utilisent des connexions différentes. pg_dump -j utilise plusieurs connexions à la base de données ; une pour le processus principal, et une autre pour chaque processus fils. Sans la fonctionnalité d'instantanés synchronisées, rien ne garantit que les différents processus voient les mêmes données via leurs connexions respectives, ce qui pourrait conduire à un export incohérent.

-n motif
--schema=motif

Exporte uniquement les schémas correspondants au motif spécifié ; cela inclut à la fois le schéma lui-même et tous les objets qu'il contient. Quand cette option n'est pas indiquée, tous les schémas non système de la base cible sont exportés. Plusieurs schémas peuvent être indiqués en répétant l'option -n. Le motif est interprété selon les mêmes règles que les commandes \d de psql (voir Motifs), ce qui permet ainsi de sélectionner plusieurs schémas à l'aide de jokers. Dans ce cas, prenez soin d'encadrer le motif de guillemets simples si nécessaire, pour empêcher le shell de les interpréter. Voir Exemples ci-dessous.

Note

Quand -n est spécifié, pg_dump ne tente pas d'exporter les autres objets dont le schéma pourrait dépendre. Il n'est donc pas garanti qu'un export limité à un schéma spécifique puisse être restauré avec succès dans une base de données vide.

Note

Les objets qui ne font pas partie du schéma comme les Large Objects ne sont pas exportés quand -n est spécifié. Ils peuvent être rajoutés avec l'option --large-objects.

-N motif
--exclude-schema=motif

N'exporte aucun schéma correspondant au motif spécifié. Le motif est interprété selon les même règles que -n. -N peut aussi être répété pour exclure des schémas correspondants à différents motifs.

Lorsque les options -n et -N sont toutes deux spécifiées, seuls les schémas correspondants à au moins une option -n mais à aucune option -N sont exportés. Si -N est utilisé sans -n, alors les schémas correspondants à -N sont simplement exclus de l'export normal.

-O
--no-owner

N'émet pas les commandes destinées à définir les propriétaires des objets conformément à ceux de la base de données d'origine. Par défaut, pg_dump génère des instructions ALTER OWNER ou SET SESSION AUTHORIZATION pour rétablir la propriété des objets créés. Ces instructions échoueront lors de l'exécution du script, sauf si celui-ci est lancé par un superutilisateur ou par l'utilisateur propriétaire de tous les objets. 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 précisée à l'appel de pg_restore.

-R
--no-reconnect

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

-s
--schema-only

Exporte uniquement les définitions des objets (le schéma), sans les données ni les statistiques.

Cette option ne peut pas être utilisée avec --data-only ni avec --statistics-only. Elle est similaire à --section=pre-data --section=post-data, mais pour des raisons historiques, elle n'est pas strictement identique.

(Ne pas la confondre avec l'option --schema qui utilise le mot « schema » dans un contexte différent.)

Pour exclure les données de certaines tables seulement, voir --exclude-table-data.

-S nom_utilisateur
--superuser=nom_utilisateur

Spécifie le nom de l'utilisateur superutilisateur à utiliser lors de la désactivation des triggers. 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 généré en tant que superutilisateur.)

-t motif
--table=motif

Exporte uniquement les tables dont le nom correspond au motif. Plusieurs tables sont sélectionnables en utilisant plusieurs fois l'option -t. Le motif est interprété selon les mêmes règles que les commandes \d de psql (voir Motifs), ce qui permet ainsi de sélectionner plusieurs tables à l'aide de jokers. Dans ce cas, prenez soin d'encadrer le motif de guillemets simples si nécessaire, pour empêcher le shell de les interpréter. Voir Exemples ci-dessous.

En plus des tables, cette option permet également d'exporter la définition des vues, vues matérialisées, tables externes et séquences correspondantes au motif. Elle n'exporte pas le contenu des vues ou des vues matérialisées, et le contenu des tables externes n'est exporté que si le serveur distant correspondant est spécifié avec l'option --include-foreign-data.

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

Note

Quand -t est spécifié, pg_dump ne tente pas d'exporter les autres objets dont la table pourrait dépendre. Il n'est donc pas garanti qu'un export limité à une table spécifique puisse être restauré avec succès dans une base de données vide.

-T motif
--exclude-table=motif

N'exporte aucune table correspondante au motif spécifié. Le motif est interprété selon les mêmes règles que pour l'option -t. L'option -T peut être répétée pour exclure plusieurs tables correspondantes à différents motifs.

Lorsque les options -t et -T sont toutes deux spécifiées, seuls les tables correspondantes à au moins une option -t mais à aucune option -T sont exportées. Si -T est utilisé sans -t, alors les tables correspondantes à -N sont simplement exclues de l'export normal.

-v
--verbose

Mode verbeux. pg_dump inclut des commentaires détaillés sur les objets et les heures de début et de fin dans le fichier d'export. Des messages de progression sont également affichés sur la sortie d'erreur standard. Répéter l'option entraîne l'apparition de messages de débogage supplémentaires sur la sortie d'erreur standard.

-V
--version

Affiche la version de pg_dump puis quitte.

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

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

-Z niveau
-Z method[:detail]
--compress=level
--compress=method[:detail]

Spécifie la méthode de compression et/ou le niveau de compression à utiliser. La méthode de compression peut être gzip, lz4, zstd, ou none pour désactiver la compression. Des détails pour la compression peuvent être précisés. Si c'est un entier, cela correspond au niveau de compression. Autrement, il s'agit d'une liste d'éléments séparés par des virgules pouvant prendre la forme clé ou clé=valeur. Actuellement, les mots clés supportés sont level et long.

Si aucun niveau de compression n'est spécifié, le niveau de compression par défaut sera utilisé. Si seul un niveau est spécifié sans mentionner d'algorithme, la compression gzip sera utilisée si le niveau est supérieur à 0, et aucune compression ne sera utilisée si le niveau est 0.

Pour les formats « custom » et « directory », ce paramètre spécifie la compression des segments de données de table individuellement, et par défaut la compression se fait à l'aide de gzip à un niveau modéré. Pour le format texte simple, la définition d'un niveau de compression non nul entraîne la compression de l'ensemble du fichier de sortie, comme s'il était passé par gzip, lz4, ou zstd ; mais par défaut, il n'y a pas de compression. Avec la compression zstd, le mode long peut améliorer le taux de compression, au prix d'une utilisation accrue de la mémoire.

Le format d'archive tar ne supporte pas la compression.

--binary-upgrade

Cette option est destinée à être utilisée par les utilitaires de mise à jour en ligne. Son utilisation dans d'autres buts n'est ni recommandée ni supportée. Le comportement de cette option peut changer dans les futures versions sans avertissement.

--column-inserts
--attribute-inserts

Extrait les données en tant que commandes INSERT avec des noms de colonnes explicites (INSERT INTO table (colonne, ...) VALUES ...). Ceci rendra la restauration très lente ; c'est surtout utile pour créer des exports qui puissent être chargés dans des bases de données autres que PostgreSQL. Toute erreur lors du rechargement causera la perte uniquement des lignes faisant partie du INSERT problématique, et pas du contenu complet de la table.

--disable-dollar-quoting

Cette option désactive l'utilisation du caractère dollar comme délimiteur de corps de fonctions, et force leur délimitation en tant que chaîne SQL standard.

--disable-triggers

Cette option ne s'applique que dans le cas d'un export incluant les données mais pas la structure. Ceci demande à pg_dump d'inclure des commandes pour désactiver temporairement les triggers sur les tables cibles pendant que les données sont rechargées. Utilisez cette option si, sur vos tables, vous avez des contraintes d'intégrité ou des triggers que vous ne voulez pas invoquer pendant le rechargement.

À l'heure actuelle, les commandes émises par --disable-triggers doivent être exécutées en tant que superutilisateur. Par conséquent, vous devez aussi spécifier un nom de superutilisateur avec -S, ou préférablement faire attention à lancer le script généré en tant que superutilisateur.

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

--enable-row-security

Cette option est seulement utile lors de l'export du contenu d'une table disposant du mode de sécurité niveau ligne. Par défaut, pg_dump configurera row_security à off pour s'assurer que toutes les données de la table soient exportées. Si l'utilisateur n'a pas les droits suffisant pour contourner la sécurité niveau ligne, alors une erreur est renvoyée. Ce paramètre force pg_dump à configurer row_security à on, permettant à l'utilisateur d'exporter uniquement les parties de la table auxquelles il a accès.

Notez que si vous utilisez actuellement cette option, vous souhaiterez probablement que l'export soit effectué au format INSERT car l'instruction COPY FROM utilisée lors de la restauration ne prend pas en charge la sécurité niveau ligne.

--exclude-extension=motif

N'exporte pas les extensions correspondantes au motif spécifié. Le motif est interprété selon les mêmes règles que pour l'option -e. --exclude-extension peut être utilisé plus d'une fois pour exclure des extensions dont le nom correspond à des motifs différents.

Lorsque les options -e et --exclude-extension sont toutes deux spécifiées, seules les extensions correspondantes à au moins une option -e mais à aucune option --exclude-extension sont exportées. Si --exclude-extension est utilisé sans -e, les extensions correspondantes sont simplement exclues de l'export normal.

--exclude-table-and-children=motif

Cette option fonctionne de la même manière que l'option -T/--exclude-table, à l'exception qu'elle exclut également les partitions et les tables enfants des tables dont le nom correspond au motif.

--exclude-table-data=motif

N'exporte pas les données des tables correspondantes au motif spécifié. Le motif est interprété selon les même règles que pour l'option -t. --exclude-table-data peut être répété pour exclure les données de tables dont le nom correspond à des motifs différents. Cette option est utile quand vous avez besoin de la définition d'une table particulière mais pas de ses données.

Pour exclure les données de toutes les tables de la base, voir --schema-only ou --statistics-only.

--exclude-table-data-and-children=motif

Cette option fonctionne de la même manière que l'option --exclude-table-data, à la différence qu'elle exclut également les données des partitions et des tables enfants des tables dont le nom correspond au motif.

--extra-float-digits=nchiffres

Utilise la valeur spécifiée pour extra_float_digits lors de l'export de valeurs en virgule flottante, au lieu de la précision maximale disponible. Cette option ne doit pas être utilisée pour des exports de routine effectués à des fins de sauvegarde.

--filter=filename

Spécifie un fichier à partir duquel lire les motifs des objets à inclure ou à exclure de l'export. Les motifs sont interprétés selon les mêmes règles que pour les options correspondantes : -t/--table, --table-and-children, -T/--exclude-table et --exclude-table-and-children pour les tables, -n/--schema et -N/--exclude-schema pour les schémas, --include-foreign-data pour les données des serveurs distants, --exclude-table-data et --exclude-table-data-and-children pour les données des tables, et -e/--extension ainsi que --exclude-extension pour les extensions. Pour lire depuis STDIN, utilisez - comme nom de fichier. L'option --filter peut être utilisée en complément des options ci-dessus pour inclure ou exclure des objets, et peut également être spécifiée plusieurs fois afin d'utiliser plusieurs fichiers de filtre.

Le fichier contient un motif d'objet par ligne, selon le format suivant :

{ include | exclude } { extension | foreign_data | table | table_and_children | table_data | table_data_and_children | schema } PATTERN

Le premier mot clé indique si les objets correspondants au motif doivent être inclus ou exclus. Le second mot clé précise le type d'objet à filtrer à l'aide du motif :

  • extension : extensions. Fonctionne comme les options -e/--extension et --exclude-extension.

  • foreign_data : données sur des serveurs distants. Fonctionne comme l'option --include-foreign-data. Ce mot clé ne peut être utilisé qu'avec le mot clé include.

  • table : tables. Fonctionne comme les options -t/--table et -T/--exclude-table.

  • table_and_children : tables, incluant les partitions ou les tables enfants par héritage. Fonctionne comme les options --table-and-children et --exclude-table-and-children.

  • table_data: données des tables correspondantes au pattern. Fonctionne comme l'option --exclude-table-data. Ce mot clé ne peut être utilisé qu'avec le mot clé exclude.

  • table_data_and_children : données des tables correspondantes au pattern, ainsi que les partitions ou les tables enfants par héritage de la table sélectionnée. Fonctionne comme l'option --exclude-table-data-and-children. Ce mot clé ne peut être utilisé qu'avec le mot clé exclude.

  • schema : schémas. Fonctionne comme les options -n/--schema et -N/--exclude-schema.

Les lignes commençant par # sont considérées comme des commentaires et sont ignorées. Des commentaires peuvent aussi être placés à la suite d'une ligne contenant un motif d'objet. Les lignes vides sont elles-aussi ignorées. Voir Motifs pour savoir comment réaliser l'échappement dans les motifs.

Les fichiers d'exemple sont listés ci-dessous dans la section Exemples.

--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 renvoyées sinon. Cette option n'est pas valide sauf si --clean est aussi indiquée.

--include-foreign-data=foreignserver

Exporte les données de toute table externe dont le serveur distant correspond à foreignserver. Plusieurs serveurs distants peuvent être sélectionnés en répétant l'option --include-foreign-data. De plus, le paramètre foreignserver est interprété comme un motif selon les mêmes règles que celles utilisées par les commandes \d de psql (voir Motifs), ce qui permet ainsi de sélectionner plusieurs serveurs distants en utilisant des caractères joker dans le motif. Lors de l'utilisation des jokers, prenez soin d'encadrer le motif de guillemets simples si nécessaire, pour empêcher le shell de les interpréter ; voir Exemples ci-dessous. Le seule exception est qu'un motif vide n'est pas autorisé.

Note

L'utilisation de jokers dans --include-foreign-data pourrait donner accès à des serveurs distants inattendus. De plus, pour utiliser cette option en toute sécurité, assurez-vous que le serveur ciblé a un propriétaire de confiance.

Note

Quand --include-foreign-data est précisé, pg_dump ne vérifie pas que la table externe est accessible en écriture. De ce fait, il n'y a pas de garantie que l'export des données de la table distante pourra être restauré sans erreurs.

--inserts

Extrait les données en tant que commandes INSERT (plutôt que COPY). Ceci rendra la restauration très lente ; c'est surtout utile pour créer des exports qui puissent être chargés dans des bases de données autres que PostgreSQL. Toute erreur lors du rechargement causera uniquement la perte des lignes faisant partie du INSERT problématique, et pas du contenu complet de de la table. Notez que la restauration pourrait échouer si vous avez modifié l'ordre des colonnes. L'option --column-inserts protège contre les changements d'ordre des colonnes au prix de lenteurs supplémentaires.

--load-via-partition-root

Lors de l'export de données d'une partition, les instructions COPY ou INSERT cibleront la racine du partitionnement à laquelle elle appartient, plutôt que la partition elle-même. Cela entraîne une réévaluation de la partition appropriée pour chaque ligne au moment du chargement. Ceci peut être utile lors de la restauration sur un serveur où les lignes ne seraient pas forcément réparties dans les mêmes partitions que sur le serveur d'origine. Cela peut se produire, par exemple, si la colonne de partitionnement est de type text et que les deux systèmes ont des définitions différentes du collationnement utilisé pour trier cette colonne.

--lock-wait-timeout=expiration

Ne pas attendre indéfiniment l'acquisition de verrous partagés sur les tables au démarrage de l'export. L'opération échoue s'il est impossible de verrouiller une table dans le délai spécifié par le paramètre timeout. Le délai peut être exprimé dans l'un des formats acceptés par la commande SET statement_timeout. Les formats autorisés dépendent de la version du serveur sur laquelle l'export est effectué, mais une valeur entière en millisecondes est acceptée par toutes les versions.

--no-comments

Ne pas exporter les instructions COMMENT.

--no-data

Ne pas exporter les données.

--no-policies

Ne pas exporter les politiques de sécurité niveau ligne.

--no-publications

Ne pas exporter les publications.

--no-schema

Ne pas exporter les schémas (les définitions des données).

--no-security-labels

Ne pas exporter les labels de sécurité.

--no-statistics

Ne pas exporter les statistiques.

--no-subscriptions

Ne pas exporter les souscriptions.

--no-sync

Par défaut, pg_dump attend que tous les fichiers soient correctement écrits sur disque. Cette option permet à pg_dump de rendre la main immédiatement, sans attendre, ce qui est plus rapide, mais peut entraîner une corruption de l'export en cas d'arrêt brutal du système d'exploitation. De manière générale, cette option est utile pour les tests, mais ne doit pas être utilisée dans un environnement de production.

--no-table-access-method

Ne pas générer de commandes pour sélectionner les méthodes d'accès aux tables. Avec cette option, tous les objets seront créés en utilisant la méthode d'accès par défaut au moment de la restauration.

Cette option est ignorée lors de la génération d'un fichier dans un format d'archive (non texte). Pour les formats d'archive, vous pouvez spécifier cette option lors de l'appel à pg_restore.

--no-tablespaces

Ne pas générer de commandes pour sélectionner les tablespaces. Avec cette option, tous les objets seront créés dans le tablespace par défaut au moment de la restauration.

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

--no-toast-compression

Ne pas générer d'instructions pour définir les méthodes de compression TOAST. Avec cette option, toutes les colonnes seront restaurées avec la méthode de compression par défaut en vigueur au moment de la restauration.

--no-unlogged-table-data

Ne pas exporter le contenu des tables et séquences non journalisées (unlogged). Cette option n'a aucun effet sur l'export des définitions des tables et des séquences (le schéma) ; elle supprime uniquement l'export des données. Les données des tables et séquences non journalisées sont toujours exclues lors d'un export depuis un serveur en standby.

--on-conflict-do-nothing

Ajouter ON CONFLICT DO NOTHING aux commandes INSERT. Cette option n'est seulement valide que si --inserts, --column-inserts ou --rows-per-insert sont aussi spécifiés.

--quote-all-identifiers

Forcer la mise entre guillemets de tous les identifiants. Cette option est recommandée lorsqu'on exporte une base de données depuis un serveur dont la version majeure de PostgreSQL diffère de celle de pg_dump, ou lorsque l'export est destiné à être rechargé dans une version majeure différente. Par défaut, pg_dump ne met entre guillemets que les identifiants correspondants à des mots réservés dans sa propre version majeure. Cela peut parfois entraîner des problèmes de compatibilité avec des serveurs de versions différentes, dont la liste des mots réservés peut légèrement varier. L'utilisation de l'option --quote-all-identifiers permet d'éviter ce type de problème, au prix d'un script d'export moins lisible.

--rows-per-insert=nlignes

Exporter les données sous la forme de commandes INSERT (au lieu de COPY). Contrôle le nombre maximum de lignes par commande INSERT. La valeur indiquée doit être strictement positive. Toute erreur lors du rechargement provoquera uniquement la perte des lignes faisant partie du INSERT problématique, et non pas le contenu complet de la table.

--section=nom_section

N'exporter que la section spécifiée. Le nom de la section peut être pre-data, data ou post-data. Cette option peut être répétée pour sélectionner plusieurs sections. Par défaut, toutes les sections sont exportées.

La section data contient les données réelles des tables, le contenu des Large Objects, les valeurs des séquences et les statistiques associées aux tables, vues matérialisées et tables externes. Les éléments de la section post-data incluent la définition des index, triggers, règles, statistiques sur les index et les contraintes (autres que les contraintes de vérification validées). Les éléments de la section pre-data regroupent tous les autres éléments de définition de données.

--sequence-data

Inclure les données des séquences dans l'export. Ce comportement est activé par défaut, sauf si l'on utilise les options --no-data, --schema-only ou --statistics-only.

--serializable-deferrable

Utiliser une transaction sérialisable pour l'export, afin de garantir que l'instantané utilisé soit cohérent avec les états futurs de la base. Cela est réalisé en attendant un point dans le flux des transactions où aucune anomalie ne peut être présente, de sorte qu'il n'y ait aucun risque que l'export échoue ou provoque l'annulation d'une autre transaction pour erreur de sérialisation. Voir Chapitre 13 pour davantage d'informations sur l'isolation des transactions et le contrôle d'accès concurrent.

Cette option n'est pas utile pour un export uniquement destiné à une récupération après sinistre. Elle peut en revanche être utile si l'export est utilisé pour charger une copie de la base pour du reporting ou toute autre activité en lecture seule, pendant que la base d'origine continue à être mise à jour. Sans cela, l'export serait dans un état incohérent avec l'exécution en parallèle des transactions qui auraient été validées entre temps. Par exemple, si un traitement de type batch est exécuté, un batch pourrait apparaître comme terminé dans l'export sans que tous les éléments qu'il contient y figurent.

Cette option n'aura aucun effet si aucune transaction en lecture-écriture n'est active au lancement de pg_dump. Si des transactions en lecture-écriture sont actives, le démarrage de l'export peut être retardé pour une durée indéterminée. Une fois l'export lancé, les performances sont identiques, que l'option soit activée ou non.

--snapshot=nom_snapshot

Utiliser l'instantané synchronisé spécifié lors de l'export de la base de données (voir Tableau 9.100 pour plus de détails).

Cette option est utile lorsqu'il est nécessaire de synchroniser l'export avec un slot de réplication logique (voir Chapitre 47) ou avec une session concurrente.

Dans le cas d'un export en parallèle, le nom d'instantané défini par cette option est utilisé au lieu de créer un nouvel instantané.

--statistics-only

Extraire uniquement les statistiques, sans le schéma (définitions des données) ni les données. Les statistiques des tables, des vues matérialisées et des index sont exportées.

--strict-names

Exiger que chaque motif d'extension (-e/ --extension), de schéma (-n/--schema) ou de table (-t/--table) corresponde à au moins une extension, un schéma ou une table dans la base de données à exporter. Cela s'applique également aux filtres utilisés avec --filter. Notez que si aucun des motifs d'extension, de schéma ou de table ne trouve de correspondance, pg_dump renverra une erreur même sans --strict-names.

Cette option n'a pas d'effet sur --exclude-extension, -N / --exclude-schema, -T / --exclude_table ou --exclude-table-date. Un motif d'exclusion ne correspondant à aucun objet n'est pas considéré comme une erreur.

--sync-method=method

Lorsqu'elle est définie à fsync, qui est la valeur par défaut, pg_dump --format=directory va ouvrir récursivement tous les fichiers du répertoire d'archives et les synchroniser sur disque.

Sur Linux, syncfs peut être utilisé à la place pour demander au système d'exploitation de synchroniser l'ensemble du système de fichiers contenant le répertoire d'archives. Voir recovery_init_sync_method pour les précautions à connaître lors de l'utilisation de syncfs.

Cette option n'a aucun effet si --no-sync est utilisé ou si --format n'est pas défini à directory.

--table-and-children=motif

Cette option fonctionne de la même manière que l'option -t/--table, à la différence qu'elle inclut également les partitions et les tables enfants des tables dont le nom correspond au motif.

--use-set-session-authorization

Émettre des commandes SQL standard SET SESSION AUTHORIZATION à la place de commandes ALTER OWNER pour définir la propriété des objets. Ceci rend l'extraction davantage compatible avec les standards, mais, suivant l'historique des objets exportés, la restauration pourrait ne pas fonctionner correctement. Par ailleurs, une extraction utilisant SET SESSION AUTHORIZATION nécessitera certainement des droits superutilisateur pour être restaurée correctement, alors que ALTER OWNER nécessite des droits moins élevés.

--with-data

Exporter les données. C'est le comportement par défaut.

--with-schema

Exporter le schéma (définitions des données). C'est le comportement par défaut.

--with-statistics

Exporter les statistiques. C'est le comportement par défaut.

-?
--help

Afficher l'aide sur les arguments en ligne de commande de pg_dump, puis quitter.

Les options de ligne de commande suivantes contrôlent les paramètres de connexion :

-d nom_base
--dbname=nom_base

Indique le nom de la base de données à laquelle se connecter. Ceci revient à spécifier nom_base comme premier argument non optionnel sur la ligne de commande. Ce nom peut être remplacé par une chaîne de connexion. Dans ce cas, les paramètres de la chaîne de connexion surchargeront toute option de ligne de commande conflictuelle.

-h hôte
--host hôte

Indique 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

Indique le port TCP ou le suffixe du fichier socket de domaine Unix local 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 nomutilisateur
--username nomutilisateur

Indique 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_dump à demander un mot de passe avant la connexion à une base de données.

Cette option n'est jamais indispensable car pg_dump demande automatiquement un mot de passe si le serveur exige une authentification par mot de passe. Néanmoins, pg_dump 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=nomrole

Spécifie un rôle à utiliser pour réaliser l'export. Avec cette option, pg_dump émet une commande SET ROLE nomrole après s'être connecté à la base. C'est utile quand l'utilisateur authentifié (indiqué par -U) n'a pas les droits dont pg_dump 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 que les exports soient faits sans violer cette politique.

Environnement

PGDATABASE
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

pg_dump exécute intrinsèquement des instructions SELECT. Si des problèmes apparaissent à l'exécution de pg_dump, psql peut être utilisé pour s'assurer qu'il est possible 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'appliquent.

L'activité générée par pg_dump dans la base de données est normalement collectée par le système de statistiques cumulées. Si c'est gênant, vous pouvez positionner le paramètre track_counts à false via PGOPTIONS ou la commande ALTER USER.

Notes

Si des ajouts locaux à la base template1 ont été effectués, 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;
   

Lorsqu'une extraction sans schéma est demandée et que l'option --disable-triggers est utilisée, pg_dump émet des commandes pour désactiver les triggers sur les tables utilisateur avant l'insertion des données, puis des commandes pour les réactiver après l'insertion. Si la restauration est interrompue en cours d'exécution, les catalogues système peuvent se retrouver dans un état incohérent.

Si l'option --with-statistics est spécifiée, pg_dump inclura la plupart des statistiques de l'optimiseur dans le fichier d'export généré. Cependant, certaines statistiques peuvent ne pas être incluses, comme celles créées explicitement avec CREATE STATISTICS ou des statistiques personnalisées ajoutées par une extension. Il peut donc être utile d'exécuter ANALYZE après la restauration d'un export afin de garantir des performances optimales. Voir Section 24.1.3 et Section 24.1.6 pour plus d'informations.

Parce que pg_dump est utilisé pour transférer des données vers de nouvelles versions de PostgreSQL, sa sortie doit pouvoir être chargée dans des serveurs PostgreSQL plus récents que la version de pg_dump elle-même. pg_dump peut également extraire des données de serveurs PostgreSQL plus anciens que sa propre version. (Actuellement, les versions serveur prises en charge remontent jusqu'à la 9.2.) En revanche, pg_dump ne peut pas extraire de données depuis un serveur PostgreSQL dont la version majeure est plus récente que la sienne ; il refusera même d'essayer, afin d'éviter de produire un export invalide. De plus, rien ne garantit que la sortie de pg_dump puisse être chargée dans un serveur d'une version majeure plus ancienne   -- même si les données ont été extraites depuis une telle version. Restaurer un export dans un serveur de version plus ancienne pourrait nécessiter de modifier manuellement le fichier pour retirer les syntaxes non reconnues par cette version. L'utilisation de l'option --quote-all-identifiers est recommandée lors de l'utilisation de versions différentes, afin d'éviter certains problèmes liés aux différences entre les listes de mots réservés d'une version à l'autre de PostgreSQL.

Lors de l'export des souscriptions de réplication logique, pg_dump générera des commandes CREATE SUBSCRIPTION utilisant l'option connect = false, afin que la restauration de la souscription n'établisse pas de connexion distante pour créer un slot de réplication ou pour effectuer la copie initiale des tables. De cette façon, l'export peut être restauré sans nécessiter d'accès réseau aux serveurs distants. Il revient alors à l'utilisateur de réactiver les souscriptions de manière appropriée. Si les hôtes concernés ont changé, les informations de connexion devront être mises à jour. Il peut également être pertinent de tronquer les tables cibles avant de lancer une nouvelle copie complète. Si les utilisateurs souhaitent copier les données initiales lors du rafraîchissement, ils doivent créer le slot avec two_phase = false. Après la synchronisation initiale, l'option two_phase sera automatiquement activée si la souscription a été initialement créée avec l'option two_phase = true.

Il est généralement recommandé d'utiliser l'option -X (--no-psqlrc) lors de la restauration d'une base de données à partir d'un script texte généré par pg_dump pour s'assurer d'un traitement propre et empêcher tout conflit potentiel avec des configurations personnalisées de psql.

Exemples

Exporter une base appelée ma_base dans un script SQL :

$ pg_dump ma_base > base.sql
   

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

$ psql -X -d nouvelle_base -f base.sql
   

Exporter une base dans un fichier archive au format personnalisé :

$ pg_dump -Fc ma_base > base.dump
   

Exporter une base de données dans une archive au format répertoire :

$ pg_dump -Fd ma_base -f rep_sauve
   

Exporter une base de données en utilisant le format répertoire et en activant la parallélisation sur cinq processus :

$ pg_dump -Fd ma_base -j 5 -f rep_sauvegarde
   

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

$ pg_restore -d nouvelle_base base.dump
   

Recharger un fichier d'archive dans la même base de données que celle depuis laquelle il a été exporté, en supprimant son contenu actuel :

$ pg_restore -d postgres --clean --create db.dump
   

Exporter la table nommée mytab :

$ pg_dump -t ma_table ma_base > base.sql
   

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

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

Exporter tous les schémas dont le nom commence par est ou ouest et se termine par 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 régulières pour regrouper les options :

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

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

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

Pour spécifier un nom comportant des majuscules dans les options -t et similaires, il faut entourer le nom de guillemets doubles ; sinon, il sera converti en minuscules (voir Motifs). Or, comme les guillemets doubles ont une signification particulière pour le shell, ils doivent à leur tour être échappés. Ainsi, pour extraire une seule table dont le nom comporte des majuscules, il faut utiliser une commande du style :

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

Pour exporter toutes les tables dont le nom commence par matable, à l'exception de la table matable2, créer un fichier filtre.txt comme suit :

include table matable*
exclude table matable2

$ pg_dump --filter=filtre.txt ma_base > ma_base.sql