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?
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
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
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
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 .
pg_basebackup
semble être le meilleur moyen de le faire, en particulier pour les grandes bases de données.
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
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é.
Permettez-moi de partager un script Linux Shell pour copier vos données de table d'un serveur sur un autre serveur PostgreSQL.
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.
Videz votre base de données: pg_dump database_name_name > backup.sql
Importez votre base de données: psql db_name < backup.sql
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}}