执行PostgreSQL恢复的问题

问题描述

我无法从转储执行还原。场景如下:我正在将环境从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无法正常工作。有没有人经历过?

关于这些所有者错误,有人知道如何使用psql解决吗?

解决方法

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提供的技术预先安装这些扩展,然后还原转储并忽略错误。