如何将pg_restore与AWS RDS一起正确使用以还原postgresql数据库

时间:2019-06-05 14:31:05

标签: django postgresql amazon-rds restore dump

我正在尝试将Postgresql数据库还原到AWS RDS。我想我快到了。我可以进行转储,然后在本地重新创建数据库,但是缺少将数据库还原到AWS RDS的最后一步。

这是我在做什么:

  1. 我得到我的垃圾堆

$ pg_dump -h my_public dns -U myusername -f dump.sql myawsdb

  1. 我在shell中创建了一个本地数据库,称为test:

create database test;

  1. 我将转储放入测试数据库中

$ psql -U myusername -d test -f dump.sql

到目前为止,一切都很好。

I get an error: psql:dump.sql:2705: ERROR: role "rdsadmin" does not exist,但我想我可以忽略它,因为我的数据库包含所有内容。 (我用\ list和\ connect测试检查过。)

现在,我想将此转储/测试还原到我的AWS RDS。

遵循此https://gist.github.com/syafiqfaiz/5273cd41df6f08fdedeb96e12af70e3b 我现在应该做:

pg_restore -h <host> -U <username> -c -d <database name> <filename to be restored>

但是我的文件名是什么,我的数据库名称是什么?

我尝试过:

pg_restore -h mydns -U myusername -c -d myawsdbname test pg_restore -h mydns -U myusername -c -d myawsdbname dump.sql

以及其他一些我不记得的选项。

大多数时候它告诉我类似以下内容:pg_restore: [archiver] could not open input file "test.dump": No such file or directory

或者,第二个:input file appears to be a text format dump. Please use psql.

我能给我指出正确的方向吗?非常感谢您的帮助!

编辑:所以我使用$ pg_dump -Fc mydb > db.dump创建了一个.dump文件。 我认为使用这个文件是可行的。现在我收到错误[archiver (db)] could not execute query: ERROR: role "myuser" does not exist Command was: ALTER TABLE public.users_user_user_permissions_id_seq OWNER TO micromegas;

我可以忍受吗?

EDIT2:我摆脱了添加标志的错误-无所有者--role = mypguser-无特权-无所有者

1 个答案:

答案 0 :(得分:1)

好吧,因为这显然对某些人有用,我将尽我所能记住-发表对此的答案。我将更广泛地回答这个问题,而不是针对AWS的特定问题,因为a)我不再使用该实例了,b)我也不记得我是怎么做到的。

但是我获得了PostreSQL的经验,并且由于AWS RDS还是一个postgres实例,因此步骤应该非常相似。

以下是还原postgreSQL数据库实例时的建议步骤:

  1. .dump格式而不是.sql格式拉备份。为什么?文件大小将更小,并且更易于还原。使用以下命令执行此操作:

pg_dump -h <your_public_dns_ending_with.rds.amazonaws.com> -U <username_for_your_db> -Fc <name_of_your_db> > name_for_your_backup.dump

  1. 现在,您可以轻松地将备份还原到任何postgreSQL实例。通常,我建议使用新的用户名和新的数据库名称设置一个新的数据库实例。假设您有一个名为testname且具有超级用户testuser的数据库。然后,您可以这样做:

pg_restore --no-owner --no-privileges --role=testuser -d testname <your_backup_file.dump>

那应该可以还原您的实例。

还原到AWS或任何远程PostgreSQL实例时,您必须使用-h标志指定主机。所以可能是这样:

pg_restore -h <your_public_dns_ending_with.rds.amazonaws.com> -p 5432 --no-owner --no-privileges --role=testuser -d testname <your_backup_file.dump>

如果您的DB实例在远程linux服务器上运行,则主机将是您的​​远程IP地址(-h <ip_od_server>),其余的将是相同的。

我希望这会有所帮助。如有任何疑问,请发表评论,我会尽力提供更多帮助。