有人能帮助我吗?:)
我有 2 台服务器,想要在独占实例中拆分数据库,所以我将我的数据库 1 逐 1 迁移到第二台服务器
Postgres 版本 11.16 两台服务器
所以这是我在 s1 上的命令
pg_dump db1 > /tmp/db1.dump
然后我在我的 s2 上恢复:
然后
psql -p 5432 db1 < /tmp/db1.dump
我得到这个错误
error: invalid value for parameter "default_tablestapce": "tbs_db1_index"
DETAIL: Tablespace "tbs_db1_index" does not exist
, s1 上的 db1 位置与 s2 上的位置不同,这可能是问题所在,因为我在 s1 上没有错误或任何问题,我的数据库很好
此外,恢复过程不会停止或中断它仍在进行中(我的数据库很大)
PS,是的,我可以直接执行此操作,而无需通过此命令转储文件
pg_dump --no-owner db1 | psql -p 5432 -v ON_ERROR_STOP=1 -h 192.168.1.2 -U postgres db1
但也不起作用
表空间不是任何数据库的一部分,因此它们不包含在
pg_dump
输出中。如果您还想转储和恢复表空间,请pg_dumpall -t
在pg_dump
您正在执行的操作之外使用(并首先恢复表空间)。如果要忽略转储中的表空间,请使用pg_dump --no-tablespaces
.这就是我解决这个问题的方法:
删除现有的 tbs_db1_index 和 tbs_db1_data (即使它是空的!),因为当你创建数据库时,这个文件是在 db 目录中
创建的,在旧服务器中创建名称为新的表空间,
那么这个命令在旧服务器上没有问题(s1)
pg_dump --no-owner db1 | psql -p 5432 -v ON_ERROR_STOP=1 -h 192.168.1.2 -U postgres db1
where 192.168.1.2 - 目标服务器的地址,在我的例子中是 s2