This will let Class::DBI::Pg deal with tables which have a primary key consisting of more than one column (e.g. CREATE TABLE foo ( a integer, b integer, PRIMARY KEY ( a, b ) ))
Patch sent to author as well, but just in case anyone else is interested . . .
--- /usr/lib/perl5/site_perl/5.8.0/Class/DBI/Pg.pm 2003-09-10 03:59:40.000000000 -0400 +++ Class/DBI/Pg.pm 2004-05-05 13:53:57.000000000 -0400 @@ -23,7 +23,7 @@ WHERE relname = ?) SQL $sth->execute($table); - my $prinum = $sth->fetchrow_array; + my @prinums = split( /\s+/, ( $sth->fetchrow_array )[0] ); $sth->finish; # find all columns @@ -50,17 +50,17 @@ $sth->finish; my($sequence) = $nextval_str =~ m/^nextval\('"?([^"']+)"?'::text\)/; - my(@cols, $primary); + my(@cols, @primary); foreach my $col(@$columns) { # skip dropped column. next if $col->[0] =~ /^\.+pg\.dropped\.\d+\.+$/; push @cols, $col->[0]; - next unless $prinum && $col->[1] eq $prinum; - $primary = $col->[0]; + next unless @prinums && grep $col->[1] eq $_, @prinums; + push @primary, $col->[0]; } - _croak("$table has no primary key") unless $primary; + _croak("$table has no primary key") unless @primary; $class->table($table); - $class->columns(Primary => $primary); + $class->columns(Primary => @primary); $class->columns(All => @cols); $class->sequence($sequence) if $sequence; }