﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
24892	"Django migrations don't escape uppercase table name in """" when using postgres backend when changing Integer  field to Auto field"	Jacek Bzdak	nobody	"To cut long story short: in a small application I had models using domain level primary keys, that were strings, I wanted to introduce synthetic primary keys. 

Here are models before migration (I have updated `int_pk` to be unique). 

{{{
class Foo(models.Model):

  string_pk = models.CharField(
    max_length=10,
    primary_key= True
  )

  int_pk = models.IntegerField(
    null=True
  )

  class Meta:

    db_table = ""FOO""

}}}

Models after migration: 

{{{
class Foo(models.Model):

  string_pk = models.CharField(
    max_length=10,
    unique = True
  )

  int_pk = models.AutoField(
    primary_key=True
  )

  class Meta:

    db_table = ""FOO""
}}}

Generated migration: 

{{{

class Migration(migrations.Migration):

    dependencies = [
        ('testapp', '0002_foo_int_pk'),
    ]

    operations = [
        migrations.AlterField(
            model_name='foo',
            name='int_pk',
            field=models.AutoField(primary_key=True, serialize=False),
        ),
        migrations.AlterField(
            model_name='foo',
            name='string_pk',
            field=models.CharField(max_length=10, unique=True),
        ),
    ]
}}}

This migration fails with following error: 

{{{
django.db.utils.ProgrammingError: relation ""foo"" does not exist
}}}

Generated SQL is: 

{{{
ALTER TABLE ""FOO"" ALTER COLUMN ""int_pk"" TYPE integer, ALTER COLUMN ""int_pk"" SET NOT NULL;
DROP SEQUENCE IF EXISTS FOO_int_pk_seq CASCADE;
CREATE SEQUENCE FOO_int_pk_seq;
ALTER TABLE FOO ALTER COLUMN int_pk SET DEFAULT nextval('FOO_int_pk_seq');
SELECT setval('FOO_int_pk_seq', MAX(int_pk)) FROM FOO;
ALTER TABLE ""FOO"" ADD CONSTRAINT ""FOO_int_pk_5b283460a20ef820_uniq"" UNIQUE (""int_pk"");
ALTER TABLE ""FOO"" DROP CONSTRAINT ""FOO_pkey"";
ALTER TABLE ""FOO"" ADD CONSTRAINT ""FOO_int_pk_5b283460a20ef820_pk"" PRIMARY KEY (""int_pk"");
}}}

Error is caused by wollowing two lines: 

{{{
ALTER TABLE FOO ALTER COLUMN int_pk SET DEFAULT nextval('FOO_int_pk_seq');
SELECT setval('FOO_int_pk_seq', MAX(int_pk)) FROM FOO;
}}}

In these lines `FOO` should be replaced by `""FOO""`. 

I use Django `1.8.2`. "	Bug	new	Migrations	1.8	Normal				Unreviewed	0	0	0	0	0	1
