Recherche…


Remarques

Sauvegarde du système de fichiers au lieu d'utiliser pg_dumpall et pg_dump

Il est très important que si vous utilisez ceci, vous appelez la fonction pg_start_backup() avant et la fonction pg_stop_backup() après. Faire des sauvegardes du système de fichiers n'est pas sûr autrement; même un instantané ZFS ou FreeBSD du système de fichiers sauvegardé sans ces appels de fonctions placera la base de données en mode de récupération et risque de perdre des transactions.

J'éviterais de faire des sauvegardes de systèmes de fichiers plutôt que des sauvegardes classiques de Postgres, à la fois pour cette raison et parce que les fichiers de sauvegarde Postgres (en particulier dans le format personnalisé) sont extrêmement polyvalents pour prendre en charge des restaurations alternatives. Comme ils sont des fichiers uniques, ils sont aussi moins compliqués à gérer.

Sauvegarde d'une base de données

pg_dump -Fc -f DATABASE.pgsql DATABASE

-Fc sélectionne le "format de sauvegarde personnalisé" qui vous donne plus de puissance que le SQL brut; voir pg_restore pour plus de détails. Si vous voulez un fichier SQL complet, vous pouvez le faire à la place:

pg_dump -f DATABASE.sql DATABASE

ou même

pg_dump DATABASE > DATABASE.sql

Restauration des sauvegardes

psql < backup.sql

Une alternative plus sûre utilise -1 pour envelopper la restauration dans une transaction. Le -f spécifie le nom du fichier plutôt que d'utiliser la redirection du shell.

psql -1f backup.sql

Les fichiers au format personnalisé doivent être restaurés à l'aide de pg_restore avec l'option -d pour spécifier la base de données:

pg_restore -d DATABASE DATABASE.pgsql

Le format personnalisé peut également être reconverti en SQL:

pg_restore backup.pgsql > backup.sql

L'utilisation du format personnalisé est recommandée car vous pouvez choisir les éléments à restaurer et éventuellement activer le traitement parallèle.

Vous devrez peut-être faire un pg_dump suivi d'un pg_restore si vous effectuez une mise à niveau d'une version postgresql à une version plus récente.

Sauvegarde de l'ensemble du cluster

$ pg_dumpall -f backup.sql

Cela fonctionne en arrière-plan en effectuant plusieurs connexions au serveur une fois pour chaque base de données et en exécutant pg_dump dessus.

Parfois, vous pourriez être tenté de définir cela comme une tâche cron, de sorte que vous voulez voir la date à laquelle la sauvegarde a été prise dans le cadre du nom de fichier:

$ postgres-backup-$(date +%Y-%m-%d).sql

Cependant, veuillez noter que cela pourrait produire des fichiers volumineux sur une base quotidienne. Postgresql dispose d'un mécanisme bien meilleur pour les sauvegardes régulières - archives WAL

La sortie de pg_dumpall est suffisante pour restaurer une instance Postgres à configuration identique, mais les fichiers de configuration dans $PGDATA ( pg_hba.conf et postgresql.conf ) ne font pas partie de la sauvegarde, vous devrez donc les sauvegarder séparément.

postgres=# SELECT pg_start_backup('my-backup');
postgres=# SELECT pg_stop_backup();

Pour effectuer une sauvegarde du système de fichiers, vous devez utiliser ces fonctions pour vous assurer que Postgres est dans un état cohérent pendant la préparation de la sauvegarde.

Utilisation de la copie pour importer

Pour copier des données d'un fichier CSV dans une table

COPY <tablename> FROM '<filename with path>';

Pour insérer dans l' user de la table à partir d'un fichier nommé user_data.csv placé dans /home/user/ :

COPY user FROM '/home/user/user_data.csv';

Pour copier des données d'un fichier séparé par des tuyaux vers une table

COPY user FROM '/home/user/user_data' WITH DELIMITER '|';

Note: En l'absence de l'option with delimiter , le délimiteur par défaut est la virgule ,

Pour ignorer la ligne d'en-tête lors de l'importation du fichier

Utilisez l'option En-tête:

COPY user FROM '/home/user/user_data' WITH DELIMITER '|' HEADER;

Remarque: si des données sont citées, par défaut, les guillemets sont des guillemets doubles. Si les données sont citées en utilisant un autre caractère, utilisez l'option QUOTE ; Cependant, cette option est autorisée uniquement lors de l'utilisation du format CSV.

Utiliser la copie pour exporter

Copier le tableau en standard o / p

COPY <nomtable> TO STDOUT (DELIMITER '|');

Pour exporter un utilisateur de table vers la sortie standard:

COPY user TO STDOUT (DELIMITER '|');

Pour copier une table dans un fichier

COPY utilisateur FROM '/ home / user / user_data' WITH DELIMITER '|';

Pour copier la sortie de l'instruction SQL dans un fichier

COPY (instruction sql) TO '<nomfichier avec chemin>';

COPY (SELECT * FROM utilisateur WHERE nom_utilisateur LIKE 'A%') TO '/ home / utilisateur / user_data';

Copier dans un fichier compressé

COPY user TO PROGRAM 'gzip> /home/user/user_data.gz';

Ici, le programme gzip est exécuté pour compresser les données de la table utilisateur.

Utiliser psql pour exporter des données

Les données peuvent être exportées à l'aide de la commande copy ou en utilisant les options de ligne de commande de la commande psql.

Pour exporter des données csv d'un utilisateur de table vers un fichier csv:

psql -p \<port> -U \<username> -d \<database> -A -F<delimiter> -c\<sql to execute> \> \<output filename with path>

psql -p 5432 -U postgres -d test_database -A -F, -c "select * from user" > /home/user/user_data.csv

Ici, la combinaison de -A et -F fait l'affaire.

-F est de spécifier le délimiteur

-A or --no-align

Passe au mode de sortie non aligné. (Le mode de sortie par défaut est aligné autrement.)



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow