web-dev-qa-db-fra.com

pg_dump base de données postgres à partir d'un serveur distant

J'essaie de pg_dump une base de données SQL sur un serveur distant dans notre zone démilitarisée. Il y a 2 problèmes. 

1) il ne reste plus beaucoup d’espace sur le serveur distant, aussi la commande normale exécutée pour sauvegarder localement la base de données pg_dump -C database > sqldatabase.sql.bak ne fonctionnera pas en raison de problèmes d’espace. 

2) Je ne peux pas non plus exécuter l'autre version de la commande pg_dump pour vider la base de données d'un serveur distant vers un serveur local à l'aide de: 

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

car le serveur est dans notre DMZ et le port 5432 est bloqué. Ce que je cherche à savoir, c'est s'il est possible de pg_dump la base de données et de l'enregistrer immédiatement (ssh ou un autre formulaire) sous forme de fichier sur un serveur distant. Ce que j’essayais de faire: pg_dump -C testdb | ssh [email protected] | > /home/admin/testdb.sql.bak 

Est-ce que quelqu'un sait si ce que j'essaie de réaliser est possible? 

27
Anthony McGovern

Vous pouvez vous connecter avec ssh à votre serveur distant, faire l'appel avec l'appel pg_dump et renvoyer la sortie à la sortie standard de la machine locale.

ssh user@remote_machine "pg_dump -U dbuser -h localhost -C --column-inserts" \
 >> backup_file_on_your_local_machine.sql

Edit: corrigé une faute de frappe.

57
OkieOth

Vous pouvez essayer de vider une partie de la table dans un fichier de votre ordinateur local de la manière suivante (supposons que votre ordinateur local a installé psql):

psql -h ${db_Host} -p 5432 -U ${db_user} -d ${db_name} \
-c "\copy (SELECT * FROM my_table LIMIT 10000) to 'some_local_file.csv' csv;"

Et vous pouvez importer le csv exporté dans une autre base de données plus tard, comme ceci:

COPY my_table FROM '/path/to/some_local_file.csv' WITH (FORMAT csv);
4
nybon

Une solution possible - pipe via ssh - a été évoquée.

Vous pouvez également obliger votre serveur de base de données à écouter l'adresse d'inet publique, ajouter une entrée hostssl pour votre machine de sauvegarde à pg_hba.conf, éventuellement configurer un certificat client pour la sécurité, puis simplement exécuter le dump sur l'ordinateur client/de sauvegarde avec pg_dump -h dbserver.example.com ...

C'est plus simple pour les sauvegardes sans surveillance.

Pour la configuration de la connexion (sslmode), voir aussi les variables d'environnement supportées .

2
Str.

créons une sauvegarde à partir de la base de données postgresql distante en utilisant pg_dump:

pg_dump -h [Host address] -Fc -o -U [database user] <database name> > [dump file]

plus tard, il pourrait être restauré sur le même serveur distant en utilisant:

Sudo -u postgres pg_restore -C mydb_backup.dump

Ex:

pg_dump -h 67.8.78.10 -Fc -o -U myuser mydb > mydb_backup.dump

complète (toutes les bases de données et tous les objets)

pg_dumpall -U myuser -h 67.8.78.10 --clean --file=mydb_backup.dump

restaurer depuis pg_dumpall --clean:

psql -f mydb_backup.dump postgres #it doesn't matter which db you select here

Copié à partir de: https://codepad.co/snippet/73eKCuLx

1
Kishore Relangi