Answers:
您无需创建中间文件。你可以做
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
使用psql
或pg_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
ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname
吗?
pg_dump the_db_name > the_backup.sql
然后将备份复制到您的开发服务器,并使用以下命令进行还原:
psql the_new_dev_db < the_backup.sql
使用pg_dump和更高版本的psql或pg_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
如果要在版本之间迁移(例如,更新了postgres并在localhost:5432上运行9.1,而在localhost:5434上运行9.3),则可以运行:
pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434
查看迁移文档。
pg_basebackup
似乎是现在更好的方法,尤其是对于大型数据库。
您可以从具有相同或较旧主版本的服务器复制数据库。或更确切地说:
pg_basebackup
适用于相同或更低主版本(低至9.1)的服务器。但是,WAL流模式(-X stream
)仅适用于9.3--format=tar
版或更高版本的服务器,而当前版本的tar格式模式()仅适用于9.5版或更高版本的服务器。
为此,您需要在源服务器上:
listen_addresses = '*'
以便能够从目标服务器连接。确保为此打开端口5432。max_wal_senders = 1
(-X fetch
),2
用于-X stream
(在PostgreSQL中12的情况下,缺省值)或更多。wal_level = replica
或更高才能设置max_wal_senders > 0
。host replication postgres DST_IP/32 trust
在 pg_hba.conf
。这将使pg
来自DST_IP
计算机的任何人都可以访问群集。您可能想诉诸更安全的选择。更改1、2、3需要重新启动服务器,更改4需要重新加载。
在目标服务器上:
# systemctl stop postgresql@VERSION-NAME
postgres$ pg_basebackup -h SRC_IP -U postgres -D VERSION/NAME --progress
# systemctl start postgresql@VERSION-NAME
使用要备份的数据库名称运行此命令以进行数据库转储。
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 / folder中运行以下命令以还原数据库。
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用户来创建转储。我也不得不使用-c来强制在新服务器上创建数据库。--inserts告诉它使用INSERT()语法,否则对我不起作用:(
然后,在新服务器上,simpy:
sudo su - postgres
psql new_database_name < dump.sql
在服务器之间传输dump.sql文件时,我只使用了“ cat”来打印内容,而不是使用“ nano”来重新创建它来复制粘贴内容。
另外,我在两个数据库上使用的角色是不同的,因此我不得不在转储中查找替换所有所有者名称。
让我共享一个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"
我只是在迁移数据;请在目标/第二个数据库服务器上创建一个空白表。
这是一个实用程序脚本。此外,您可以修改脚本以用于一般用途,例如通过为host_name,database_name,table_name和其他参数添加参数