移动大型PostgreSQL / PostGIS数据库


8

我需要将非常大的PostGIS数据库(约320 GB)从server1(PostgreSQL 9.1,PostGIS 1.5)升级到server2(PostgreSQL 9.3,PostGIS 2.1)。

升级过程有据可查。问题是我在server1上没有足够的空间将文件转储到那里,对其进行校验和,然后将其复制到server2并验证总和。我试过了:

  • 从管道中转储服务器1Server2上使用nc
  • 将转储文件直接写入到使用挂载在server1上的server2文件系统中。sshfs

两次转储文件似乎已损坏。pg_restore在不同的地方出现错误,如下所示:

pg_restore: [compress_io] could not uncompress data: incorrect data check

谁能建议一种更好的方法来完成此迁移和升级?

更新:尝试了NFS(并再次尝试SSHFS)。显然,这些远程文件系统无法可靠地传输大量数据。生成的SQL文件中明显缺少块,从而在导入期间导致如下语法错误:

ERROR:  invalid input syntax for integer: "8266UPDATE spatial_ref_sys o set auth_name = n.auth_name, auth_srid = n.auth_srid, srtext = n.srtext, proj4text = n.proj4text FROM _pgis_restore_spatial_ref_sys n WHERE o.srid = n.srid;"

第二个选项似乎不错,但是为什么不使用NFS?也许有一些小的中断无法由sshfs处理。320Gb是一个很大的文件。
马可(Marco)

1
买更大的磁盘?如今,1Tb的成本几乎为零。
Colin't Hart 2015年

事实证明,NFS与SSHFS一样不可靠,无法传输大量数据。更新问题。
kontextify

Answers:


7

我建议像这样从新的9.3服务器转储9.1数据库:

pg_dump -h remoteserver -U remoteuser remotedbname -Fc -f my_old_server_backup.dump

我建议使用9.3,pg_dump因为pg_dump它始终向后兼容,但不向前兼容。换句话说,新版本pg_dump将处理新服务器要求旧版本实用程序不知道的任何语法更改。

一定要确保你pg_hba.conflisten_addressespostgresql.conf被设置为允许您可以远程连接和转储适当为好。

如果要一步尝试转储和还原,则也可以尝试以下操作:

pg_dump -h remotehost -U remoteuser remotedbname | psql -U localuser localdbname

希望能有所帮助。=)


由于PostGIS版本之间的差异,“一步完成转储和还原”可能无法正常工作,但是可以从接收服务器远程运行转储并从中还原转储!这显然比使用网络文件系统更好。谢谢,我现在有一个正常运行的数据库!
kontextify

那是一个表演过程吗?在我看来,需要几天的时间才能完成。如果我不使用服务器到服务器的远程备份,那么pgdump会创建一个约300GB的转储文件吗?
deFreitas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.