pg_dumpall — exporter une instance de bases de données PostgreSQL dans un script SQL
pg_dumpall
[option_connexion
...] [option
...]
pg_dumpall est un outil permettant d'exporter l'ensemble des bases de données d'une instance PostgreSQL sous la forme d'un script SQL. Le résultat contient des commandes SQL pouvant être utilisées comme entrée de psql pour restaurer les bases de données. Pour cela, pg_dumpall appelle pg_dump pour chaque base de données de l'instance. pg_dumpall exporte également les objets globaux communs à toutes les bases, à savoir les rôles, les tablespaces, et les droits d'accès sur les paramètres de configuration. (pg_dump n'exporte pas ces objets.)
Puisque pg_dumpall lit les tables de toutes les bases de données, il est généralement nécessaire de disposer des droits de superutilisateur de la base pour produire un export complet. Par ailleurs, il faut également être superutilisateur pour pouvoir exécuter le script généré, notamment afin de créer des rôles et des bases de données.
Le script SQL est écrit sur la sortie standard. Utilisez l'option
-f
/--file
ou les opérateurs shell pour le
rediriger vers un fichier.
pg_dumpall se connecte plusieurs fois au serveur
PostgreSQL (une fois par base de données).
Si l'authentification par mot de passe est utilisée, un mot de passe sera
demandé à chaque connexion. Il est alors pratique de disposer d'un fichier
~/.pgpass
.
Voir Section 32.16 pour plus d'informations.
Restaurer une sauvegarde fait que la destination exécute du code arbitraire. Les sauvegardes et restaurations partielles ne limitent pas cela. S'il n'est pas possible de faire confiance aux superutilisateurs de la source, les requêtes SQL de restauration doivent être inspectées avant d'être exécutées. Notez que le client exécutant la sauvegarde et la restauration n'a pas besoin de faire confiance aux superutilisateurs source et destination.
Les options suivantes en ligne de commande contrôlent le contenu et le format de la sortie.
-a
--data-only
Seules les données sont exportées, et non le schéma (définitions des données) ni les statistiques.
-c
--clean
Émet des commandes SQL DROP
pour supprimer toutes les
bases de données, rôles et tablespaces exportés, avant de les recréer.
Cette option est utile lorsque la restauration doit écraser une instance
existante. Si certains objets n'existent pas dans l'instance de destination,
des messages d'erreur (sans conséquence) seront affichés lors de la
restauration, sauf si l'option --if-exists
est également
spécifiée.
-E encoding
--encoding=encoding
Crée l'export 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é.
-f nomfichier
--file=nomfichier
Envoie la sortie dans le fichier indiqué. Si cette option est omise, la sortie standard est utilisée.
-g
--globals-only
Exporte seulement les objets globaux (rôles et tablespaces), pas les bases de données.
-O
--no-owner
N'émet pas de commandes pour rétablir les propriétaires d'origine des objets.
Par défaut, pg_dumpall génère des instructions
ALTER OWNER
ou SET SESSION
AUTHORIZATION
pour attribuer aux éléments créés les mêmes
propriétaires que dans la base d'origine. Ces instructions échoueront si
le script est exécuté par un utilisateur autre qu'un superutilisateur,
ou que le propriétaire de tous les objets. Pour générer un script pouvant
être restauré par n'importe quel utilisateur, qui deviendra alors
propriétaire de tous les objets, utilisez l'option -O
.
-r
--roles-only
Exporte seulement les rôles, pas les bases ni les tablespaces.
-s
--schema-only
Exporte seulement les définitions des objets (le schéma), pas les données.
-S username
--superuser=username
Précise le nom du superutilisateur à utiliser pour la désactivation des
triggers. Cela n'a d'intérêt que lorsque
--disable-triggers
est utilisé. (Il est généralement
préférable de ne pas utiliser cette option, et d'exécuter le script
résultant directement en tant que superutilisateur.)
-t
--tablespaces-only
Exporte seulement les tablespaces, pas les bases de données ni les rôles.
-v
--verbose
Active le mode verbeux. Dans ce mode, pg_dumpall inscrit les heures de début et de fin dans le fichier d'export, et affiche les messages de progression sur la sortie d'erreur standard. Si l'option est répétée, des messages de débogage supplémentaires seront affichés sur la sortie d'erreur standard. Cette option est également transmise à
-V
--version
Affiche la version de pg_dumpall puis quitte.
-x
--no-privileges
--no-acl
N'exporte pas les droits d'accès (commandes grant/revoke).
--binary-upgrade
Cette option est destinée à être utilisée par les utilitaires de mise à jour en ligne. Son utilisation à d'autres fins n'est ni recommandée ni supportée. Le comportement de cette option peut changer sans préavis dans de futures versions.
--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.
table
(colonne
,
...) VALUES ...
--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_dumpall 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.
--exclude-database=motif
N'exporte pas les bases de données dont le nom correspond au motif
. Plusieurs motifs peuvent être
spécifiés en répétant l'option --exclude-database
.
Le paramètre motif
est
interprété selon les mêmes règles que que celles utilisées par les
méta-commandes \d
de psql
(voir Motifs).
Il est donc possible d'exclure plusieurs bases de données en utilisant
les caractères joker dans le motif. Si vous utilisez des jokers,
faites attention à mettre le motif entre guillemets pour éviter qu'il
ne soit interprété par le shell.
--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=nom_fichier
Indique un fichier contenant les motifs des bases de données à exclure
de l'export. Ces motifs sont interprétés selon les mêmes règles que pour
--exclude-database
.
Pour lire à partir de l'entrée standard (STDIN
),
utilisez -
comme nom de fichier. L'option
--filter
peut être utilisée en combinaison avec
--exclude-database
, et peut être spécifiée
plusieurs fois pour indiquer plusieurs fichiers de filtres.
Le fichier contient un motif de base de données par ligne, selon le format suivant :
exclude database MOTIF
Les lignes commençant par #
sont interprétées comme
des commentaires et sont ignorées. Il est également possible d'ajouter
des commentaires à la fin d'une ligne contenant un motif. Les lignes vides
sont elles aussi ignorées. Voir Motifs pour
plus d'informations sur le traitement des guillemets dans les motifs.
--if-exists
Utilise des commandes DROP ... IF EXISTS
pour
supprimer les objets dans le mode --clean
. Cela
permet d'éviter les erreurs « does not exist » qui
seraient sinon renvoyées. Cette option n'est valable que si
--clean
est aussi spécifiée.
--inserts
Extrait les données en tant que commandes INSERT
(plutôt que COPY
). Cela rendra la restauration très
lente ; c'est surtout utile pour créer des exports pouvant être
chargés dans des bases de données autres que
PostgreSQL. Notez que la restauration peut
échouer complètement si l'ordre des colonnes a été modifié. L'option
--column-inserts
est plus sûre, mais encore plus
lente.
--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 expiration
.
Le délai peut être exprimé dans l'un des formats acceptés par la commande
SET statement_timeout
.
--no-comments
Ne pas générer les commandes COMMENT
.
--no-data
Ne pas exporter les données.
--no-policies
Ne pas exporter les politiques de sécurité au niveau ligne.
--no-publications
Ne pas exporter les publications.
--no-role-passwords
Ne pas exporter les mots de passe des rôles. Lors de la restauration,
les rôles auront un mot de passe vide et l'authentification par mot de
passe échouera systématiquement tant qu'un mot de passe n'aura pas été défini.
Puisque les valeurs des mots de passe ne sont pas nécessaires quand
cette option est spécifiée, l'information sur le rôle est lue depuis le
catalogue système pg_roles
au lieu de
pg_authid
. Cette option est donc également utile
si l'accès à pg_authid
est restreint par
certaines politiques de sécurité.
--no-schema
Ne pas exporter le schéma (définitions des données).
--no-security-labels
Ne pas exporter les labels de sécurité.
--no-statistics
Ne pas exporter les statistiques. C'est le comportement par défaut.
--no-subscriptions
Ne pas exporter les souscriptions.
--no-sync
Par défaut, pg_dumpall
attend que tous les fichiers
soient correctement écrits sur disque. Cette option permet à
pg_dumpall
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 avec la méthode d'accès aux tables par défaut lors de la restauration.
--no-tablespaces
Ne pas générer de commandes pour créer des tablespaces, ni sélectionner de tablespace pour les objets. Avec cette option, tous les objets seront créés dans le tablespace par défaut durant la restauration.
--no-toast-compression
N'émet pas de commandes pour définir les méthodes de compression des colonnes TOAST. Avec cette option, toutes les colonnes seront restaurées avec les paramètres de compression par défaut.
--no-unlogged-table-data
Ne pas exporter le contenu des tables non journalisées (« unlogged »). Cette option n'a aucun effet sur l'export des définitions de ces tables ; elle empêche uniquement l'export de leurs données.
--on-conflict-do-nothing
Ajoute ON CONFLICT DO NOTHING
aux commandes
INSERT
. Cette option n'est valable que si
--inserts
ou --column-inserts
est
aussi indiquée.
--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_dumpall, ou lorsque l'export
est destiné à être rechargé dans une version majeure différente.
Par défaut, pg_dumpall 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.
--restrict-key=restrict_key
Utilise la chaîne fournie comme clé de \restrict
dans psql dans la sortie de la sauvegarde.
Si aucune clé de restriction n'est indiqué,
pg_dumpall en générera une aléatoirement si
nécessaire. Les clés doivent contenir uniquement des caractères
alphanumériques.
Cette option a principalement pour but des tests et d'autres scénarios nécessitant une sortie répétable (par exemple pour comparer les fichiers de sauvegarde). Ce n'est pas recommandé pour une utilisation standard, car un serveur malicieux avec une connaissance de la clé pourrait injecter un code arbitraire qui sera exécuté sur la machine qui lance psql avec la sauvegarde en sortie.
--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.
--statistics
Sauvegarde les statistiques.
--statistics-only
Exporter uniquement les statistiques, sans le schéma (définitions des données) ni les données. Les statistiques des tables, vues matérialisées, tables distantes et index sont exportées.
--sequence-data
Inclure les données des séquences dans l'export. C'est le comportement par
défaut, sauf si --no-data
, --schema-only
ou --statistics-only
est spécifié.
--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.
-?
--help
Afficher l'aide sur les arguments en ligne de commande de pg_dumpall, puis quitter.
Les options suivantes en ligne de commande contrôlent les paramètres de connexion à la base de données.
-d connstr
--dbname=connstr
Indique les paramètres de connexion au serveur, sous la forme d'une chaîne de connexion ; ils prévaudront sur toute option en ligne de commande conflictuelle.
Cette option est appelée --dbname
par cohérence avec
les autres applications clientes. Toutefois, comme
pg_dumpall doit se connecter à plusieurs bases
de données, le nom de la base indiqué dans la chaîne de connexion sera
ignoré. Utilisez l'option -l
pour spécifier le nom de
la base à utiliser pour la connexion initiale, qui servira à exporter les
objets globaux et à déterminer les bases de données à extraire.
-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.
-l dbname
--database=dbname
Spécifie le nom de la base de données à laquelle se connecter pour
exporter les objets globaux et déterminer les bases de données à
extraire. Si cette option n'est pas précisée, la base
postgres
sera utilisée et, si elle n'existe pas,
template1
sera utilisé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_dumpall à demander un mot de passe avant la connexion à une base de données.
Cette option n'est jamais indispensable car
pg_dumpall demande automatiquement un mot de
passe si le serveur exige une authentification par mot de passe.
Néanmoins, pg_dumpall 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.
Notez que le mot de passe sera demandé pour chaque base de données à
exporter. Il est généralement préférable de configurer un fichier
~/.pgpass
plutôt que de saisir manuellement
le mot de passe à chaque fois.
--role=nomrole
Spécifie un rôle à utiliser pour réaliser l'export. Avec cette option,
pg_dumpall é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_dumpall 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 faites
sans violer cette politique.
PGHOST
PGOPTIONS
PGPORT
PGUSER
Paramètres de connexion par défaut.
PG_COLOR
Indique s'il faut utiliser la couleur pour les messages de diagnostic.
Les valeurs possibles sont always
,
auto
, never
.
Cet outil, comme la plupart des autres outils PostgreSQL, utilise aussi les variables d'environnement supportées par la bibliothèque libpq (voir Section 32.15).
Comme pg_dumpall appelle pg_dump en interne, certains messages de diagnostic feront en fait référence à pg_dump.
L'option --clean
peut être utile même si vous prévoyez de
restaurer l'export dans une instance vide. Son utilisation autorise le script
à supprimer puis recréer les bases de données système
postgres
et template1
, garantissant
ainsi qu'elles conservent les mêmes propriétés (par exemple la locale et
l'encodage) que dans l'instance source. Sans cette option, ces bases
conserveront leurs propriétés actuelles au niveau de la base, ainsi que tout
contenu préexistant.
Si l'option --with-statistics
est spécifiée,
pg_dumpall
inclura la plupart des statistiques de l'optimiseur
dans le fichier d'export généré. Toutefois, certaines statistiques peuvent ne pas
être incluses, notamment celles créées explicitement via
CREATE STATISTICS ou celles ajoutées par une extension.
Il peut donc être utile d'exécuter ANALYZE
sur chaque base
de données après la restauration d'un export afin de garantir des performances
optimales. Vous pouvez également exécuter vacuumdb -a -z
pour analyser toutes les bases de données.
Il ne faut pas s'attendre à ce que le script d'export s'exécute sans aucune
erreur. En particulier, comme le script exécutera une commande CREATE
ROLE
pour chaque rôle présent dans l'instance d'origine, une erreur
« role already exists » est inévitable pour le
superutilisateur initial, sauf si l'instance de destination a été initialisée
avec un nom différent pour ce dernier. Cette erreur est sans conséquence et
peut être ignorée. L'utilisation de l'option --clean
risque
également de générer d'autres messages d'erreur sans gravité concernant des
objets inexistants. Vous pouvez minimiser ces erreurs en ajoutant l'option
--if-exists
.
pg_dumpall requiert que tous les tablespaces nécessaires existent avant la restauration. Dans le cas contraire, la création de la base échouera pour les bases situées en dehors de l'emplacement par défaut.
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 pg_dumpall, afin de garantir
une restauration propre et d’éviter d’éventuels conflits avec une configuration
personnalisée de psql. Par ailleurs, comme un script
pg_dumpall peut inclure des méta-commandes
psql, il pourrait être incompatible avec des
outils clients autres que psql.
Pour exporter toutes les bases de données :
$
pg_dumpall > db.out
Pour restaurer les bases de données à partir de ce fichier, vous pouvez utiliser :
$
psql -X -f db.out postgres
Il n'est pas important de se connecter à une base spécifique ici, car le
script généré par pg_dumpall contient les
commandes nécessaires pour créer et se connecter aux bases de données
exportées. Une exception existe si vous avez utilisé l'option
--clean
: vous devez alors vous connecter d'abord
à la base postgres
; le script tentera de supprimer
les autres bases immédiatement, ce qui échouera pour la base à laquelle
vous êtes connecté.
Consultez pg_dump pour plus de détails sur les erreurs susceptibles de se produire.