On 01/11/06, Matthew Flanagan <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I've been testing out the schema-evolution branch again and hit the
> same issue I was having before where it was trying to evolve a model
> that hadn't changed. Here are my minimal test case models for this
> issue:
>
> from django.db import models
>
> class FooType(models.Model):
>     name = models.CharField(maxlength=64, unique=True)
>
> class Foo(models.Model):
>     name = models.CharField(maxlength=64)
>     foo_type = models.ForeignKey(FooType)
>
> running './manage.py sqlevolve myapp' outputs:
>
> BEGIN;
> ALTER TABLE "myapp_foo" ADD COLUMN "name_tmp" varchar(64);
> UPDATE "myapp_foo" SET "name_tmp" = "name";
> ALTER TABLE "myapp_foo" DROP COLUMN "name";
> ALTER TABLE "myapp_foo" RENAME COLUMN "name_tmp" TO "name";
> ALTER TABLE "myapp_foo" ALTER COLUMN "name" SET NOT NULL;
> COMMIT;
>
> Note that if I rename the FooType model to BarType and do a fresh
> install of my application again then run './manage.py sqlevolve myapp'
> it outputs the expected:
>
> BEGIN;
> COMMIT;
>
> Same goes if I rename the Foo.name field to something else.
>
> This led me to think that some code somewhere is not matching on the
> full table name. After a bit of digging I ended up at the
> get_known_column_flags() function in
> django/db/backends/postgresql/introspection.py on line 100 it reads:
>
> cursor.execute("select pg_constraint.conname, pg_constraint.contype,
> pg_attribute.attname from pg_constraint, pg_attribute where
> pg_constraint.conrelid=pg_attribute.attrelid and
> pg_attribute.attnum=any(pg_constraint.conkey) and
> pg_constraint.conname ~ '^%s'" % table_name )
>
> Changing '^%s' to '^%s_' fixes it but I'm not sure if this is the
> right way to do it.
>
> Is it?

Nope it isn't. If i rename the FooType model to Foo_Type I get the
same issue as before. ie. sqlevolve

Back to my original models, FooType and Foo. The output from the above
select statement is:

# select pg_constraint.conname, pg_constraint.contype,
pg_attribute.attname from pg_constraint, pg_attribute where
pg_constraint.conrelid=pg_attribute.attrelid and
pg_attribute.attnum=any(pg_constraint.conkey) and
pg_constraint.conname ~ '^myapp_foo';
       conname                | contype | attname
------------------------------------+------------+---------
 myapp_foo_pkey               | p           | id
 myapp_footype_pkey         | p           | id
 myapp_footype_name_key | u           | name
(3 rows)

This is where I reach the boundaries of my postgres knowledge.

Any help would be appreciated.

thanks

>
> regards
>
> matthew
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers
-~----------~----~----~----~------~----~------~--~---

Reply via email to