[Dbix-class] find_or_create problem with Pg: proposed patch

Alex Povolotsky tarkhil at over.ru
Thu Apr 3 20:20:00 BST 2008


Nigel Metheringham wrote:
>
> On 3 Apr 2008, at 16:30, Alex Povolotsky wrote:
>> Attempt to insert into postgres table with undef's for columns with 
>> default values yields an error. It is especially bad with 
>> find_or_create sub.
>>
>> I've made and tested a simple patch, it looks working ok.
>
>
> So the problem is that when you *explicitly* set column values to 
> undef (NULL), DBIC does not magically put default values in place?
Well, find_or_create initially tries to insert NULL as a primary key. 
Postgres fails on this. I do not know if it's a Postrges fault, or it is 
not specified in SQL standards, or something else; I just know that this 
patch fix problem with Postgres.
>
> Adding that (and the patch only touches Pg - thus making Pg behave 
> differently to all the other databases) appears like too much (or 
> inappropriate) magic to me.
>
> I'd be happier with something that generically puts default values in 
> when the key/value to insert was missed out altogether, but in general 
> I tend to let the DB do that.  At present it looks like default_value 
> is used only by deploy.
Well, it can be done somehow; trivially $to_insert->{$col}= 
$colinfo->{default_value}did not work. If someone more experienced in 
SQL will tell me that it is a Postgres fault and Postgres itself must be 
fixed, or that MySQL and SQLite behaves incorrectly (it's far too 
possible!) - I'd be glad.

Alex.




More information about the DBIx-Class mailing list