Steps needed to move postgres DB from Heroku to an Azure hosted Linux-based VM (Django app)
我有一个postgres数据库,现在有40个表位于Heroku上。它是一个Django应用程序,总行数约为500万。
我想将所有这些迁移到Azure VM中的精确副本(已经正确安装并设置了postgres)。
进行此迁移的最安全,最干净的方法是什么?
以下是我脑海中的步骤:
1)通过以下方式准备Azure VM:
2)登录Heroku命令行,然后运行命令heroku maintenance:on
3)接下来,运行命令heroku run pg_dump -C dbname | bzip2 | ssh myusername@hostname"bunzip2 | psql mydatabase"(来源:这里)
而已。没有syncdb可以在任何时候创建表结构或任何东西。
任何人都可以评论这些步骤,并在需要的地方纠正吗?谢谢!
注意:如果需要,请询问更多信息
-
您应该使用例如Docker或Vagrant在PC上"练习"迁移,以确定使Azure实例处于就绪状态所需的步骤......必然会有一些意想不到的步骤!
-
可能重复的stackoverflow.com/questions/33912608/…
-
@ BrijRajSingh-MSFT:是的,我们记得这个问题。 但是你的答案不是curl -o latest.dump heroku pg:backups public-url --app 只是一种获取数据库备份的方法吗?
-
这是正确的,而OP的大部分步骤都非常正确。
-
好吧,我自己就是那个问题的OP,之后我用这种方式尝试了pg_restore:pg_restore --verbose --clean --no-acl --no-owner -h example.cloudapp.net -U postgres -d mydb /home/mhb11/e38862b4-32bd-41b8-9b1c-fcaa9734b1f8?dl=0但是我遇到了很多错误而且没有用。 数据库仍处于未迁移状态。 您如何看待我在这个问题中概述的步骤? 看到任何异常?
-
例如,我得到100个错误,如:pg_restore: [archiver (db)] could not execute query: ERROR: relation"user_sessions_session_expire_date" already exists Command was: CREATE INDEX user_sessions_session_expire_date ON user_sessions_session USING btree (expire_date);或pg_restore: [archiver (db)] Error from TOC entry 2355; 2606 16916 FK CONSTRAINT user_id_refs_id_4d uv4 pg_restore: [archiver (db)] could not execute query: ERROR: constraint"user_id_refs_id_43c39" for relation"auth_user_user_permissions" already exists Command was: ALTER TABLE ONLY ath_user_user_permissions
heroku pg:backups capture(捕获pg备份)
curl -o latest.dump heroku pg:backups public-url(将pg备份下载到本地计算机)
ls -lh latest.dump(检查下载文件的大小,因此您确定已下载完整文件)
scp -P latest.dump [email protected]:/home/user(这会将文件传输到您的远程计算机)
然后在你的远程机器上:
pg_restore --verbose --clean --no-acl --no-owner -U myuser -d mydb latest.dump
希望这能完成工作。