pg_dump — exporter une base de données PostgreSQL sous forme de script SQL ou dans d'autres formats
pg_dump
[option_connexion
...] [option
...] [nom_base
]
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.
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
.
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.
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.
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.
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
). 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
table
(colonne
,
...) VALUES ...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é.
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.
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.
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).
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
.
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.
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