将 Django 开发数据库 (.sql3) 迁移到 Heroku

Posted

技术标签:

【中文标题】将 Django 开发数据库 (.sql3) 迁移到 Heroku【英文标题】:Migrate Django development database (.sql3) to Heroku 【发布时间】:2015-04-23 07:05:52 【问题描述】:

如何将他们的 Django .sql3 开发数据库迁移到 heroku?

每个 here 和 here 我试过:heroku pg:psql --app sblic < database.sql3 但我的 Django 管理员没有显示新的上传(即使在 syncdb/migrate/ 或 collectstatic 之后

【问题讨论】:

嗯:docs.aws.amazon.com/AmazonS3/latest/UG/… 将数据库和代码移动到 Heroku 的最简单方法就是通过 git push。 您的问题显示了一个 SQLite3 数据库。这与显示如何推送 Postgres 数据库的示例有什么关系?我认为您需要重新陈述您的问题。 @Brandon 在 Heroku 中,默认数据库是 Postgres,在本地环境中使用 django 默认是 SQLite3。 【参考方案1】:

Heroku 命令行工具使用 psql 二进制文件。您必须在本地开发机器上安装 PostgreSQL 才能使 psql 可用。来自(文档)[https://devcenter.heroku.com/articles/heroku-postgresql#pg-psql]:

您必须在系统上安装 PostgreSQL 才能使用 heroku pg:psql。

实际上,您可以继续将 SQLite 数据库与 Heroku 一起使用,但不建议这样做,因为如果您将其重新部署到另一个 dyno,它将被您的本地副本重写。建议将数据迁移到 psql,如https://devcenter.heroku.com/articles/sqlite3

所述

【讨论】:

很好,但我有一个 .sql3 数据库,所以我需要先转换为 postgres...【参考方案2】:

也许有办法直接将sql3文件上传到Heroku,但我选择了最确定的路径(将本地sql3 db转换为postgre db和upload a dump of postgre db to Heroku via pgbackups tool):

    Create a dump of your sql3 database as a json file 安装 PostgreSql 并在 Path 环境变量 create a postgre user and database 中安装 bin 目录(或者只是计划使用您在安装 postgresql 时创建的初始超级用户帐户) 用reference to your newly created postgre database 更新您的settings.py(注意,'HOST' 可能需要设置为'localhost''user' 是您的postgre 用户登录名) 运行 python manage.py syncdb 启动新的 postgre 数据库 可选:如有必要,truncate your postgre db of contenttypes load your dump from step 1(如果您有夹具问题,see here) 现在您有一个工作的 postgre 本地数据库。 To migrate, first create a postgre dump 将您的 postgre 转储发布到可通过 URL 访问的位置(例如上一个链接中建议的 drop box 或 amazon s3)。 执行pgbackups restore command, referencing your dump url 您的 heroku 应用现在应该引用本地数据库的内容。

【讨论】:

这总是给出夹具错误。即使在倾倒时添加了--natural-foreign --natural-primary 之类的参数。 @DanielRoseman 先生,您知道解决方法吗?请帮忙。

以上是关于将 Django 开发数据库 (.sql3) 迁移到 Heroku的主要内容,如果未能解决你的问题,请参考以下文章

Django 重建所有迁移

在 Django 中处理生产迁移和开发迁移

Django迁移:关系不存在

Django 迁移:sqlite3 开发数据库、Amazon Elastic Beanstalk 和 Amazon RDS postgresql 实时数据库

如何将 Django 模型从 mysql 迁移到 sqlite(或在任何两个数据库系统之间)?

迁移到现有数据库而不匹配迁移