问题描述
我无法从转储执行还原。场景如下:我正在将环境从GCP迁移到AWS,目前正在研究银行的迁移。
合作伙伴转储了GCP中的数据库,并将文件放置在AWS S3上(我不知道他用来执行转储的命令)。
我在AWS环境中创建了一个EC2,并将转储从S3复制到EC2(文件为13 GB)。我还创建了RDS来托管具有所有正确安全组设置的新数据库。
问题来了,我从服务器(EC2)连接到RDS时没有问题,但是使用pg_restore
进行还原时,出现以下错误消息:pg_restore: too many command line arguments (first is "dbclient. dump ").
我使用的完整命令是:
pg_restore -h client-aurora-cluster-hmg-legado-instance-1.c23ltjbbz7ms.us-east-1.rds.amazonaws.com -U postgres -d db_hmg_legado dbclient.dump -W
好的,我改变了方法。我尝试使用psql
而不是pg_restore
,然后命令如下:
psql -h client-aurora-cluster-hmg-legado-instance-1.c23ltjbbz7ms.us-east-1.rds.amazonaws.com -U postgres -d db_hmg_legado dbclient.dump -W
仅这次有效!!!!
但是在执行还原时,我收到了一些错误消息。我放在下面:
psql: dbclient.dump: 23: ERROR: schema "dw" already exists
CREATE EXTENSION
psql: dbclient.dump: 37: ERROR: must be owner of extension hstore
CREATE EXTENSION
psql: dbclient.dump: 51: ERROR: must be owner of extension intarray
CREATE EXTENSION
psql: dbclient.dump: 65: ERROR: must be owner of extension pg_trgm
CREATE EXTENSION
psql: dbclient.dump: 79: ERROR: must be owner of extension unaccent
但是还原需要很长时间,并且已经部分完成。
总的来说,我想了解为什么pg_restore无法正常工作。有没有人经历过?
解决方法
As documented in the manual要恢复的文件是最后一个参数,并且指定时不带“开关”。但是您在转储文件之后使用-W
。将-W
参数移到该参数之前的某个位置(尽管通常不必从头开始)
所以您需要这样的东西:
pg_restore -W -h ... -U postgres -d db_hmg_legado dbclient.dump
但是,如果在使用psql
时还原有效,则转储文件是“纯文本”转储,不能以pg_restore
开头。
关于错误:
您应该将转储还原到一个空数据库,该空数据库除了默认模式外不包含任何模式。
您需要CREATE EXTENSION
的超级用户,而该用户在托管数据库中没有。因此,请使用Amazon提供的技术预先安装这些扩展,然后还原转储并忽略错误。