postgres アカウントでハマった

pgAdminⅢ も入れたし、さて起動 ... ってデータベースが見つからない? PostgreSQL をずっと Windows でしか使ってなかったし、会社の Macdmg で入れたから忘れてたけど、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 アカウント作ったんだろ?と思ってたけど、前に dmgPostgreSQL を入れたときのアカウントが残ってたっぽい。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

環境