かぴぶろぐ

またかぴったかと思った・・・(´A`;)

DBのテーブル毎にcountを取って記録する

カテゴリ[ サンプルコード ]
DBを他のサーバにインポート・エクスポートした際に、一応疑ってみる。
DBのテーブル毎にcount取って、新旧サーバで一致してればOK。
postgresの場合の例。

テーブル一覧書き出しまずはテーブル一覧を書き出す
> echo "\\d" | psql -U postgres dbname 2>&1 |tee -a a.log
この状態では余分な文字が含まれてるが気にしない。
次に
> awk -F ' ' '{print $3}' a.log |grep -v '_seq' 2>&1 |tee -a tablelist.log
とやって、テーブル名だけの一覧を作る。が、前後に余分な文字が入るのでそれはtablelist.logを修正し、省く。
ホントはここも頑張ってスクリプトで省けば良いがちょっと手抜き・・・。
SQLを作る為のperlスクリプトを作成次にselect count(*) ...を実行する為の一覧を作りたいので、以下のようなスクリプトを作る。
> vi select.pl
#!/usr/bin/perl
    while( chomp($line=<>) )
    {
            $tablename = $line;
            print "select count(*) as $tablename from $tablename;\n";
    }
これを実行。
> perl select.pl tablelist.log > command.txt
SQLを実行し、ログに書く最後にSQLをcommand.txtから実行。
psql -U postgres -f command.txt dbname > count.log
これでcount.logにそれぞれのテーブルのレコード数が取れるので新旧データベースでズレが無いか確認。

http://kapi.jp/kapi_blog/205

2009年01月15日

関連カテゴリ サンプルコード

この記事のコメント

この記事にコメントする