diff options
-rwxr-xr-x | bin/fix-sequences | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/bin/fix-sequences b/bin/fix-sequences index be240226f..55639d962 100755 --- a/bin/fix-sequences +++ b/bin/fix-sequences @@ -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,9 +39,17 @@ 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\('"(\w+_seq)"'::text\)$/ + ) { + $seq = $1; + } + warn "fixing sequence for $table\n"; - $dbh->do( "SELECT setval( '${table}_${primary_key}_seq', + $dbh->do( "SELECT setval( '$seq', ( SELECT max($primary_key) FROM $table ) );" ) or die $dbh->errstr; |