Migrate Django development database (.sql3) to Her

2019-03-16 18:53发布

问题:

How does one migrate their Django .sql3 development database to heroku?

Per here, and here I tried: heroku pg:psql --app sblic < database.sql3 but my Django admin shows no new uploads (even after syncdb/migrate/ or collectstatic

回答1:

Heroku command line tool uses the psql binary. You have to install PostgreSQL on your local development machine to have psql available. From the (documentation)[https://devcenter.heroku.com/articles/heroku-postgresql#pg-psql]:

You must have PostgreSQL installed on your system to use heroku pg:psql.

You can in fact keep using your SQLite database with Heroku, but this is not recommended as it will be rewritten with your local copy if you re-deploy it to another dyno. Migrating the data to psql is recommended as described at https://devcenter.heroku.com/articles/sqlite3



回答2:

Perhaps there may be a way to directly upload an sql3 file to Heroku, but I went with the path of clearest certainty (convert local sql3 db to postgre db and upload a dump of postgre db to Heroku via pgbackups tool):

  1. Create a dump of your sql3 database as a json file
  2. With PostgreSql installed and with its bin directory in the Path environment variable, create a postgre user and database (or just plan on using your initial super user account created upon installing postgresql)
  3. Update your settings.py with a reference to your newly created postgre database (note, 'HOST' may need to be set as 'localhost', 'user' is your postgre user login)
  4. run python manage.py syncdb to initiate your new postgre db
  5. Optional: if necessary, truncate your postgre db of contenttypes
  6. load your dump from step 1 (if you have fixture issues, see here)
  7. Now you have a working postgre local db. To migrate, first create a postgre dump
  8. Post your postgre dump somewhere accessible by URL (such as drop box or amazon s3 as suggested in previous link).
  9. Perform pgbackups restore command, referencing your dump url
  10. Your heroku app should now reference the contents of your local db.