title: Django 1.5: How do I add a new model field to an existing table using South without having to drop a table?
body: <p>I am running a Django 5.1 web application live on Heroku, with user data I want to preserve.</p>
  
  <p>Locally, I just added a new <code>char</code> field to an existing model, and don't want to break anything when I push to Heroku. I know Django 6 introduced a <code>migrate</code> command, but Django 5 doesn't have anything like that. I have just the <code>South</code> migration tool.</p>
  
  <p>I tried to follow the <a href="http://south.readthedocs.org/en/latest/tutorial/part1.html#changing-the-model" rel="nofollow">South basic tutorial</a> locally (on my sqlite3 db), to make sure it wouldn't break anything when I ran 'for real' up on Heroku. Everything broke...</p>
  
  <pre><code>(venv)$ python manage.py migrate forecasts
  Running migrations for forecasts:
   - Migrating forwards to 0002_auto__add_field_day_weather.
   &gt; forecasts:0001_initial
  FATAL ERROR - The following SQL query failed: CREATE TABLE "forecasts_region" ("id" integer NOT NULL PRIMARY KEY, "url" varchar(200) NOT NULL UNIQUE, "name" varchar(200) NOT NULL, "nickname" varchar(10) NOT NULL)
  The error was: table "forecasts_region" already exists
   ! Error found during real run of migration! Aborting.
  
   ! Since you have a database that does not support running
   ! schema-altering statements in transactions, we have had 
   ! to leave it in an interim state between migrations.
  
  ! You *might* be able to recover with:   = DROP TABLE "forecasts_region"; []
     = DROP TABLE "forecasts_day"; []
     = DROP TABLE "forecasts_tide"; []
  
   ! The South developers regret this has happened, and would
   ! like to gently persuade you to consider a slightly
   ! easier-to-deal-with DBMS (one that supports DDL transactions)
   ! NOTE: The error which caused the migration to fail is further up.
  Error in migration: forecasts:0001_initial
  DatabaseError: table "forecasts_region" already exists
  </code></pre>
  
  <p>I was forced to <code>DROP</code> those three tables, then rerun <code>python manage.py syncdb</code>, then <code>python manage.py migrate forecasts</code>. This added the new field, but I lost all my data in those three tables.</p>
  
  <p>I'm <em>terrified</em> of messing things up on the live version, so please, what do I do, in what order? If you can include best practices, for preserving data just in case something goes wrong, that would be greatly appreciated. Also, please hold me by the hand on this one, because I've never used <code>South</code>. Thanks!</p>