pg_dump postgres database from remote server when port 5432 is blocked

PostgresqlSshRemote ServerPg Dump

Postgresql Problem Overview


I'm trying to pg_dump a SQL database on a remote server in our DMZ. There are 2 problems.

  1. there is not a lot of space left on the remote server so the normal command run to locally backup the database pg_dump -C database > sqldatabase.sql.bak won't work due to space issues.

  2. I also can't run the other version of pg_dump command to dump database from remote server to local server using:

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

as the server is in our DMZ and port 5432 is blocked. What I'm looking to see is if it is possible to pg_dump the database and immediatly save it (ssh or some other form) as a file to a remote server. What I was trying was: pg_dump -C testdb | ssh [email protected] | > /home/admin/testdb.sql.bak

Does anyone know if what i am trying to achieve is possible?

Postgresql Solutions


Solution 1 - Postgresql

You can connect with ssh to your remote server, do with the connect the pg_dump call and send the output back to stdout of local machine.

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

Solution 2 - Postgresql

let's create a backup from remote postgresql database using pg_dump:

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

later it could be restored at the same remote server using:

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

complete (all databases and objects)

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

restore from pg_dumpall --clean:

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

Copied from: https://codepad.co/snippet/73eKCuLx

Solution 3 - Postgresql

You can try to dump part of the table to a file in your local machine like this (assume your local machine has psql installed):

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;"

And you can import the exported csv into another db later like this:

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

Solution 4 - Postgresql

One possible solution - pipe through ssh - has been mentioned.

You also could make your DB server listen on the public inet address, add a hostssl entry for your backup machine to pg_hba.conf, maybe configure a client certificate for security, and then simply run the dump on the client/backup machine with pg_dump -h dbserver.example.com ...

This is simpler for unattended backups.

For the configuration of the connection (sslmode) see also the supported environment variables.

Solution 5 - Postgresql

If you would like to periodically backup a database PostgreSQL that is inside of a container in the remote server to your local host by using pg_dump over ssh, this is useful for you:

https://github.com/omidraha/periodic-pgdump-over-ssh

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAnthony McGovernView Question on Stackoverflow
Solution 1 - PostgresqlOkieOthView Answer on Stackoverflow
Solution 2 - PostgresqlKishore RelangiView Answer on Stackoverflow
Solution 3 - PostgresqlnybonView Answer on Stackoverflow
Solution 4 - PostgresqlStr.View Answer on Stackoverflow
Solution 5 - PostgresqlOmid RahaView Answer on Stackoverflow