web-dev-qa-db-fra.com

Copier la base de données PostgreSQL sur un autre serveur

Je cherche à copier une base de données de production PostgreSQL sur un serveur de développement. Quel est le moyen le plus rapide et le plus simple de procéder?

452
Robin Barnes

Vous n'avez pas besoin de créer un fichier intermédiaire. Tu peux faire

pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname

ou

pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname

en utilisant psql ou pg_dump pour vous connecter à un hôte distant.

Avec une base de données volumineuse ou une connexion lente, le transfert d'un fichier et le transfert du fichier compressé peuvent être plus rapides.

Comme Kornel l'a dit, il n'est pas nécessaire de sauvegarder dans un fichier intermédiaire. Si vous voulez travailler compressé, vous pouvez utiliser un tunnel compressé.

pg_dump -C dbname | bzip2 | ssh  remoteuser@remotehost "bunzip2 | psql dbname"

ou

pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"

mais cette solution nécessite également d’obtenir une session aux deux extrémités.

Remarque: pg_dump sert à la sauvegarde et psql à la restauration. Ainsi, la première commande dans cette réponse consiste à copier de local à distant et la seconde commande de distant à local . Plus -> https://www.postgresql.org/docs/9.6/app-pgdump.html

603
Ferran
pg_dump the_db_name > the_backup.sql

Puis copiez la sauvegarde sur votre serveur de développement, restaurez-la avec:

psql the_new_dev_db < the_backup.sql
121
unmounted

Utilisez pg_dump , et plus tard psql ou pg_restore - selon que vous choisissiez les options -Fp ou -Fc pour pg_dump.

Exemple d'utilisation:

ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
37
user80168

Si vous souhaitez migrer entre les versions (par exemple, vous avez mis à jour postgres et avez 9.1 exécuté sur localhost: 5432 et 9.3 exécuté sur localhost: 5434), vous pouvez exécuter:

pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434

Découvrez le documents de migration .

21
Eric H.

pg_basebackup semble être le meilleur moyen de le faire, en particulier pour les grandes bases de données.

13
Reshad user2701173

Exécutez cette commande avec le nom de la base de données que vous souhaitez sauvegarder pour effectuer un dump de la base de données.

 pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

 eg. pg_dump -U postgres mydbname -f mydbnamedump.sql

Maintenant scp ce fichier de vidage sur la machine distante sur laquelle vous voulez copier la base de données.

eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/

Sur la machine distante, exécutez la commande suivante dans ~/some/folder pour restaurer la base de données.

 psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}

 eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
6
user01

J'ai beaucoup lutté et finalement la méthode qui m'a permis de le faire fonctionner avec Rails 4 était la suivante:

sur votre ancien serveur

Sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql

J'ai dû utiliser l'utilisateur postgres linux pour créer le dump. De plus, j'ai dû utiliser -c pour forcer la création de la base de données sur le nouveau serveur. --inserts lui dit d'utiliser la syntaxe INSERT () qui autrement ne fonctionnerait pas pour moi :(

puis, sur le nouveau serveur, simpy:

Sudo su - postgres
psql new_database_name < dump.sql

pour transférer le fichier dump.sql entre les serveurs, j’ai simplement utilisé le "chat" pour imprimer le contenu et ensuite le "nano" pour le recréer en copiant le contenu.

En outre, le rôle que j'utilisais sur les deux bases de données était différent, donc je devais trouver-remplacer tout le nom du propriétaire dans le cliché.

4
pastullo

Permettez-moi de partager un script Linux Shell pour copier vos données de table d'un serveur sur un autre serveur PostgreSQL.

Référence tirée de ce blog:

Script shell Linux Bash pour la migration de données entre serveurs PostgreSQL:

#!/bin/bash
psql \
    -X \
    -U user_name \
    -h Host_name1 \
    -d database_name \
    -c "\\copy tbl_Students to stdout" \
| \
psql \
    -X \
    -U user_name \
    -h Host_name2 \
    -d database_name \
    -c "\\copy tbl_Students from stdin"

Je ne fais que migrer les données; veuillez créer un tableau vierge sur votre serveur de destination/deuxième base de données.

Ceci est un script utilitaire. En outre, vous pouvez modifier le script pour une utilisation générique, par exemple en ajoutant des paramètres pour nom_hôte, nom_base_données, nom_table et autres.

3
Anvesh

Videz votre base de données: pg_dump database_name_name > backup.sql


Importez votre base de données: psql db_name < backup.sql

2
MisterJoyson

La réponse acceptée est correcte, mais si vous souhaitez éviter de saisir le mot de passe de manière interactive, vous pouvez utiliser ceci:

PGPASSWORD={{export_db_password}} pg_dump --create -h {{export_db_Host}} -U {{export_db_user}} {{export_db_name}} | PGPASSWORD={{import_db_password}} psql -h {{import_db_Host}} -U {{import_db_user}} {{import_db_name}}
0
zoran