将PostgreSQL数据库复制到另一台服务器

我正在寻找将生产PostgreSQL数据库复制到开发服务器。 什么是最快,最简单的方法去做这个?

您不需要创build中间文件。 你可以做

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

要么

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

使用psqlpg_dump连接到远程主机。

对于大型数据库或缓慢的连接,转储文件和传输压缩的文件可能会更快。

正如Kornel所说,不需要转储到中间文件,如果你想压缩工作,你可以使用压缩隧道

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

要么

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

但是这个解决scheme也需要在两端得到一个会话。

 pg_dump the_db_name > the_backup.sql 

然后将备份复制到您的开发服务器,恢复:

 psql the_new_dev_db < the_backup.sql 

使用pg_dump ,以及psql或pg_restore – 取决于您是否select-Fp或-Fc选项以pg_dump。

使用示例:

 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 

如果你正在寻找在版本之间迁移(比如你更新了postgres并且在本地主机上运行了9.1:5432和在本地主机上运行的9.3:5434),你可以运行:

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

查看迁移文档 。

pg_basebackup似乎是现在这样做的更好的方法,特别是对于大型数据库。

用数据库名运行这个命令,要备份,把数据库的转储。

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

现在将这个转储文件scp复制到您要复制数据库的远程机器上。

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

在远程机器上运行〜/ some /文件夹下面的命令来恢复数据库。

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

我挣扎了很多,最终让我使用Rails 4的方法是:

在您的旧服务器上

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

我不得不使用postgres linux用户来创build转储。 还必须使用-c强制在新服务器上创build数据库。 –inserts告诉它使用INSERT()语法,否则不会为我工作:(

那么,在新的服务器上,simpy:

 sudo su - postgres psql new_database_name < dump.sql 

在服务器之间传输dump.sql文件我只是使用“cat”来打印内容,而不是“nano”来重新创build内容副本。

此外,我在两个数据库上使用的angular色是不同的,所以我不得不find – replace转储中的所有者名称。

让我分享一个Linux shell脚本,将您的表数据从一台服务器复制到另一台PostgreSQL服务器。

从这个博客引用:

用于PostgreSQL服务器之间数据迁移的Linux Bash Shell脚本:

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

我只是迁移数据; 请在目标/第二个数据库服务器上创build一个空白表。

这是一个实用程序脚本。 此外,您可以通过添加host_name,database_name,table_name等参数来修改通用脚本