#24264: foreign key constraint error migrating integer pk to CharField
----------------------------+-------------------------------------
     Reporter:  timgraham   |                    Owner:  nobody
         Type:  Bug         |                   Status:  new
    Component:  Migrations  |                  Version:  1.8alpha1
     Severity:  Normal      |               Resolution:
     Keywords:              |             Triage Stage:  Accepted
    Has patch:  0           |      Needs documentation:  0
  Needs tests:  0           |  Patch needs improvement:  0
Easy pickings:  0           |                    UI/UX:  0
----------------------------+-------------------------------------
Changes (by MarkusH):

 * cc: MarkusH (added)
 * stage:  Unreviewed => Accepted


Comment:

 Although I haven't tried to reproduce this particular issue, I wouldn't be
 surprised if this is related to #24241

 A brief discussion on IRC mentioned this traceback:

 {{{#!python
 Traceback (most recent call last):
   File "manage.py", line 10, in <module>
     execute_from_command_line(sys.argv)
   File "/home/tim/code/django/django/core/management/__init__.py", line
 338, in execute_from_command_line
     utility.execute()
   File "/home/tim/code/django/django/core/management/__init__.py", line
 330, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/home/tim/code/django/django/core/management/commands/test.py",
 line 30, in run_from_argv
     super(Command, self).run_from_argv(argv)
   File "/home/tim/code/django/django/core/management/base.py", line 390,
 in run_from_argv
     self.execute(*args, **cmd_options)
   File "/home/tim/code/django/django/core/management/commands/test.py",
 line 74, in execute
     super(Command, self).execute(*args, **options)
   File "/home/tim/code/django/django/core/management/base.py", line 441,
 in execute
     output = self.handle(*args, **options)
   File "/home/tim/code/django/django/core/management/commands/test.py",
 line 90, in handle
     failures = test_runner.run_tests(test_labels)
   File "/home/tim/code/django/django/test/runner.py", line 210, in
 run_tests
     old_config = self.setup_databases()
   File "/home/tim/code/django/django/test/runner.py", line 166, in
 setup_databases
     **kwargs
   File "/home/tim/code/django/django/test/runner.py", line 370, in
 setup_databases
     serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE",
 True),
   File "/home/tim/code/django/django/db/backends/base/creation.py", line
 369, in create_test_db
     test_flush=True,
   File "/home/tim/code/django/django/core/management/__init__.py", line
 120, in call_command
     return command.execute(*args, **defaults)
   File "/home/tim/code/django/django/core/management/base.py", line 441,
 in execute
     output = self.handle(*args, **options)
   File "/home/tim/code/django/django/core/management/commands/migrate.py",
 line 213, in handle
     executor.migrate(targets, plan, fake=options.get("fake", False))
   File "/home/tim/code/django/django/db/migrations/executor.py", line 93,
 in migrate
     self.apply_migration(states[migration], migration, fake=fake)
   File "/home/tim/code/django/django/db/migrations/executor.py", line 129,
 in apply_migration
     state = migration.apply(state, schema_editor)
   File "/home/tim/code/django/django/db/migrations/migration.py", line
 110, in apply
     operation.database_forwards(self.app_label, schema_editor, old_state,
 project_state)
   File "/home/tim/code/django/django/db/migrations/operations/fields.py",
 line 200, in database_forwards
     schema_editor.alter_field(from_model, from_field, to_field)
   File "/home/tim/code/django/django/db/backends/base/schema.py", line
 484, in alter_field
     old_db_params, new_db_params, strict)
   File "/home/tim/code/django/django/db/backends/base/schema.py", line
 633, in _alter_field
     params,
   File "/home/tim/code/django/django/db/backends/base/schema.py", line
 107, in execute
     cursor.execute(sql, params)
   File "/home/tim/code/django/django/db/backends/utils.py", line 65, in
 execute
     return self.cursor.execute(sql, params)
   File "/home/tim/code/django/django/db/utils.py", line 95, in __exit__
     six.reraise(dj_exc_type, dj_exc_value, traceback)
   File "/home/tim/code/django/django/db/backends/utils.py", line 65, in
 execute
     return self.cursor.execute(sql, params)
 django.db.utils.ProgrammingError: foreign key constraint
 "fundrais_donor_id_50d7dcbcff28bd90_fk_fundraising_djangohero_id" cannot
 be implemented
 DETAIL:  Key columns "donor_id" and "id" are of incompatible types:
 integer and character varying.
 }}}

 and this SQL

 {{{#!sql
 BEGIN;
 ALTER TABLE "fundraising_donation" DROP CONSTRAINT
 "fundraising_donation_donor_id_50d7dcbcff28bd90_fk";
 ALTER TABLE "fundraising_djangohero" ALTER COLUMN "id" TYPE varchar(12);
 ALTER TABLE "fundraising_donation" ALTER COLUMN "donor_id" TYPE
 varchar(12);
 ALTER TABLE "fundraising_donation" ADD CONSTRAINT
 "fundraising_donation_donor_id_50d7dcbcff28bd90_fk" FOREIGN KEY
 ("donor_id") REFERENCES "fundraising_djangohero" ("id") DEFERRABLE
 INITIALLY DEFERRED;
 }}}

 The interesting part is the difference between the constraint names.

--
Ticket URL: <https://code.djangoproject.com/ticket/24264#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/067.26e271730fdd677dd449eb7d7a1240dd%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to