2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DB移行時の整合性チェック

Last updated at Posted at 2017-07-05

データ移行をした後、新旧DBの整合性チェックをいくつかのテーブルの中身見てOK!
の様にしていまして、、

これだと、不十分 & 非効率だけど、開発にも、確認にもそんなに時間を掛けられないなと思って放置していたら!
こんな記事を見つけました。

新旧テーブルのカウントを比較しているスクリプトです。
こちらを流用させて頂きました。

こちらの記事では、mysqlだったのでpostgresql用に変更 + 少しアレンジ

DB_check.sh
#!/bin/bash
SOURCE_PASSWORD=""
SOURCE_DB_NAME=""
SOURCE_USER_NAME=""
SOURCE_HOST_NAME=""
SOURCE_PASSWORD=""
SOURCE_PORT=""
SOURCE_OPTIONS="-U $SOURCE_USER_NAME -h $SOURCE_HOST_NAME -p $SOURCE_PORT -d $SOURCE_DB_NAME"

TARGET_PASSWORD=""
TARGET_DB_NAME=""
TARGET_USER_NAME=""
TARGET_HOST_NAME=""
TARGET_PASSWORD=""
TARGET_PORT=""
TARGET_OPTIONS="-U $TARGET_USER_NAME -h $TARGET_HOST_NAME -p $TARGET_PORT -d $TARGET_DB_NAME"

# 指定したデーベースのテーブル名を全て取得
CMD="echo 'select relname as TABLE_NAME from pg_stat_user_tables;' | psql $TARGET_OPTIONS -t"
TABLES=(`eval $CMD`)

# 各テーブルごとにcountの結果を比較
export TOTAL_ERROR_CODE=0
for table in "${TABLES[@]}"
do
    export PGPASSWORD=$SOURCE_PASSWORD
    SOURCE_SQL="select count(*) FROM $table;"
    SOURCE_CMD="echo '${SOURCE_SQL};' | psql ${SOURCE_OPTIONS} | head -3 | tail -n 1"
    SOURCE_TABLECOUNT=(`eval $SOURCE_CMD`)

    export PGPASSWORD=$TARGET_PASSWORD
    TARGET_SQL="select count(*) FROM $table"
    TARGET_CMD="echo '${TARGET_SQL};' | psql ${TARGET_OPTIONS} | head -3 | tail -n 1"
    TARGET_TABLECOUNT=(`eval $TARGET_CMD`)

    if [ $SOURCE_TABLECOUNT = $TARGET_TABLECOUNT ]; then
      echo "OK is $table"
    else
      echo "NOT EQUAL $table SOURCE_DB count $SOURCE_TABLECOUNT  :  TARGET_DB count $TARGET_TABLECOUNT"
      export TOTAL_ERROR_CODE=1
    fi
done
if [ "$TOTAL_ERROR_CODE" -gt "0" ];then
  echo '---> エラーがあります!!!!'
else
  echo '---> 整合性が確認されました'
fi

【 実行環境 】
centos7.2
postgresql9.5

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?