3 # run dbdef-create first!
6 use FS::UID qw(adminsuidsetup driver_name);
7 use FS::Record qw(dbdef);
9 my $user = shift or die &usage;
10 my $dbh = adminsuidsetup $user;
14 #false laziness w/fs-setup
15 my @tables = scalar(@ARGV)
17 #: grep { ! /^h_/ } $schema->tables;
19 foreach my $table ( @tables ) {
21 my $tableobj = $schema->table($table)
22 or die "unknown table $table (did you run dbdef-create?)\n";
24 my $primary_key = $tableobj->primary_key;
25 next unless $primary_key;
27 my $col = $tableobj->column($primary_key);
30 my $default = ref($col->default) ? ${ $col->default } : $col->default;
34 next unless uc($col->type) eq 'SERIAL'
35 || ( driver_name eq 'Pg'
37 && $default =~ /^nextval\(/i
39 || ( driver_name eq 'mysql'
40 && defined($col->local)
41 && $col->local =~ /AUTO_INCREMENT/i
45 if ( $table =~ /^(objectcustomfields|objectcustomfieldvalues)$/ ) {
49 my $seq = "${table}_${primary_key}$suffix";
50 if ( driver_name eq 'Pg'
52 && $default =~ /^nextval\('"(public\.)?(\w+_seq)"'::(text|regclass)\)$/
57 warn "fixing sequence for $table\n";
60 my $sql = "SELECT setval( '$seq',
61 ( SELECT max($primary_key) FROM $table ) );";
63 #warn $col->default. " $seq\n$sql\n";
64 $dbh->do( $sql ) or die $dbh->errstr;
68 $dbh->commit or die $dbh->errstr;
69 $dbh->disconnect or die $dbh->errstr;
72 die "Usage:\n fix-sequences user [ table table ... ] \n";