将postgres转储迁移到RDS

时间:2016-03-30 14:21:34

标签: django database postgresql database-migration

我有一个在数字海洋上运行的Django postgres db(v9.3.10),我正在尝试将其迁移到Amazon RDS(postgres v 9.4.5)。 RDS是一个300GB的db.m3.xlarge实例。我把数字海洋数据库倾倒了:

sudo -u postgres pg_dump -Fc -o -f /home/<user>/db.sql <dbname>

现在我尝试将其迁移到:

 pg_restore -h <RDS endpoint> --clean -Fc -v -d <dbname> -U <RDS master user> /home/<user>/db.sql

我看到的唯一错误是:

  pg_restore: [archiver (db)] Error from TOC entry 2516; 0 0 COMMENT EXTENSION plpgsql
  pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
  Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

除此之外,一切似乎都很顺利,然后它就停止了。转储文件大约是550MB,有几个表有多个索引,否则很标准。

AWS接口上的读写IOPS接近0,CPU,内存和存储也是如此。我对AWS非常陌生,并且知道参数组可能需要进行调整才能做得更好。任何人都可以建议将Django数据库迁移到RDS这个或更好的方法吗?

修改

查看db db的db用户:

Role Name   Attr                                           Member Of
<user>      Superuser                                      {}
postgres    Superuser, Create role, Create DB, Replication {}

RDS看起来像:

Role Name      Attr                     Member Of
<user>        Create role, Create DB    {rds_superuser}
rds_superuser Cannot login              {}
rdsadmin      ...                        ...

因此&lt; user&gt;对我来说这不是一个权限问题。在每种情况下都拥有超级用户权限。

寻找任何人的解决方案

我终于使用了这个:

cat <db.sql> | sed -e '/^COMMENT ON EXTENSION plpgsql IS/d' > edited.dump
psql -h <RDS endpoint> -U <user> -e <dname> < edited.dump

它对于可靠的备份/恢复机制并不理想,但鉴于它只是一个评论,我想我可以不用。我唯一的另一个观察是将psql / pg_restore运行到远程主机的速度很慢。希望新database migration service会增加一些内容。

2 个答案:

答案 0 :(得分:0)

考虑到您的转储数据库文件大约为550MB,我认为使用亚马逊指南这样做是出路。我希望它有所帮助。

Importing Data into PostgreSQL on Amazon RDS

答案 1 :(得分:0)

我认为它没有停止。它只是重新创建索引,外键等。使用pg_restore -v查看还原过程中发生了什么。检查日志或将输出重定向到文件以在导入后检查是否有任何错误,因为这很详细。

另外,我建议使用目录格式(pg_dump -v -Fd),因为它允许并行恢复(pg_restore -v -j4)。

您可以忽略此ERROR: must be owner of extension plpgsql。这只是对扩展程序设置注释,无论如何都会默认安装。这是由于PostgreSQL的RDS风格的特殊性造成的,它不允许在作为postgres用户连接时恢复数据库。