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

pg_dumpall

pg_dumpall — exporter une instance de bases de données PostgreSQL dans un script SQL

Synopsis

pg_dumpall [option_connexion...] [option...]

Description

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.

Avertissement

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.

Options

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

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

Environnement

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

Notes

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.

Exemples

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

Voir aussi

Consultez pg_dump pour plus de détails sur les erreurs susceptibles de se produire.