Copying PostgreSQL database to another server

匿名 (未验证) 提交于 2019-12-03 02:29:01

问题:

I'm looking to copy a production PostgreSQL database to a development server. What's the quickest, easiest way to go about doing this?

回答1:

You don't need to create an intermediate file. You can do

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

or

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

using psql or pg_dump to connect to a remote host.

With a big database or a slow connection, dumping a file and transfering the file compressed may be faster.

As Kornel said there is no need to dump to a intermediate file, if you want to work compressed you can use a compressed tunnel

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

or

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

but this solution also requires to get a session in both ends.



回答2:

pg_dump the_db_name > the_backup.sql

Then copy the backup to your development server, restore with:

psql the_new_dev_db 


回答3:

Use pg_dump, and later psql or pg_restore - depending whether you choose -Fp or -Fc options to pg_dump.

Example of usage:

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


回答4:

If you are looking to migrate between versions (eg you updated postgres and have 9.1 running on localhost:5432 and 9.3 running on localhost:5434) you can run:

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

Check out the migration docs.



回答5:

pg_basebackup seems to be the better way of doing this now, especially for large databases.



回答6:

Run this command with database name, you want to backup, to take dump of DB.

 pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}   eg. pg_dump -U postgres mydbname -f mydbnamedump.sql

Now scp this dump file to remote machine where you want to copy DB.

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

On remote machine run following command in ~/some/folder to restore the DB.

 psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}   eg. psql -U postgres -d mynewdb -f mydbnamedump.sql


回答7:

I struggled quite a lot and eventually the method that allowed me to make it work with Rails 4 was:

on your old server

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

I had to use the postgres linux user to create the dump. also i had to use -c to force the creation of the database on the new server. --inserts tells it to use the INSERT() syntax which otherwise would not work for me :(

then, on the new server, simpy:

sudo su - postgres psql new_database_name 

to transfer the dump.sql file between server I simply used the "cat" to print the content and than "nano" to recreate it copypasting the content.

Also, the ROLE i was using on the two database was different so i had to find-replace all the owner name in the dump.



回答8:

Let me share a Linux shell script to copy your table data from one server to another PostgreSQL server.

Reference taken from this blog:

Linux Bash Shell Script for data migration between PostgreSQL Servers:

#!/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"

I am just migrating the data; please create a blank table at your destination/second database server.

This is a utility script. Further, you can modify the script for generic use something like by adding parameters for host_name, database_name, table_name and others



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!