Re: [CDBI] dbi_commit not adding everything under mod_perl
Steve Sims <[email protected]>
| Newsgroups | gmane.comp.lang.perl.modules.class-dbi |
|---|---|
| Message-ID | <[email protected]> |
Hi Perrin, Thanks for the reply, On 18 Apr 2006, at 18:36, Perrin Harkins wrote: > On Tue, 2006-04-18 at 18:06 +0100, Steve Sims wrote: >> One major problem I'm facing though is that records added to the >> database from scripts run under mod_perl seem to vanish. > > Check that you are calling dbi_commit (or have explicitly turned on > AutoCommit) and that your isolation level is set to something like > READ > COMMITTED. Yeah - I'm making calls to dbi_commit - and have AutoCommit turned off. I don't know how to check the isolation level. > Also, how do you know the objects which should be there are not there? > Are you looking through the terminal, or is there some code that > should > find them but isn't? Can you show it? 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. 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. 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. I suspect that the regular command line Perl interpreter doesn't garbage collect quite as aggressively as mod_perl, so when these scripts are run outside of mod_perl they execute just fine. The implication of this if I'm right is that my scripts are doing things wrong and should be keeping references to all newly created Class::DBI record objects until such time as they have been committed to the database. If I'm right about this, then I guess I'm just lucky that my scripts work with the regular command line Perl interpreter. Steve