動機
研究に行き詰まってきたので打開策としてRDBMSを導入することにしてみた.
方法
参照
CygwinにPostgreSQLをインストールするところから.これがまたはまりどころが多かった.やっぱりCygwinってWindowsで動いているだけあって結構面倒.
- Yahoo! GeoCities: Get a web site with easy-to-use site building tools.
- PostgreSQLのインストール - dJWiki
- Cygwin/PostgreSQL/セットアップ(cygserver版) - discypus
一番上のサイトは英語だけど,一番わかりやすかった.下二つのサイトは手順はわかりやすく書いてあるんだけど,失敗しなかった場合のストレートなやり方しか書いてない.
cygserverを走らせる
# cygserver-config とにかくyes # cygrunsrv -I cygserver -p /usr/sbin/cygservser.exe # cygrunsrv -S cygserver
でもって,このあたりがWindows特有の作業.
ユーザpostgres関連
# net user postgres $password /add /fullname:postgres /comment:'PostgreSQL user accout' /homedir:"$(cygpath -w /home/postgres)" # mkpasswd -l -u postgres >> /etc/passwd # passwd postgres
これでWindowsにPostgreSQL用のユーザpostgresを作成できました.今度はPostgreSQLのデータ格納用スペースを確保.
# rm -rf /var/postgresql # mkdir /var/postgresql # mkdir /var/postgresql/data # chown postgres /var/postgresql/data
でもって,一番ややこしいところ.ユーザpostgresでCygwinを立ち上げる.# で始まるコンソールは管理者権限ユーザの窓,$ で始まるコンソールはpostgresの窓.
# runas /user:postgres "C:\cygwin\bin\bash.exe --login -i" $ export CYGWIN=server $ /usr/sbin/initdb.exe -D /var/postgresql/data invalid binary "/usr/sbin/initdb" # chmod o+rX /usr/sbin/initdb /usr/sbin/postgres $ /usr/sbin/initdb.exe -D /var/postgresql/data (略) Success. You can now start the database server using: /usr/sbin/postmaster -D /var/postgresql/data or /usr/sbin/pg_ctl -D /var/postgresql/data -l logfile $ exit
postgreの窓は上記の作業のみ開くこと.そうしないと下手にバイナリ動かすとさわったファイルの権限を変更しちゃったりして面倒らしい.このあとはPostgreSQLをWindowsのサービスとして登録.
# cygrunsrv --install postmaster --path /usr/sbin/postmaster \ --args "-D /var/postgresql/data -i" --dep cygserver \ --user postgres --termsig INT -e "CYGWIN=server" --shutdown # cygrunsrv --start postmaster # cygrunsrv -Q postmaster Service postmaster exists Type : Own Process Current State : Running Controls Accepted : Accept Stop, Accept Shutdown
上手く行くとこれで動く.自分の場合は一度しか成功しなかったけど.もし,下記の様なエラーが出た場合はscコマンドを用いて回避.
cygrunsrv: Error installing a service: OpenService: Win32 error 1073: 指定されたサービスは既に開始されています。 # sc delete postmaster
しかしまたエラーが発生!
# cygrunsrv --start postmaster cygrunsrv: Error starting a service: StartService: Win32 error 1069: ログオンに失敗したため、サービスを開始できませんでした。
とりあえず[コントロールパネル]-[管理ツール]-[サービス]-[postmaster]を選択.右クリックで[プロパティ]-[ログオン]-[ローカルシステムアカウント]とかに変更してみたけどやっぱりダメ.
結局pg_ctlで実行
仕方ないのでpg_ctlを使ってみたらあっさり稼働.
# /usr/sbin/pg_ctl.exe -D /var/postgresql/data -l logfile start
よくわからんなぁ.あとは一通りユーザを作ったり,データベース作ったりしてみる.途中でエラーが出る場合はたいていが権限関係だから適宜chmodとかchownとかで対処.
# createuser -U postgres YOUR_USER_NAME_ON_WINDOWS # createdb -U postgres DB_NAME # psql -U postgres DB_NAME > create table TABLE_NAME (int id primary key, varchar(128) name not null, text nickname);
追記
違うマシンで同じようにインストールしたらどうもうまくいかない.上で「権限関係」とあっさり書いたところではまってしまった.LinuxやBSDで入れたときはこうはならなかったのに,Cygwinめぇ.
結局やけくそになって
# chmod -R 777 /var/postgresql/data
という荒技を使ったら解決.問題ありありだけどね.