[Catalyst] create model

Ash Berlin ash_cpan at firemirror.com
Fri Jan 30 22:18:29 GMT 2009


On 30 Jan 2009, at 21:40, gdewitt wrote:

>
> Hi, I am using Catalyst, DBIx and postrges.  My tables have primary  
> keys.
> When you create a primary key in postres a unique index is implicitly
> created as well.  So the majority of my tables have a constraint  
> that looks
> like this:
>
>  CONSTRAINT table_pkey PRIMARY KEY (id)
>
> I use catalyst to create my DBIx table definitions like this:
>
> create.pl model MyModel ....
>
> The resulting DBIx table definitions reflect the primary key as well  
> as the
> unique constraint like this:
>
> __PACKAGE__->set_primary_key("id");
> __PACKAGE__->add_unique_constraint("table_pkey", ["id"]);
>
> So if I write a query like this:
>
>    my $result = $c->model('Schema::Table')->find( 'x' );
>
> it results in the following SQL:
>
> SELECT x,y,z FROM table me WHERE (  ( me.id = 'x' ) OR ( me.id =  
> 'x' )  );
>
> This is happening because the 'find' function checks all the unique
> constraints on the table, and in this case there are 2 ('primary' :  
> 'id' and
> 'table_pkey' : 'id')
>
> I can get around this by writing my query like this:
>
>    my $result = $c->model('Schema::Table')->find( { 'id'=> 'x' }, {
> 'key'=>'primary' } );
>
> But that is a pain.
>
> Does anyone know a way that I can stop the 2nd unique constraint:
>
> __PACKAGE__->add_unique_constraint("table_pkey", ["id"]);
>
> from being generated in my table definition files?
>

simple. Ignore the fact that Pg created a unique index to go with the  
primary key - you created just a primary key, what Pg does is  
irrelevant.

i.e. get rid of the add_unique_constraint. That is only needed if you  
explicitly create (and want to search on) a subsequent unique  
constraint.

-ash



More information about the Catalyst mailing list