あと必要な権限の話とか、Windows固有の注意点がちょうどいい感じでまとまってる。
しかし PostgreSQL 8.0 Windows版って OLEDBプロバイダ,.NET データプロバイバが付属しているのもありがたい。 最初の一歩がずいぶんと楽になっている。
…割には OLEDBプロバイダ使ってる人は全然見つからんな。 IIS+PostgreSQL という選択は今だったら ASP.NET だろうし。
テーブル作成済み,INSERTとSELECTできる権限もつけているという前提での 最低限の JScript サンプル。ConnectionStringの location パラメータにデータベース名を指定するという仕様には違和感がある。
<package>
<job id="postgresqltest">
<?job debug="true" error="true"?>
<script language="JScript">
function ExecuteScalar(conn, sql)
{
var rs;
var sql;
try {
var recordsAffected;
rs = conn.Execute(sql, recordsAffected, -1); // -1 : adCmdUnspecified
if (rs.BOF && rs.EOF) { return null; } // エラー発生
rs.MoveFirst();
return rs.Fields(0).Value;
} catch(e) {
WScript.Echo(e.description);
return null;
}
}
var srcSQLConnectionString = "Provider=PostgreSQL;Data Source=localhost;location=testdb;";
var srcSQLid = "postgres";
var srcSQLpass = "********";
var conn = new ActiveXObject("ADODB.Connection");
conn.ConnectionTimeout = 15;
conn.CommandTimeout = 30;
conn.CursorLocation = 3; // adUseClient
conn.Open(srcSQLConnectionString, srcSQLid, srcSQLpass, -1);
conn.Execute("INSERT INTO table1 (a,b) VALUES (1,'tako')", null, 0x80); // 0x80 : adExecuteNoRecords 行を返さないSQL文の実行
WScript.Echo(ExecuteScalar(conn, "SELECT COUNT(*) FROM table1;"));
conn.Close();
</script>
</job>
</package>
VBScriptで言うところの Nothing を作るのはとりあえずサボリ。
OLEDB経由であれば フィールド名に日本語、半角英数字、全角英数字の混じったアヤシゲTableへのアクセスも、 識別子となるところをいちいちダブルクオートでくくる という対応はしないで成功した。
CVS HEAD では、Windows用バックエンドができてて、フロントエンドは pgAdminIII に入れようとしているらしい。
FreeBSDをマスターとして1台立てて、Windowsのスレーブにばらまく構成なら現状でもいけるのかなあ。 帰りにペーパー読んでみる。
単純にはダメ。スレーブ側にも xxid, slony1_funcs の2つのPostgreSQL拡張が必要になる。 カスケード可能なシステムなので、最初はスレーブでも後からマスターにもなれるような構成だった。
SQL Server必須なのか。月刊WindowsUpdateに対して MSDE で耐えられるのかどうかが謎だ。