Created
January 7, 2014 01:47
-
-
Save drinks/8293431 to your computer and use it in GitHub Desktop.
Choose your PKs wisely, kids.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Migration(SchemaMigration): | |
def forwards(self, orm): | |
# OMFG Get ready, we're going to change the primary key! | |
# Doing bad things, disabling triggers | |
db.execute("ALTER TABLE brainstorm_idea DISABLE TRIGGER ALL;") | |
# Dropping foreign key constraint | |
db.delete_foreign_key('brainstorm_idea', 'subsite_id') | |
db.execute('DROP INDEX brainstorm_idea_subsite_id_like') | |
db.delete_index('brainstorm_idea', ['subsite_id']) | |
# Removing primary key on 'Subsite', fields ['slug'] | |
db.delete_primary_key(u'brainstorm_subsite') | |
# Adding primary key field 'Subsite.id' | |
db.add_column(u'brainstorm_subsite', u'id', | |
self.gf('django.db.models.fields.IntegerField')(blank=True, null=True)) | |
# WOW. Have to manually create AutoFields. Thanks Django! | |
db.execute('CREATE SEQUENCE brainstorm_subsite_id_seq;') | |
db.execute("UPDATE brainstorm_subsite SET id = nextval('brainstorm_subsite_id_seq');") | |
db.execute("ALTER TABLE brainstorm_subsite ALTER COLUMN id SET DEFAULT nextval('brainstorm_subsite_id_seq');") | |
db.execute('ALTER SEQUENCE brainstorm_subsite_id_seq OWNED BY brainstorm_subsite.id;') | |
db.execute("SELECT setval('brainstorm_subsite_id_seq', q.i) FROM(SELECT MAX(id) i FROM brainstorm_subsite) q;") | |
# Now make it the pk | |
db.create_primary_key('brainstorm_subsite', ['id']) | |
# Updating foreign key values | |
db.execute('''UPDATE brainstorm_idea idea | |
SET subsite_id = subsite.id | |
FROM brainstorm_subsite subsite | |
WHERE(idea.subsite_id = subsite.slug);''') | |
# Casting the fk to an integer | |
db.execute("ALTER TABLE brainstorm_idea ALTER COLUMN subsite_id TYPE integer USING CAST(subsite_id AS integer);") | |
# Re-adding foreign key constraint | |
fk_sql = db.foreign_key_sql('brainstorm_idea', 'subsite_id', 'brainstorm_subsite', 'id') | |
db.execute(fk_sql) | |
# Changing field 'Subsite.slug' to a plain old slugfield | |
db.alter_column(u'brainstorm_subsite', 'slug', self.gf('django.db.models.fields.SlugField')(max_length=50)) | |
# Adding unique constraint on 'Subsite', fields ['slug'] | |
db.create_unique(u'brainstorm_subsite', ['slug']) | |
# Re-enabling triggers | |
db.execute("ALTER TABLE brainstorm_idea ENABLE TRIGGER ALL;") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment