On 15/03/2017 7:12 PM, Stefano Tranquillini wrote:
Hi people.

I've to do a migration for the database, specifically I've to rename a table.

To do so I've a RunPython that runs this sql statemnet
`ALTER TABLE "old_table" RENAME TO "new_table"`
First question: should I use https://docs.djangoproject.com/en/1.8/ref/migration-operations/#renamemodel , does it do the same?

I believe it does the same ... certainly worked for me with Postgres. Make an empty migration.

    operations = [

        migrations.RenameModel('Oldname', 'Newname'),

        migrations.AlterModelTable('Newname', 'appname_newname'),

    ]


Will these operation update all the refrences in the code, such that django will keep working without problems?

Definitely not.

The process I used was ...

1. Change the model name in your code

2. Run the dev server and fix everything which barfs. I think unit testing creates its test database from your models rather than by copying the database so unit tests should be fixable with search/replace. However, any fixtures involved will undoubtedly spoil things. ymmv.

3. Migrate and resolve any remaining issues.

Rollout to the two servers sounds like a transation nightmare to me. I think I'd say some things are possible but expensive because you have to set up duplicated systems for practicing such rollouts or you down the system for a short time to make sure the data is protected.

ALSO

I have had migration squashing issues (circular references) since then. It may or may not be the reason but I think in hindsight I would squash all migrations prior to renaming the table.

Good luck

Mike


Now, I'm using postgres and I've two servers using the same DB, let's call them A and B. when I'll rename the table the code will break, so the procedure will be:

- stop A
- update A
- migrate
- stop B
- start A

The problem is, that I've to be sure that migrations are atomic and have a transaction that locks the DB (or that table). Reading the documentation I found: /On databases that do support DDL transactions (SQLite and PostgreSQL), |RunPython| operations do not have any transactions automatically added besides the transactions created for each migration./ - https://docs.djangoproject.com/en/1.10/ref/migration-operations/ (I'm using 1.8)
If i go with renameModel, will it be in a single transaction?

What I want to avoid is to stop both A and B to perform migrations.
It would be better to do the migration and then stop B, this should have a down that is smaller compared to stopping all services and the run them again.

any suggestion?

Ciao


--
You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/3205d24d-537b-4819-b2e4-e1adc31a3d46%40googlegroups.com <https://groups.google.com/d/msgid/django-users/3205d24d-537b-4819-b2e4-e1adc31a3d46%40googlegroups.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django 
users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/9495b772-78d1-95ad-1063-4742326cb235%40dewhirst.com.au.
For more options, visit https://groups.google.com/d/optout.

Reply via email to