2014/09/11
PostgreSQL
 >  VBS + BAT でクエリの試行錯誤
昨日の関連で、VBS ファイルに PostgreSQL へのクエリを書き、その試行錯誤をバッチファイルで簡単に行う例。実行環境は 2014/08/13 の実機を参照。実際はクエリだけでなく VBS 特有の処理、例えば Excel 操作などと合わせて試行錯誤することが多いと思う。

バッチファイルの方は昨日と全く同じ。↓ VBS ファイル名に .bat を付け、同じ場所に置く。
@ECHO OFF
:LOOP
CSCRIPT %~n0 //NoLogo
ECHO ENTER to retry, Ctrl-C to cancel
PAUSE > NUL
GOTO LOOP

↓ VBS のサンプル。psql を起動し標準入力でクエリを送り、標準出力を DOS 窓に表示する。以前 PgOleDB を使う方法を書いたが(2014/06/22)、ポートが 5432 固定で、また配列型などを受け取れないため不使用。クエリ内容は、乱数をたくさん発生させてサイコロのシミュレーションに見立てたもの。各目の出た頻度を合計して表示する。
Option Explicit
Dim sql, cmd

sql = "SELECT ceil(random() * 6), count(*) " &_
" FROM generate_series(1, 100000) sub " &_
" GROUP BY 1 ORDER BY 1"

cmd = """C:/Program Files/PostgreSQL/9.3/bin/psql"" -U postgres -w -pxxxx -d xxxx"
WScript.Echo Time
With CreateObject("WScript.Shell").Exec(cmd)
.StdIn.Write sql
.StdIn.Close
With .StdOut
Do While Not .AtEndOfStream
WScript.Echo .ReadLine
Loop
End With
End With

変数の cmd に psql のパスとオプションを適宜書き込む。SQL が複数行だと書きづらいが VBS の仕様なので我慢。クエリがエラーになったらメッセージが標準エラーに出るので StdErr で受け取る必要があるが、今回は省いた。また VBS の仕様で Exec メソッドでの StdOut または StdErr が 4KB 以上だとハングアップするとか、本当は細かい点でいろいろ考慮が必要。そう言えば VBS と psql でクエリする例は ↓ かなり前にも書いた。

■ 2013/06/03 : VBS で Excel データを取り込む
http://kenpg.seesaa.net/article/364593197.html

↓ ともかく VBS と BAT を同じ場所に置いたら、BAT をダブルクリック。



列 ceil がサイコロの目、count が頻度。待機中は VBS ファイルへのアクセスがないので自由に編集でき ↓ 上書保存してすぐ再実行可能。



↓ クエリを、PgOleDB で駄目だった配列型のテストに変えて再実行。



クエリだけの試行錯誤なら、SQL をファイルに保存して psql を使えば済む。でも Excel 操作など VBS 特有の処理と連携することがあるので、VBS + BAT のひな形が時々役に立つ。
<< 列なしテーブルの使いみち
VBS 試行錯誤用バッチファイル >>