2012-04-07
Mac Snow LeopardにPostgreSQL9.1をインストール
Ruby on RailsでPostgreSQLを使おうと思ったのがきっかけ。
そのプロセスと、おかしてしまいやすい(?)ミスやエラーをまとめてみた。
1. PostgreSQLをインストールせずに、gemの 'pg'をインストールする。
→ 「pg_configが無いよ」というようなErrorが出てきて、pgをインストールできない。
(当たり前だが、postgresql本体がないとpgは動かない。)
まずはpostgresqlをインストールしよう。
2. MacPortsからPostgresql9.1をインストール
ちゃっちゃと済ましたい人は以下のリンクへ。簡潔にまとめられていて助かりました。
Snow LeopardにPostgreSQLをインストールする - 祈れ、そして働け 〜 Ora et labora
suusuke - blog - Snow Leopard に PostgreSQL インストール
僕の方は、MacPortsからインストールしたのに「postgresというユーザーが自動生成されない」という事故が起きたので、その対処法を余分に書いてある。もし同じことが起きていたら参考にしていただければと。
事前に...
*Macportsが最新にアップデートされているか確認すること。
*PostgreSQLの最新バージョンを確認すること。
・インストールの基本的な手順
利用可能なバージョンを確認して
sudo port list postgresql
portからインストール
sudo port install postgresql91 sudo port install postgresql91-server
また、一回のコマンドで2つをインストール方法もある
sudo port install postgresql91 postgresql91-server
*postgresqlとpostgresql-serverにはそれぞれ違う機能が含まれている。
・postgresql
psqlやpg_dumpなどのクライアントユーティリティ
・postgresql-server
initdbやpg_ctlなどのサーバーユーティリティ
自動起動する
sudo port load postgresql91-server
そして、起動していることの確認
sudo launchctl list | grep macports
解除する場合
sudo port unload postgresql91-server
・領域確保と初期化
データベースディレクトリの作成
sudo mkdir -p /opt/local/var/db/postgresql91/defaultdb
・p (parent) オプションとは、親のディレクトリと一緒に子のディレクトリもいっきに作成できるオプションのこと。
・データディレクトリとは、データベース構築に必要となる様々なファイルが収められているディレクトリのこと。
そして、データベースディレクトリの権限(オーナー)を'postgres'というユーザーに設定する。
sudo chown postgres:postgres /opt/local/var/db/postgresql91/defaultdb
・chownとは、"Change Owner" のこと。
3. 'postgres'というユーザーが作られていない
chownコマンドで実行すると、「'postgres'というユーザーなんていないんですけど」と怒られた。
最初、「おいおいなんだなんだ?まあ、いいか。」と、このエラーを無視してしまい、
sudo su postgres -c '/opt/local/lib/postgresql91/bin/initdb -D /opt/local/var/db/postgresql91/defaultdb'
データベースの初期化のコマンドを実行してしまった。
ちなみに
・suコマンドとは、"Switch User"のこと。文字通り、Userを変えるということ。「てか、Userって何だよ」という人は次のコマンドを。
dscl localhost -list /Local/Default/Users
詳細は以下。とても参考になります。
→ suについて:Mac OS X/suとsudoの違い - WEB開発初心者の成長記録
→ dsclについて:[Mac OS X] - Life with IT
・postgresの-cオプションは、NAME=VALUEを引数にとる。コマンドの目的は"Set the runtime parameter"
・引数、つまり、' 'で囲われた部分の中の -Dオプションとは、Database Directoryのこと。
両オプションとも次のコマンドで確認できる。
postgres --help
えっと、そうそう、だから
postgresになったつもりでも
sudo su postgres
実際は、nobodyになっちゃてるのね。
sh$ whoami nobody
さっきの初期化コマンド
sudo su postgres -c '/opt/local/lib/postgresql91/bin/initdb -D /opt/local/var/db/postgresql91/defaultdb'
で、実は、nobodyでデータベースディレクトリの初期化をしちゃってる。つまり、権限が'nobody'にある。で、これを'postgres'に直したい。
だから、/opt/local/var/db 以下を削除して、もう一度 /opt/local/var/db/postgresql91/defaultdbをmkdir -pで作成する。
それから、今度はちゃんと'postgres'のユーザーとグループをつくる。
ユーザーとグループの作り方の詳細は以下。非常に分かりやすいです。
Creating Users and Groups on Leopard using dscl command - agwの日記
sudo dscl . -create /Users/postgres sudo dscl . -create /Groups/postgres
そして、'postgres'がきちんとつくられたかどうかを確かめる
dscl localhost -list /Local/Default/Users/postgres dscl localhost -list /Local/Default/Groups/postgres
作成したpostgresユーザーには、必要なプロパティが入力されてない。
Users/postgresには、NFSHomeDirectory, RealName, PrimaryGroup ID, Unique IDが足りない。
Groups/postgresには、RealName, PrimaryGroup IDが足りない。
またdsclコマンドを使って、これを補っていく。
sudo dscl . -create /Users/postgres NFSHomeDirector /opt/local/bar/db/postgresql91/defaultdb
必要なプロパティは以下のリンクの最下部を参考にして欲しい。二つで違っているところもあるが、自分のMacの状況に合う方を選べば良いと思う。
Snow LeopardにPostgreSQLをインストールする - 祈れ、そして働け 〜 Ora et labora
suusuke - blog - Snow Leopard に PostgreSQL インストール
そして、これで再び初期化を済ませば、とりあえずPostgreSQLの導入はOK。
sudo su postgres -c '/opt/local/lib/postgresql91/bin/initdb -D /opt/local/var/db/postgresql91/defaultdb'
次のステップである、データベースへの接続、RailsからのPostgreSQLの使用はまた次回に書きたいと思う。
思いもよらないMacPorts事故でちょっと時間がかかってしまった。
それではまた。


