The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

DBIx::Class::Manual::Troubleshooting - Got a problem? Shoot it.

"Can't locate storage blabla"

You're trying to make a query on a non-connected schema. Make sure you got the current resultset from $schema->resultset('Artist') on a schema object you got back from connect().

Tracing SQL

The DBIC_TRACE environment variable controls SQL tracing, so to see what is happening try

  export DBIC_TRACE=1

Alternatively use the storage->debug class method:-

  $class->storage->debug(1);

To send the output somewhere else set debugfh:-

  $class->storage->debugfh(IO::File->new('/tmp/trace.out', 'w');

Alternatively you can do this with the environment variable too:-

  export DBIC_TRACE="1=/tmp/trace.out"

Can't locate method result_source_instance

For some reason the table class in question didn't load fully, so the ResultSource object for it hasn't been created. Debug this class in isolation, then try loading the full schema again.

Can't get last insert ID under Postgres with serial primary keys

Older DBI and DBD::Pg versions do not handle last_insert_id correctly, causing code that uses auto-incrementing primary key columns to fail with a message such as:

  Can't get last insert id at /.../DBIx/Class/Row.pm line 95

In particular the RHEL 4 and FC3 Linux distributions both ship with combinations of DBI and DBD::Pg modules that do not work correctly.

DBI version 1.50 and DBD::Pg 1.43 are known to work.

... Can't locate object method "source_name" via package ...

There's likely a syntax error in the table class referred to elsewhere in this error message. In particular make sure that the package declaration is correct, so for a schema MySchema you need to specify a fully qualified namespace: package MySchema::MyTable; for example.

Perl Performance Issues on Red Hat Systems

There is a problem with slow performance of certain DBIx::Class operations using the system perl on some Fedora and Red Hat Enterprise Linux system (as well as their derivative distributions such as Centos, White Box and Scientific Linux).

Distributions affected include Fedora 5 through to Fedora 8 and RHEL5 upto and including RHEL5 Update 2. Fedora 9 (which uses perl 5.10) has never been affected - this is purely a perl 5.8.8 issue.

As of September 2008 the following packages are known to be fixed and so free of this performance issue (this means all Fedora and RHEL5 systems with full current updates will not be subject to this problem):-

  Fedora 8     - perl-5.8.8-41.fc8
  RHEL5        - perl-5.8.8-15.el5_2.1

The issue is due to perl doing an exhaustive search of blessed objects under certain circumstances. The problem shows up as performance degredation exponential to the number of DBIx::Class row objects in memory, so can be unoticeable with certain data sets, but with huge performance impacts on other datasets.

A pair of tests for susceptability to the issue, and performance effects of the bless/overload problem can be found in the DBIx::Class test suite in the file t/99rh_perl_perf_bug.t

Further information on this issue can be found in https://bugzilla.redhat.com/show_bug.cgi?id=379791, https://bugzilla.redhat.com/show_bug.cgi?id=460308 and http://rhn.redhat.com/errata/RHBA-2008-0876.html