Hatena::ブログ(Diary)

淡く広がる青に描いたのは幻想の白雲か見えぬ月か

2012-04-07

Mac Snow LeopardにPostgreSQL9.1をインストール


Ruby on RailsPostgreSQLを使おうと思ったのがきっかけ。
そのプロセスと、おかしてしまいやすい(?)ミスやエラーをまとめてみた。

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

postgresqlpostgresql-serverにはそれぞれ違う機能が含まれている。

postgresql
psqlpg_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事故でちょっと時間がかかってしまった。

それではまた。