【发布时间】:2016-07-18 15:00:37
【问题描述】:
我有一个在数字海洋上运行的 Django postgres db (v9.3.10),并正在尝试将其迁移到 Amazon RDS (postgres v 9.4.5)。 RDS 是一个 db.m3.xlarge 实例,大小为 300GB。我已经倾倒了 Digital Ocean 数据库:
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 的更好方法提出建议吗?
编辑:
查看数据库用户,DO 数据库如下所示:
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 ... ...
所以在我看来这不是权限问题,因为
适合任何人的解决方案:
我终于得到了这个工作:
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 能添加一些东西。
【问题讨论】:
-
我现在已将 RDS 更改为使用相同的 postgres 版本,但仍然没有运气!我尝试直接尝试使用 psql 以非自定义格式转储管道,但也无法正常工作。请帮忙!
标签: django database postgresql database-migration