iMacにPostgreSQL入れてみた
前置き
新しい仕事にpostgresを使う事にしました。
1〜2年前、業務システムをpostgresで構築しようと考えていたのですが、業務システムそのものの構築が先送りになり、そのままその会社を退職してしまいうーむという感じでした。
しかし、今回、簡単な受付の記録をデータベースに格納して、案内メールをテキストに吐き出すという要件が発生した(というより、半分自分ででっちあげた)ので、転職してよかったなあと。
といっても、iMacに導入してスタンドアローンで使うだけですが。
iMacを買った動機の半分は、OS XがUNIXベースだからという、いまさらな動機なんですが、ターミナルで入ってディレクトリの構成を見ると、美しいです。
Macは中まで美しい。勉強するのも快適です。
さて、postgresを久々に入れるのですが、そもそもソフトのビルドの経験は素人レベルなので、どうやって入れようかなと考えました。
とりあえずネットを見てみると、こんな記事が。
http://lets.postgresql.jp/documents/tutorial/macosx/
これはすばらしい。
こういうインストーラで入れることができるんだー。
読んでみると、アプリケーションフォルダに、pgAdminとかが入って、スクリプトとかは、ライブラリフォルダに入るようです。
iMacはこの前買ったばかりなので、ライブラリフォルダってなに?って感じなんですが、まあ、postgresはアプリケーションフォルダに入るようです。
なるほどー。
このアプリケーションフォルダって言うのは、ほんとイカしてますよねー。
最初このアイコンをダブルクリックするとアプリが起動するので、これが実行ファイルなんだろうかと思っていたら、なんとこれはバイナリではなく.appという拡張子のついたフォルダなんだという事を知ってびっくり!
こうやってアイコンを一つにしようという根性がすばらしい。
うーむこれはインストーラを使って、Macの流儀にあわせた方がいいのかもしれないなあ。
うーむしかし個人的にはpythonかrubyと組み合わせて使いたいので、まあ別にいいんですが扱いをpythonやrubyに近い感じにしたいなあという気もする。
pythonやrubyはアプリケーションフォルダに入っていないから、システム領域みたいな扱いなんだろうなあ。
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デーモンのログがホームディレクトリに保存されるところなんか憎い。