有没有办法将 PostgreSQL 9.3 表空间从 物理移动/old/dir
到/new/dir
?我只想找到mv
目录并告诉 PostgreSQL 表空间现在位于/new/dir
. 看起来ALTER TABLESPACE
只能让你重命名。
我想避免创建一个新的表空间并将数据库移动到它。我认为这将是一个需要大量时间和磁盘空间的缓慢复制过程。我也想避免符号链接/old/dir
到/new/dir
.
我需要将一个非常大(约 320 GB)的 PostGIS 数据库从server1(PostgreSQL 9.1,PostGIS 1.5)移动并升级到server2(PostgreSQL 9.3,PostGIS 2.1)。
升级过程有据可查。问题是我在server1上没有足够的空间将文件转储到那里,校验它,然后将它复制到server2并验证总和。我试过:
nc
。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 …
Run Code Online (Sandbox Code Playgroud) 我正在使用pg_dump
转储大型(396 GB)PostgreSQL 数据库:
pg_dump --clean --create mydatabase
Run Code Online (Sandbox Code Playgroud)
运行一天后,语句失败ERROR: compressed data is corrupt
并pg_dump
退出。
100% 的数据完整性不是我的首要任务。这可能只是一个断行阻止我移动或备份一个需要数周时间创建的数据库。输了那行我没问题。
有什么方法可以创建忽略此类数据错误的转储?我在pg_dump
文档中什么也没找到。
如果没有,如何查找并删除表中所有损坏的行?其他表中的行指向它们,也需要删除。
我希望将 PostgreSQL 10 集群从server1克隆到server2,它在相同的硬件上运行相同的 Postgres 版本。目的是负载平衡和 HA。要记住的事情:
我考虑过的选项:
pg_dump | psql
当然,但这需要重新创建索引,并且对于相同系统之间的完整副本来说似乎非常缓慢且效率低下。rsync
所有 Postgres 文件夹和文件。有这么多数据存在数据损坏的风险,我需要确保我得到了所有东西(大概只有数据目录是不够的)。pg_basebackup
直接通过管道以pg_receivewal
某种方式完成这项工作吗?找不到我的用例的说明。做到这一点的最佳方法是什么?好像是很常见的情况。