X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=bin%2Ffix-sequences;h=d5349ee74b0ee6f3213489b1af751482f6c8e71a;hb=cbf32a25fcfc38632d1262ad8261e679e1c9b7c5;hp=f193e21d44ec57f510032b2149933c0579ba5d44;hpb=b77d5769face5c38dd34c37e98a8fce47c4e15de;p=freeside.git diff --git a/bin/fix-sequences b/bin/fix-sequences index f193e21d4..d5349ee74 100755 --- a/bin/fix-sequences +++ b/bin/fix-sequences @@ -7,7 +7,7 @@ use DBIx::DBSchema::Table; use DBIx::DBSchema::Column; use DBIx::DBSchema::ColGroup::Unique; use DBIx::DBSchema::ColGroup::Index; -use FS::UID qw(adminsuidsetup); +use FS::UID qw(adminsuidsetup driver_name); use FS::Record qw(dbdef); my $user = shift or die &usage; @@ -28,6 +28,7 @@ foreach my $table ( @tables ) { my $col = $tableobj->column($primary_key); + next unless uc($col->type) eq 'SERIAL' || ( driver_name eq 'Pg' && defined($col->default) @@ -38,11 +39,22 @@ foreach my $table ( @tables ) { && $col->local =~ /AUTO_INCREMENT/i ); + my $seq = "${table}_${primary_key}_seq"; + if ( driver_name eq 'Pg' + && defined($col->default) + && $col->default =~ /^nextval\('"(public\.)?(\w+_seq)"'::text\)$/ + ) { + $seq = $2; + } + warn "fixing sequence for $table\n"; - $dbh->do( "SELECT setval( '${table}_${primary_key}_seq', - ( SELECT max($primary_key) FROM $table ) );" ) - or die $dbh->errstr; + + my $sql = "SELECT setval( '$seq', + ( SELECT max($primary_key) FROM $table ) );" ); + + warn $col->default. " $seq\n$sql\n"; + $dbh->do( $sql ) or die $dbh->errstr; } @@ -50,6 +62,6 @@ $dbh->commit or die $dbh->errstr; $dbh->disconnect or die $dbh->errstr; sub usage { - die "Usage:\n create-history-tables user [ table table ... ] \n"; + die "Usage:\n fix-sequences user [ table table ... ] \n"; }