MacPorts で OS X (El-Capitan) に PostgreSQL 9.4 をインストール

この記事は、MacPorts で OS X (El-Capitan) に PostgreSQL 9.4 をインストールする手順をまとめます。この記事は、先に書いた英語の記事 [Installing PostgreSQL 9.4 on OS X 10.11 using MacPorts](http://qiita.com/yunarsoa/items/ed6c27b8655ab55e46f9) を日本語に訳したものです。

使用している環境:

- ハードウェア: MacBook Pro (Retina, 13-inch, Late 2013)
- OS: OS X El-Capitan version 10.11.1
- パッケージ マネージャ: MacPorts version 2.3.4

ここでは、[MacPorts](https://www.macports.org) がすでにインストールされていることを前提としています。まだインストールされていない場合は、先にインストールして、それから MacPorts 自身を更新してください。

主な手順:

1. MacPorts で PostgreSQL をインストール
2. クライアント ツールの準備
3. 初期データベースの準備
4. 自動起動の設定
5. 使ってみる

# MacPorts で PostgreSQL をインストール

ここでは、現時点で、PostgreSQL の最新版であるバージョン 9.4.5 をインストールします。次のコマンドで MacPorts のインストールコマンドを実行します。

```bash
$ sudo port install postgresql94-server
```

これで、必要な全てのパッケージもインストールされます。完了するまで数分かかる場合があります。

<a name="postinst" style="underline: none;"></a>完了すると、下記のように、インストール後に実行する手順が書かれたノートが表示されます。この部分をメモるか保存しておくことをお勧めします。

```
...
--->  Configuring postgresql94-server
--->  Building postgresql94-server
--->  Staging postgresql94-server into destroot
--->  Creating launchd control script
###########################################################
# A startup item has been generated that will aid in
# starting postgresql94-server with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo port load postgresql94-server
###########################################################
--->  Installing postgresql94-server @9.4.5_0
--->  Activating postgresql94-server @9.4.5_0

To create a database instance, after install do
 sudo mkdir -p /opt/local/var/db/postgresql94/defaultdb
 sudo chown postgres:postgres /opt/local/var/db/postgresql94/defaultdb
 sudo su postgres -c '/opt/local/lib/postgresql94/bin/initdb -D /opt/local/var/db/postgresql94/defaultdb' 

--->  Cleaning postgresql94-server
--->  Updating database of binaries
--->  Scanning binaries for linking errors
--->  No broken files found.
```

# クライアント ツールの準備

PostgreSQL サーバーパッケージをインストールすると、クライアント ツールも一緒にインストールされます。ここで、このツールが実行できるように設定を行います。

まず、次のコマンドで設定可能な選択肢を表示します。

```bash
$ port select --list postgresql
Available versions for postgresql:
	none (active)
	postgresql94
```

ここで、クライアントとして設定できる `postgresql94` の選択肢があることがわかります。次のコマンドでこれを実際に有効にします。

```bash
$ sudo port select --set postgresql postgresql94
Selecting 'postgresql94' for 'postgresql' succeeded. 'postgresql94' is now active.
```

それから、再び `port select --list` を実行すると、下記のような出力になります。

```bash
$ port select --list postgresql
Available versions for postgresql:
	none
	postgresql94 (active)
```

最後に、次のコマンドで、実際にクライアント ツールが実行可能であることを確認できます。

```bash
$ which psql
/opt/local/bin/psql
```

# 初期データベースの準備

次の手順ではじめての、既定のデータベースを初期化します。ここで説明するのは、MacPorts が提示した手順で、インストールの最後に表示されるノートにも書かれています（[参照](#postinst)）。PostgreSQL のサイト [First steps - PostgreSQL](https://wiki.postgresql.org/wiki/First_steps) にも似たようなことが書いてありますが、一部、本環境で同じように実行できないので注意が必要です。

まず、データベースファイルの配置場所（ディレクトリ）を作成します。

```bash
$ sudo mkdir -p /opt/local/var/db/postgresql94/defaultdb
```

次に、このディレクトリの所有権を設定します。ここで、特殊なユーザー `postgres` が使用されます。

```bash
$ sudo chown postgres:postgres /opt/local/var/db/postgresql94/defaultdb
```

最後に、次のコマンドで実際にデータベースを初期化し作成します。

しかし、その前に、現在いるディレクトリがホームディレクトリの配下またはその他の個人ディレクトリではないことを確認してください。このコマンドは、現在のディレクトリに読み取りアクセス権がないと失敗します。ここで、先に `/opt/local/` のような誰でもアクセスできるディレクトリに移動してから実行します。

```bash
$ cd /opt/local/
$ sudo su postgres -c '/opt/local/lib/postgresql94/bin/initdb -D /opt/local/var/db/postgresql94/defaultdb' 
```

このコマンドが正常に実行されると下記のように出力されます。

```
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

...

Success. You can now start the database server using:

    /opt/local/lib/postgresql94/bin/postgres -D /opt/local/var/db/postgresql94/defaultdb
or
    /opt/local/lib/postgresql94/bin/pg_ctl -D /opt/local/var/db/postgresql94/defaultdb -l logfile start
```

ここで、データベースの主な情報と手動で起動するための手順が書かれています。手動で起動するには、`postgres` または `pg_ctl` のコマンドを使います。システムの起動時に自動的にデータベースも起動するようにするには、次の手順で説明する手順で設定できます。

# 自動起動の設定

ここでは、システムの起動時にデータベースを自動的に起動する設定を行います。ここで説明するのは、MacPorts が提示した方法で、インストールの完了後に表示されるノートにも書かれています（[参照](#postinst)）。

```bash
$ sudo port load postgresql94-server
```

完了すると、データベースが起動し、次回システムが起動するときも自動的にデータベースが起動します。

# 使ってみる

以上でインストールが完了しました。これからデータベースにアクセスするのには、次のいずれかのコマンドを使います。これは、既定のユーザー `posgtgres` を使って接続します。

```bash
sudo -u postgres psql
```

または

```bash
psql -U postgres
```

この後は、必要に応じて、ユーザー（ロール）、スキーマ、またはデータベースを作成します。

また、既定では、ローカルコンピュータからアクセするときはパスワードが求められません。リモートから接続することも許可されていません。この設定を変更するには、データベース設定ファイル `/opt/local/var/db/postgresql94/defaultdb/pg_hba.conf` を必要に応じて編集します。