postgresql - Django 1.8 migration unable to cast column id to integer -


i'm migrating site sqlite backend postgres backend. we've been running native-django style migrations (i.e., not south) beginning of project. of migrations run fine, there's hiccup in our of our applications.

we got far in postgres migration. (all other apps migrated.) of migrations ran without incident on sqlite3.

processes  [x] 0001_initial  [x] 0002_auto_20150508_2149  [ ] 0003_auto_20150511_1543  [ ] 0004_auto_20150528_1739  [ ] 0005_process_upstream  [ ] 0006_auto_20150605_1436  [ ] 0007_auto_20150605_1706  [ ] 0008_milestone_prevailing_process 

these 2 migrations ran correctly:

0001_initial.py:

class migration(migrations.migration):      dependencies = [     ]      operations = [         migrations.createmodel(             name='datereason',             fields=[                 ('id', models.autofield(verbose_name='id', serialize=false, auto_created=true, primary_key=true)),                 ('name', models.charfield(unique=true, max_length=50)),                 ('active', models.booleanfield(default=true)),                 ('final', models.booleanfield(default=false)),             ],         ),         migrations.createmodel(             name='eventtype',             fields=[                 ('id', models.autofield(verbose_name='id', serialize=false, auto_created=true, primary_key=true)),                 ('name', models.charfield(unique=true, max_length=50)),                 ('active', models.booleanfield(default=true)),             ],         ),         migrations.createmodel(             name='metric',             fields=[                 ('id', models.autofield(verbose_name='id', serialize=false, auto_created=true, primary_key=true)),                 ('name', models.charfield(unique=true, max_length=50)),                 ('active', models.booleanfield(default=true)),             ],         ),         migrations.createmodel(             name='process',             fields=[                 ('id', models.autofield(verbose_name='id', serialize=false, auto_created=true, primary_key=true)),                 ('name', models.charfield(max_length=50)),                 ('sequence', models.positiveintegerfield()),                 ('sla', models.positivesmallintegerfield(null=true, blank=true)),                 ('milestone', models.booleanfield(default=false)),             ],             options={                 'ordering': ['workflow', 'sequence'],             },         ),         migrations.createmodel(             name='workflow',             fields=[                 ('id', models.autofield(verbose_name='id', serialize=false, auto_created=true, primary_key=true)),                 ('name', models.charfield(unique=true, max_length=20)),                 ('active', models.booleanfield(default=true)),             ],         ),         migrations.addfield(             model_name='process',             name='workflow',             field=models.foreignkey(to='processes.workflow'),         ),         migrations.alteruniquetogether(             name='process',             unique_together=set([('workflow', 'name'), ('workflow', 'sequence')]),         ),     ] 

0002_auto_20150508_2149.py:

class migration(migrations.migration):      dependencies = [         ('processes', '0001_initial'),     ]      operations = [         migrations.createmodel(             name='milestone',             fields=[                 ('id', models.autofield(verbose_name='id', serialize=false, auto_created=true, primary_key=true)),                 ('name', models.charfield(max_length=50)),                 ('sequence', models.positiveintegerfield()),                 ('workflow', models.foreignkey(to='processes.workflow')),             ],             options={                 'ordering': ['workflow', 'sequence'],             },         ),         migrations.altermodeloptions(             name='process',             options={'ordering': ['milestone', 'sequence']},         ),         migrations.alteruniquetogether(             name='process',             unique_together=set([('milestone', 'name'), ('milestone', 'sequence')]),         ),         migrations.removefield(             model_name='process',             name='workflow',         ),         migrations.alteruniquetogether(             name='milestone',             unique_together=set([('workflow', 'name'), ('workflow', 'sequence')]),         ),     ] 

this migration won't run: 0003_auto_20150511_1543.py

class migration(migrations.migration):      dependencies = [         ('processes', '0002_auto_20150508_2149'),     ]      operations = [         migrations.altermodeloptions(             name='process',             options={'ordering': ['milestone', 'sequence'], 'verbose_name_plural': 'processes'},         ),         migrations.alterfield(             model_name='process',             name='milestone',             field=models.foreignkey(to='processes.milestone'),         ),     ] 

