June 2017  |  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

スポンサーサイト

一定期間更新がないため広告を表示しています

PostgreSQLシングルユーザモード

JUGEMテーマ:コンピュータ

今年の書初めはBashシェルになってしまった。
昨年末に簡単なベンチマークをRaspberry pi で行った。対象としたDBMSはMySQLとSQLiteで、MySQLでの実装をSQLiteにするとどのくらい早くなるかを見るのが目的だった。
意外とMySQLの成績が良いので、PostgreSQLではどうかと試してみたところ、芳しくなくて、では、シングルユーザモードにしたらどうだろうと思い仕込んでみたら、結果は一層悪くなってしまった。

その副産物がPostgreSQLのシングルユーザモード実行シェル。バックエンドサーバを止めて使用する。ベンチマーク用なので、かなり超手抜きなのはご愛嬌。結局、ほとんど意味をなざず残念なので、書初めと称することにした。

 

#!/bin/bash -f
#
# 使い方:引数にクエリをダブルクォートで括って指定してね。
#
export PGDATA=/var/lib/postgresql/9.1/main
POSTGRES=/usr/lib/postgresql/9.1/bin/postgres
DB=testdb

if [ "$1" == "" ]; then
  exit
else
  Query=$1
fi

echo "$Query" ¥
| $POSTGRES --single -F -j $DB ¥
|& while read aLine; do ¥
#echo ${aLine:31:5}
#echo $aLine
    if [ "${aLine:31:5}" == "FATAL" ]; then ¥
      echo ${aLine:36}
      exit 5
    fi
    if [ "${aLine:40:5}" == "ERROR" ]; then ¥
      echo ${aLine:45}
      exit 3
    fi
    if [ "$aLine" == "----" ]; then ¥
      if [ "$nCount" != "" ]; then ¥
        if [ "$aRow" != "" ]; then ¥
           echo $aRow
        fi
        #echo ""
        aRow=
      fi
      nCount=$(( $nCount +1 ))
#echo "$nCount:=>"
    else ¥
#echo $aLine
      if [ "$nCount" != "" ]; then ¥
        if [ "$aLine" == "" ]; then ¥
          break
        fi
        aField=${aLine#*¥"}
        aColomn=${aField%¥"*}
        aRow="$aRow $aColomn"
        #echo -n "$aColomn "
      fi
    fi
  done

スポンサーサイト

comments

   

trackback

pagetop