X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=bin%2Ffix-sequences;h=dc4abd7513cbf7eca6c471f0fce948a95bb706d2;hp=be240226f8d511d1259a16097c8180c60b8c63b3;hb=1f2021c9b76da7cc59e2a981fbac6b24312876d2;hpb=232897b9389df4dca4773873e6e5d638ac5e8c4b diff --git a/bin/fix-sequences b/bin/fix-sequences index be240226f..dc4abd751 100755 --- a/bin/fix-sequences +++ b/bin/fix-sequences @@ -1,8 +1,10 @@ #!/usr/bin/perl -Tw +# run dbdef-create first! + use strict; use DBI; -use DBIx::DBSchema 0.21; +use DBIx::DBSchema 0.26; use DBIx::DBSchema::Table; use DBIx::DBSchema::Column; use DBIx::DBSchema::ColGroup::Unique; @@ -28,6 +30,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 +41,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; }