attempting run migration results in:

django.db.utils.programmingerror: column "milestone_id" cannot cast automatically type integer hint:  specify using expression perform conversion. 

the current, migrated state of relevant model tables is:

class milestone(models.model):     """a collection of steps in workflow"""     workflow = models.foreignkey(workflow, blank=false, null=false)     name = models.charfield(max_length=50, blank=false, null=false)     sequence = models.positiveintegerfield(blank=false, null=false)     prevailing_process = models.foreignkey('process', blank=false, null=true, related_name='controls_milestone')      class meta:         ordering = ['workflow', 'sequence']         unique_together = (("workflow", "sequence"), ("workflow", "name"))      def __unicode__(self):         return u"{0}: {1}".format(self.workflow.name, self.name)   class process(models.model):     """a step in workflow"""     milestone = models.foreignkey(milestone, blank=false, null=false)     name = models.charfield(max_length=50, blank=false, null=false)     sequence = models.positiveintegerfield(blank=false, null=false)     sla = models.positivesmallintegerfield(blank=true, null=true)     upstream = models.foreignkey('self', blank=true, null=true, on_delete=models.set_null, related_name='downstream_set')      class meta:         ordering = ['milestone', 'sequence']         unique_together = (("milestone", "sequence"), ("milestone", "name"))         verbose_name_plural = "processes"      def __unicode__(self):         return u"{0} {1}: {2}".format(self.milestone.workflow.name, self.milestone.name, self.name) 

squashing migrations didn't help. postgres database clean except table definitions. relevant postgres table definitions in stuck form are:

scorecard=# \d processes_milestone                                    table "public.processes_milestone"    column    |         type          |                            modifiers -------------+-----------------------+------------------------------------------------------------------  id          | integer               | not null default nextval('processes_milestone_id_seq'::regclass)  name        | character varying(50) | not null  sequence    | integer               | not null  workflow_id | integer               | not null indexes:     "processes_milestone_pkey" primary key, btree (id)     "processes_milestone_workflow_id_21e7e70ae59594a8_uniq" unique constraint, btree (workflow_id, sequence)     "processes_milestone_workflow_id_363216929a08f11e_uniq" unique constraint, btree (workflow_id, name)     "processes_milestone_846c77cf" btree (workflow_id) check constraints:     "processes_milestone_sequence_check" check (sequence >= 0) foreign-key constraints:     "processes_workflow_id_53b7557aa3f3378e_fk_processes_workflow_id" foreign key (workflow_id) references processes_workflow(id) deferrable deferred  scorecard=# \d processes_process                                   table "public.processes_process"   column   |         type          |                           modifiers -----------+-----------------------+----------------------------------------------------------------  id        | integer               | not null default nextval('processes_process_id_seq'::regclass)  name      | character varying(50) | not null  sequence  | integer               | not null  sla       | smallint              |  milestone | boolean               | not null indexes:     "processes_process_pkey" primary key, btree (id)     "processes_process_milestone_20dc77c2825fcc38_uniq" unique constraint, btree (milestone, name)     "processes_process_milestone_5bb869985140bf86_uniq" unique constraint, btree (milestone, sequence) check constraints:     "processes_process_sequence_check" check (sequence >= 0)     "processes_process_sla_check" check (sla >= 0) referenced by:     table "collection_implementation" constraint "collection__process_id_6461d2ef37b3f126_fk_processes_process_id" foreign key (process_id) references processes_process(id) deferrable deferred 

i'm out of ideas. looks it's integer, , really, else expect django-specified primary key be?

the problem migration process.milestone boolean field process.milestone foreign key. postgres doesn't wait migration fail on uncastable data. wants rule alter table in advance.

if don't intend sort of data migration between 2 fields, easiest option drop , add field. in specific case, mean changing operations follows:

operations = [     migrations.removefield(         model_name='process',         name='milestone'     ),     migrations.addfield(         model_name='process',         name='milestone',         field=models.foreignkey(to='processes.milestone'),     ),     migrations.altermodeloptions(         name='process',         options={'ordering': ['milestone', 'sequence'], 'verbose_name_plural': 'processes'},     ) ] 

Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -