iMacにPostgreSQL入れてみた

前置き

新しい仕事にpostgresを使う事にしました。

1〜2年前、業務システムをpostgresで構築しようと考えていたのですが、業務システムそのものの構築が先送りになり、そのままその会社を退職してしまいうーむという感じでした。

しかし、今回、簡単な受付の記録をデータベースに格納して、案内メールをテキストに吐き出すという要件が発生した(というより、半分自分ででっちあげた)ので、転職してよかったなあと。

といっても、iMacに導入してスタンドアローンで使うだけですが。

iMacを買った動機の半分は、OS XUNIXベースだからという、いまさらな動機なんですが、ターミナルで入ってディレクトリの構成を見ると、美しいです。

Macは中まで美しい。勉強するのも快適です。

さて、postgresを久々に入れるのですが、そもそもソフトのビルドの経験は素人レベルなので、どうやって入れようかなと考えました。

とりあえずネットを見てみると、こんな記事が。

http://lets.postgresql.jp/documents/tutorial/macosx/

これはすばらしい。

こういうインストーラで入れることができるんだー。

読んでみると、アプリケーションフォルダに、pgAdminとかが入って、スクリプトとかは、ライブラリフォルダに入るようです。

iMacはこの前買ったばかりなので、ライブラリフォルダってなに?って感じなんですが、まあ、postgresはアプリケーションフォルダに入るようです。

なるほどー。

このアプリケーションフォルダって言うのは、ほんとイカしてますよねー。

最初このアイコンをダブルクリックするとアプリが起動するので、これが実行ファイルなんだろうかと思っていたら、なんとこれはバイナリではなく.appという拡張子のついたフォルダなんだという事を知ってびっくり!

こうやってアイコンを一つにしようという根性がすばらしい。

うーむこれはインストーラを使って、Macの流儀にあわせた方がいいのかもしれないなあ。

うーむしかし個人的にはpythonrubyと組み合わせて使いたいので、まあ別にいいんですが扱いをpythonrubyに近い感じにしたいなあという気もする。

pythonrubyはアプリケーションフォルダに入っていないから、システム領域みたいな扱いなんだろうなあ。

postgresは、デーモンを立ち上げる訳だから、どっちかっていうと、windowsでいうところのサービスみたいな位置づけなんだろうし、そうなると、アプリケーションフォルダに入れるのも、なんとなくなあ。

しかし、今回は、postgresを一台のマシンの中でスタンドアローンで使うだけだから、別に使うときに起動するという使い方なんだし、そもそも、別に常駐するからシステム領域でなければというわけでもないしなあ。

結局、インストーラを提供しているEnterpriseDB社というところが、10年後もインストーラを提供し続けているだろうかと考え、この激動の時代に単一企業にそこまで期待してはいけないとの思いから、自分でビルドして/usr/localに入れる事にしました。

/usr/local 作成

ということで開始。

まず/usr/local フォルダを作る。

ターミナルで入ると、/usr/localって存在しないけど、実は/usr/localって、$PATHには含まれているので、作っていいんだなと思えてほっとする。

そして、$PATHに含まれているのに/usr/localがないのが美しい。(他のUNIXとかでもそうなってるならすみません。)

$ ls /usr/local
ls: /usr/local: No such file or directory
$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
$

ということで、/usr/localを作る。しかし、ちょっとまて、所有者とかパーミッションとかどうしよう?

悩んだあげく、とりあえず、アプリケーションフォルダと同じにすることにした。

$ ls -ld /Applications
drwxrwxr-x+ 47 root  admin  1598  6 17 08:17 /Applications
$

所有者rootのグループがadminなので、/usr/localもroot:adminにします。

あれ、ところで、パーミッションの右端にある+ってなんだ?

そういえば、他のフォルダのパーミッションには@ってついているのもある。

とりあえずググってみる。

http://journal.mycom.co.jp/column/osx/250/index.html

なるほど、なんか特殊なファイルを置いてあると@がつくらしい。

でもlsのmanに書いてあると書いてある。

最近マニュアル見る前にググるようになってしまった。

MS-Officeのヘルプが使えないからだと責任転嫁してみる。

lsのmanを読んでみると、

The Long Format
     ...  If the file or directory has extended attributes, the permissions
     field printed by the -l option is followed by a '@' character.  Otherwise, if the
     file or directory has extended security information, the permissions field printed by
     the -l option is followed by a '+' character.

うーん英語だからわからないけど、なんかセキュリティ的に拡張(?)されていると、+がつくらしい。

うーんよくわからない。

フォルダを拡張するのが美しいかどうかは、ちょっと態度を保留。

でも.appフォルダは美しいからなあ。

まあ、/usr/localにはとりあえず@や+がついてなくてもいいかな。

ということで作ってみる。

$ su
Password:

パスワードが聞かれる。あたりまえか。そういえば、ルートのパスワードって何だっけ。

自分のパスワードかと思って入れてみるが、

su: Sorry

入れない。

とりあえずググってみるとあった。

http://oshiete1.goo.ne.jp/qa616749.html

ルートは有効にしてないのか。美しい。

回答3の、

