我多次使用这种技术在服务器之间传输数据库:
pg_dump --no-owner -Fd mydb -j 4 -f tmp/mydb
scp -r tmp/mydb otherserver:tmp/
然后在另一个服务器中:
dropdb --if-exists mydb &&
createdb -T template0 mydb &&
pg_restore -j 4 -d mydb tmp/mydb &&
rm -rf tmp/mydb
它完美无缺地发挥了作用。使用Postgres 9.3.16和CentOS 7。
但是现在,在一台新服务器中,pg_restore抱怨:
pg_restore: [archiver] parallel restore is not supported with this archive file format
我可以删除-j 4
参数,但理论上它应该是有效的。根据pg_恢复医生的说法:
-j作业数--作业数=作业数--使用多个并发作业运行pg_restore中最耗时的部分--那些加载数据、创建索引或创建约束的部分。此选项可大大减少将大型数据库还原到多处理器计算机上运行的服务器的时间。每个作业都是一个进程或一个线程,取决于操作系统,并使用与服务器的单独连接。此选项的最佳值取决于服务器、客户端和网络的硬件设置。因素包括CPU核的数量和磁盘设置。一个很好的起点是服务器上CPU核的数量,但是在许多情况下,大于这个值也会导致更快的恢复时间。当然,过高的值会导致性能下降。此选项只支持自定义和目录存档格式。输入必须是常规文件或目录(例如,不是管道)。此选项在发出脚本时被忽略,而不是直接连接到数据库服务器。此外,不能将多个作业与选项--单一事务一起使用.
我在pg_dump
:-Fd
中使用目录格式!它为什么要抱怨?
发布于 2017-05-30 06:50:10
我不知道为什么,但作为服务器,Postgres 9.3和psql
、pg_restore
和pg_dump
属于版本9.2。
/usr/bin/pg_restore是9.2版,而/usr/pgsql- 9.3 /bin/pg_dump是9.3版。
这就是问题的原因。
postgresql.x86_64 9.2.18-1.el7 @base
postgresql-devel.x86_64 9.2.18-1.el7 @base
postgresql-libs.x86_64 9.2.18-1.el7 @base
postgresql-odbc.x86_64 09.03.0100-2.el7 @base
postgresql93.x86_64 9.3.17-1PGDG.rhel7 @pgdg93
postgresql93-contrib.x86_64 9.3.17-1PGDG.rhel7 @pgdg93
postgresql93-libs.x86_64 9.3.17-1PGDG.rhel7 @pgdg93
postgresql93-server.x86_64 9.3.17-1PGDG.rhel7 @pgdg93
解决办法很简单:
yum remove postgresql
https://dba.stackexchange.com/questions/174892
复制