postgres アカウントでハマった
pgAdminⅢ も入れたし、さて起動 ... ってデータベースが見つからない? PostgreSQL をずっと Windows でしか使ってなかったし、会社の Mac も dmg で入れたから忘れてたけど、MacPorts で入れたなら自分でデータベースインスタンスを作って起動させなきゃだね。基本を忘れてる。ダメダメだなー。 ^^;)>
データベースインスタンスの作り方
気を取り直してデータベースのインスタンスを作りましょ。port で入れたときのメッセージが参考になるよ。こんな感じ。
$ sudo mkdir -p /opt/local/var/db/postgresql83/defaultdb
$ sudo chown postgres:postgres /opt/local/var/db/postgresql83/defaultdb
$ sudo su postgres -c '/opt/local/lib/postgresql83/bin/initdb -D /opt/local/var/db/postgresql83/defaultdb'
プロセス起動はこんな感じ。お好きな方でどうぞ ... ということらしい。
$ /opt/local/lib/postgresql83/bin/postgres -D /opt/local/var/db/postgresql83/defaultdb
or
$ /opt/local/lib/postgresql83/bin/pg_ctl -D /opt/local/var/db/postgresql83/defaultdb -l logfile start
postgres アカウント? HOME?
chown を実行したとき、いつの間に postgres アカウント作ったんだろ?と思ってたけど、前に dmg で PostgreSQL を入れたときのアカウントが残ってたっぽい。su で postgres になって HOME を見たら /Library/PostgreSQL/8.3 になってるし。うれしくないなぁ。 :-(
$ su postgres
$ pwd
/opt/local/var/db/postgresql83
$ cd
bash: cd: /Library/PostgreSQL/8.3: No such file or directory
$ env | grep HOME
HOME=/Library/PostgreSQL/8.3
postgres の HOME 変更
defaultdb までのパスをバージョン前で区切っておいて postgres の HOME を /opt/local/var/db/postgresql にするで良いかな。
ということでディレクトリはこんな感じ。バージョン違いで管理できるようにしとく。
/opt/local/var/db/postgresql/83/defaultdb
/opt/local/var/db/postgresql/84/defaultdb
/opt/local/var/db/postgresql/91/defaultdb
postgres アカウントの所在?
問題は postgres の HOME 変更。[システム環境設定 > アカウント] にもいないし /etc/passwd にもいない。でもMac OS X で PostgreSQL を使ってみよう (3) を参考に dscl を叩くと postgres ユーザ情報が表示される。
$ dscl . -read /Users/postgres
AppleMetaNodeLocation: /Local/Default
NFSHomeDirectory: /Library/PostgreSQL/8.3
Password: *
PrimaryGroupID: 1
RealName: PostgreSQL
RecordName: postgres
RecordType: dsRecTypeStandard:Users
UniqueID: 503
UserShell: /bin/bash
postgres グループも作られてる。 [システム環境 > アカウント] のグループで見られるから、これは正しいんだろな。
$ dscl . -read /Groups/postgres
AppleMetaNodeLocation: /Local/Default
Password: *
PrimaryGroupID: 500
RealName: postgres
RecordName: postgres
RecordType: dsRecTypeStandard:Groups
ん??? そーいや ACTC 10.5 勉強したときに Mac のアカウント管理が何パターンかあるっての読んだ記憶はあるけど、きれいに忘れてるよ、やべー。^^;)>
方向がそれたけど Mac でのアカウント管理を復習しとこ、いい機会だし。:-)
dscl って何さ?
そもそも dscl ってなんなんでしょ? ここからスタートだよ。^^;)>
ユーザ管理はMac OS X 10.4以前のNetInfoや一般的な/etc/passwdなどを使用せず、OpenDirectoryを使用する。
OpenDirectoryにCUIでアクセスするにはdsclを使用する。
Life with IT - ユーザ管理方法(dscl)
mac の場合、アカウントは OpenDirectory になってて /etc/passwd とは別管理になってるのは知ってたけど、[システム環境 > アカウント] で見えるとは限らないってことね。
OpenDirectory に管理されてるアカウントを見る場合、-list オプションを使う。こんな感じ。
$ dscl localhost -list /Local/Default/Users
...
postgres
...
前にやったように -read オプションを使うと OpenDirectory で管理されてるユーザやグループの設定情報も見れる。こんな感じ。
$ dscl localhost -read /Local/Default/Users/watanata2000
$ dscl localhost -read /Local/Default/Groups/admin
dscl の使い方は、この2つが分かりやすいし、詳しいかな。
postgres の HOME 修正なんだけど、OpenDirectory の場合、NFSHomeDirectory の値を変更すれば良さげ。
$ dscl localhost -read /Local/Default/Users/postgres
NFSHomeDirectory: /Library/PostgreSQL/8.3
...
dscl の -create オプションを使うと値の変更ができるので /opt/local/var/db/postgresql に変更する。
$ sudo dscl localhost -create /Local/Default/Users/postgres NFSHomeDirectory /opt/local/var/db/postgresql
試しに postgres ユーザに変更すると期待通りの場所が HOME になってる。OK だね! :-)
$ dscl localhost -read /Local/Default/Users/postgres
NFSHomeDirectory: /opt/local/var/db/postgresql
...
$ su - postgres
$ pwd
/opt/local/var/db/postgresql
$ env | grep HOME
HOME=/opt/local/var/db/postgresql
あとは pgctl でプロセス起動して pgAdmin から接続できれば完了。これが本題なんだった。ちゃんと以下でプロセスを起動して、ちゃんと pgAdmin Ⅲ から接続できることを確認して OK :-)
$ /opt/local/lib/postgresql83/bin/pg_ctl -D /opt/local/var/db/postgresql83/defaultdb -l logfile start
環境
- Mac OSX 10.6.7
- PostgreSQL 8.3.14
- pgAdmin 1.3.12