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

孤街醉人 提交于 2020-02-25 19:58:05

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


#1楼

pg_dump the_db_name > the_backup.sql

然后将备份复制到您的开发服务器,并使用以下命令进行还原:

psql the_new_dev_db < the_backup.sql

#2楼

使用pg_dump ,然后使用psqlpg_restore-取决于是否为pg_dump选择-Fp或-Fc选项。

用法示例:

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

#3楼

您无需创建中间文件。 你可以做

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"

但是此解决方案还需要两端都进行会话。

注意: pg_dump用于备份, psql用于还原。 因此, 此答案中第一个命令是从本地复制到远程,第二个命令是从remote复制到本地 。 更多-> https://www.postgresql.org/docs/9.6/app-pgdump.html


#4楼

我经过了很多努力,最终使我可以在Rails 4中使用的方法是:

在旧服务器上

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

我不得不使用postgres linux用户来创建转储。 我也不得不使用-c来强制在新服务器上创建数据库。 --inserts告诉它使用INSERT()语法,否则对我不起作用:(

然后,在新服务器上,simpy:

sudo su - postgres
psql new_database_name < dump.sql

在服务器之间传输dump.sql文件时,我只使用了“ cat”来打印内容,而不是使用“ nano”来重新创建它来复制粘贴内容。

另外,我在两个数据库上使用的角色是不同的,因此我不得不在转储中查找替换所有所有者名称。


#5楼

pg_basebackup似乎是现在更好的方法,尤其是对于大型数据库。

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