[CDBI] dbi_commit not adding everything under mod_perl

Perrin Harkins perrin at elem.com
Wed Apr 19 18:53:54 BST 2006


On Wed, 2006-04-19 at 14:50 +0100, Steve Sims wrote:
> Yeah - I'm making calls to dbi_commit - and have AutoCommit turned  
> off.  I don't know how to check the isolation level.

It must be in the Pg docs somewhere.  It's an important thing to
understand with any RDBMS in a multi-user environment, so well worth a
few minutes to read up on.

> I'm checking the database with PgAdmin.  I see the records I updated,  
> and sequence numbers for the tables where I tried to add records, but  
> I do not see the new records I tried to add.

It really sounds like no commit is happening to me.  Try using DBI_TRACE
to check if the commit goes through or not.

> Having thought some more about this problem I suspect that the way  
> that records get created in my web site scripts could be the  
> problem.  The calls that make the new records occur in subroutines  
> and do not keep the returned record; they are just in the form  
> "MyCDBI::Obj->create(%stuff);".  I'm guessing that once that  
> subroutine exits mod_perl garbage collects the orphaned new records,  
> calling their destructor and thus effectively deleting them before  
> they are committed.

Create does an immediate insert, but you still have to call commit
afterward.

> The scripts on my site running under mod_perl that *do* manage to add  
> records to the database keep references to the records that get added  
> until dbi_commit has been called.

That shouldn't matter, as long as you call commit on the database
connection used to insert the records.

> I suspect that the regular command line Perl interpreter doesn't  
> garbage collect quite as aggressively as mod_perl

There's no difference: mod_perl is perl.

- Perrin





More information about the ClassDBI mailing list