コントロールパネルのユーザ設定で管理者になれる権限を有するユーザ(ユーザのグループがwheelに属している)であれぱ
%sudo su -
でパスワードは該当のユーザのパスワードでいけるはずです。ルートユーザをわざわざ有効にしなくてもOKですし、MacOSXではわざと隠ぺいしているため個人的にはわざわざ有効にすることはあまりエレガントな解決方法とは思えません。(もちろん使い方にもよりますが)

で行く事にする。

確かにルートユーザは、あまり有効にしたくない。

sudo su で、いつものパスワードでスーパーユーザーになる。

なれた。

フォルダを作り、chownとchmodで、アプリケーションフォルダと同じにする。

$ ls -ld /usr/local
drwxrwxr-x  2 root  admin  68  6 17 16:27 /usr/local
$

こんな感じ。

ビルドとインストール

フォルダができたので、今度はpostgresのソースを置いて、解凍する。

とりあえず、最新版が8.3.7なので8.3.7にする。

$ pwd
/usr/local/postgresql-8.3.7
$ ls -l
total 3632
-rw-r--r--@  1 testnoda  admin    1192  1  2  2008 COPYRIGHT
-rw-r--r--   1 testnoda  admin    3780  6 17 16:20 GNUmakefile
-rw-r--r--@  1 testnoda  admin    3780  2 10  2007 GNUmakefile.in
-rw-r--r--@  1 testnoda  admin  673697  3 13 11:32 HISTORY
-rw-r--r--@  1 testnoda  admin   46253  3 13 11:32 INSTALL
-rw-r--r--@  1 testnoda  admin    1423  1 21  2007 Makefile
-rw-r--r--@  1 testnoda  admin    2026  3  6  2008 README
-rw-r--r--@  1 testnoda  admin     445  4 24  2004 aclocal.m4
drwxr-xr-x@ 20 testnoda  admin     680  6 17 16:00 config
-rw-r--r--   1 testnoda  admin  219516  6 17 16:20 config.log
-rwxr-xr-x   1 testnoda  admin   57073  6 17 16:20 config.status
-rwxr-xr-x@  1 testnoda  admin  776407  3 13 11:08 configure
-rw-r--r--@  1 testnoda  admin   51678  3 13 11:08 configure.in
drwxr-xr-x@ 40 testnoda  admin    1360  6 17 16:00 contrib
drwxr-xr-x@ 37 testnoda  admin    1258  6 17 16:22 doc
drwxr-xr-x@ 23 testnoda  admin     782  6 17 16:20 src
$ 

@がなぜかいっぱいついているが本記事では気にしない。

うをー、ビルドなんて久しぶりだよー。

こわいよー。

つーか現在でもconfigureスクリプトって、そのまま使えるのかなあ。

しばらくビビった後、とりあえずREADMEを読む。

... See the file INSTALL for instructions on how to build and install
PostgreSQL.

ああ、そうか、インストールにはINSTALLファイルを読むんだった。(本気でこれで気づいた)

INSTALLファイルを読む。

     __________________________________________________________________

                                Short Version

./configure
gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test

   The long version is the rest of this document.
     __________________________________________________________________

あ、とりあえず、configure と make でいけるんだ。よかった。

ビルド環境としては、Xcodeをあらかじめ導入してあるので、ほっとしたところで、早速configureをやる。

実行すると、すぐに終わる。

次に、gmakeをやる。

Xcodeでも、makeはgmakeなんだよな?

確認する。

$ which make
/usr/bin/make
$ ls -l /usr/bin/make
lrwxr-xr-x  1 root  wheel  7  5  6 16:14 /usr/bin/make -> gnumake
$ 

よしよし、gmakeだ。

ではさっそくmakeだ。

実行すると、時間かかるかと思ったら、すぐに終わる。

すげえ。やっぱり時代は変わった。

次に、make installする。

やはり、久しぶりにやるのでちょっとこわい。

/usr/local以外を書き換えられたりしたらどうしよう。

まあ、いくらなんでも、こんな歴史のあるシステムが、make installしたら/usr/local以外を書き換えたりしないよね?よね?

と、全く根拠のない理由で思い切ってmake installする。

ちなみにTime Machineの使い方がわからないので、バックアップは取っていない。今は反省している

とりあえず、無事に終わったようだ。

環境構築

次にpostgresユーザーを作ろうとしたらできない。

$ sudo su
Password:
sh-3.2# adduser postgres
sh: adduser: command not found
sh-3.2# 

adduserがない。

なるほどー。ないんだー。これも美しい。

ということで、「システム環境設定」で作る。

その後のデーモン起動、フォルダ作成、データベース作成、接続と、つつがなく終わる。

よかった。

Short Versionの手順はよくできている。

su - postgres で、postgresユーザーのホームディレクトリに移動して、postgresデーモンのログがホームディレクトリに保存されるところなんか憎い。

あとがき

ということで終わりです。

いや、フォルダの拡張はちょっと気になりますが、しかし、やはりMacはエレガントですね!

勉強してて楽しいです。

これから、rubypythonとの接続をする予定です。

つまずいたら日記に書くかもしれませんが、日記にならなかったらスムーズに終わったと思ってください。