3 DBIx::Class::Manual::Troubleshooting - Got a problem? Shoot it.
5 =head2 "Can't locate storage blabla"
7 You're trying to make a query on a non-connected schema. Make sure you got
8 the current resultset from $schema->resultset('Artist') on a schema object
9 you got back from connect().
13 The C<DBIC_TRACE> environment variable controls
14 SQL tracing, so to see what is happening try
18 Alternatively use the C<< storage->debug >> class method:-
20 $class->storage->debug(1);
22 To send the output somewhere else set debugfh:-
24 $class->storage->debugfh(IO::File->new('/tmp/trace.out', 'w');
26 Alternatively you can do this with the environment variable too:-
28 export DBIC_TRACE="1=/tmp/trace.out"
30 =head2 Can't locate method result_source_instance
32 For some reason the table class in question didn't load fully, so the
33 ResultSource object for it hasn't been created. Debug this class in
34 isolation, then try loading the full schema again.
36 =head2 Can't get last insert ID under Postgres with serial primary keys
38 Older L<DBI> and L<DBD::Pg> versions do not handle C<last_insert_id>
39 correctly, causing code that uses auto-incrementing primary key
40 columns to fail with a message such as:
42 Can't get last insert id at /.../DBIx/Class/Row.pm line 95
44 In particular the RHEL 4 and FC3 Linux distributions both ship with
45 combinations of L<DBI> and L<DBD::Pg> modules that do not work
48 L<DBI> version 1.50 and L<DBD::Pg> 1.43 are known to work.
50 =head2 ... Can't locate object method "source_name" via package ...
52 There's likely a syntax error in the table class referred to elsewhere
53 in this error message. In particular make sure that the package
54 declaration is correct, so for a schema C< MySchema > you need to
55 specify a fully qualified namespace: C< package MySchema::MyTable; >
58 =head2 syntax error at or near "<something>" ...
60 This can happen if you have a relation whose name is a word reserved by your
61 database, e.g. "user":
63 package My::Schema::User;
65 __PACKAGE__->table('users');
66 __PACKAGE__->add_columns(qw/ id name /);
67 __PACKAGE__->set_primary_key('id');
71 package My::Schema::ACL;
73 __PACKAGE__->table('acl');
74 __PACKAGE__->add_columns(qw/ user_id /);
75 __PACKAGE__->belongs_to( 'user' => 'My::Schema::User', 'user_id' );
79 $schema->resultset('ACL')->search(
83 '+select' => [ 'user.name' ]
87 The SQL generated would resemble something like:
89 SELECT me.user_id, user.name FROM acl me
90 JOIN users user ON me.user_id = user.id
92 If, as is likely, your database treats "user" as a reserved word, you'd end
93 up with the following errors:
95 1) syntax error at or near "." - due to "user.name" in the SELECT clause
97 2) syntax error at or near "user" - due to "user" in the JOIN clause
99 The solution is to enable quoting - see
100 L<DBIx::Class::Manual::Cookbook/Setting_quoting_for_the_generated_SQL> for
103 Note that quoting may lead to problems with C<order_by> clauses, see
104 L<... column "foo DESC" does not exist ...> for info on avoiding those.
106 =head2 column "foo DESC" does not exist ...
108 This can happen if you've turned on quoting and then done something like
111 $rs->search( {}, { order_by => [ 'name DESC' ] } );
113 This results in SQL like this:
115 ... ORDER BY "name DESC"
117 The solution is to pass your order_by items as scalar references to avoid
120 $rs->search( {}, { order_by => [ \'name DESC' ] } );
122 Now you'll get SQL like this:
124 ... ORDER BY name DESC