Je cherche à copier une base de données PostgreSQL de production sur un serveur de développement. Quelle est la manière la plus rapide et la plus simple de procéder?
la source
Je cherche à copier une base de données PostgreSQL de production sur un serveur de développement. Quelle est la manière la plus rapide et la 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 grande base de données ou une connexion lente, le vidage 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 vider 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 de cette réponse consiste à copier du local vers le distant et la seconde de la distance vers le local . Plus -> https://www.postgresql.org/docs/9.6/app-pgdump.html
ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname
?Copiez ensuite la sauvegarde sur votre serveur de développement, restaurez avec:
la source
Utilisez pg_dump et plus tard psql ou pg_restore - selon que vous choisissez les options -Fp ou -Fc pour pg_dump.
Exemple d'utilisation:
la source
Si vous cherchez à migrer entre les versions (par exemple, vous avez mis à jour postgres et que 9.1 s'exécute sur localhost: 5432 et 9.3 s'exécute sur localhost: 5434), vous pouvez exécuter:
Consultez les documents de migration .
la source
pg_basebackup
semble être la meilleure façon de le faire maintenant, en particulier pour les grandes bases de données.Vous pouvez copier une base de données à partir d'un serveur avec la même version principale ou une version plus ancienne. Ou plus précisément :
Pour cela, vous avez besoin sur le serveur source:
listen_addresses = '*'
pour pouvoir se connecter depuis le serveur cible. Assurez-vous que le port 5432 est ouvert d'ailleurs.max_wal_senders = 1
(-X fetch
),2
pour-X stream
(la valeur par défaut dans le cas de PostgreSQL 12), ou plus.wal_level = replica
ou supérieur pour pouvoir réglermax_wal_senders > 0
.host replication postgres DST_IP/32 trust
danspg_hba.conf
. Cela accorde l'accès aupg
cluster à toute personne de laDST_IP
machine. Vous voudrez peut-être recourir à une option plus sécurisée.Les modifications 1, 2, 3 nécessitent un redémarrage du serveur, la modification 4 nécessite un rechargement.
Sur le serveur cible:
la source
Exécutez cette commande avec le nom de la base de données, que vous souhaitez sauvegarder, pour effectuer un vidage de la base de données.
Scp maintenant ce fichier de vidage sur la machine distante où vous souhaitez copier la base de données.
Sur une machine distante, exécutez la commande suivante dans le dossier ~ / certains / pour restaurer la base de données.
la source
J'ai eu beaucoup de mal et finalement la méthode qui m'a permis de le faire fonctionner avec Rails 4 était:
sur votre ancien serveur
J'ai dû utiliser l'utilisateur linux postgres pour créer le vidage. J'ai également 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:
pour transférer le fichier dump.sql entre les serveurs, j'ai simplement utilisé le "chat" pour imprimer le contenu et que "nano" pour le recréer en copypastant le contenu.
De plus, le RÔLE que j'utilisais sur les deux bases de données était différent, donc j'ai dû trouver-remplacer tout le nom du propriétaire dans le vidage.
la source
Videz votre base de données:
pg_dump database_name_name > backup.sql
Réimportez votre base de données:
psql db_name < backup.sql
la source
Permettez-moi de partager un script shell Linux pour copier vos données de table d'un serveur vers un autre serveur PostgreSQL.
Référence tirée de ce blog:
Script Bash Shell Linux pour la migration des données entre les serveurs PostgreSQL:
Je ne fais que migrer les données; veuillez créer un tableau vierge sur votre serveur de base de données de destination / deuxième.
Il s'agit d'un script utilitaire. De plus, vous pouvez modifier le script pour une utilisation générique comme en ajoutant des paramètres pour host_name, database_name, table_name et autres
la source
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:
la source