--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use FS::UID qw( adminsuidsetup driver_name );
+use FS::Record qw( dbdef );
+
+my $user = shift or die;
+my $dbh = adminsuidsetup $user;
+
+my $schema = dbdef();
+
+my @tables = scalar(@ARGV)
+ ? @ARGV
+ : grep { ! /^h_/ } $schema->tables;
+
+foreach my $table ( @tables ) {
+ my $tableobj = $schema->table($table)
+ or die "unknown table $table (did you run dbdef-create?)\n";
+
+ my $primary_key = $tableobj->primary_key;
+ next unless $primary_key;
+
+ my $col = $tableobj->column($primary_key);
+
+#warn "$table ". $col->type;
+#warn "$table ". $col->default;
+
+ next if uc($col->type) eq 'SERIAL'
+ || ( driver_name eq 'Pg'
+ && defined($col->default)
+ && $col->quoted_default =~ /^nextval\(/i
+ )
+ || ( driver_name eq 'mysql'
+ && defined($col->local)
+ && $col->local =~ /AUTO_INCREMENT/i
+ );
+
+ my $value = FS::Record->scalar_sql("SELECT max($primary_key) FROM $table")
+ or next;
+
+ warn "setting counter for $table to $value\n";
+ open(FILE, ">/usr/local/etc/freeside/counters.DBI:Pg:dbname=freeside/$table.$primary_key")
+ or die $!;
+ print FILE "#COUNTER-1.0\n$value\n";
+ close FILE or die $!;
+
+}