インストール
PostgreSQLのパッケージを探します。
$ sudo port search postgresql
BiggerSQL @1.3.9 (aqua, databases)
SQL front-end to the postgresql DBMS
BigSQL @1.0 (aqua, databases)
postgresql psql-like client in cocoa
caml-pgocaml @1.1 (devel, ocaml)
Type-safe OCaml-interface to the PostgreSQL-database
...
PostgreSQL関連のパッケージは沢山あるため、本体のインストールとは関係なさそうなパッケージもずらずらと表示されます。このままではちょっと見づらいので、grepコマンドで絞り込んでみましょう。
$ sudo port search postgresql | grep ^postgresql
...
postgresql91 @9.1.1 (databases)
postgresql91-doc @9.1.1 (databases)
postgresql91-server @9.1.1 (databases)
...
最新版は9.1.1のようです。postgresql91(psqlやpg_dumpなどのクライアントユーティリティ)とpostgresql91-server(initdbやpg_ctlなどのサーバーユーティリティ)をインストールします。
$ sudo port install postgresql91 postgresql91-server
もしドキュメントが必要であれば、postgresql91-docもインストールしましょう。
$ sudo port install postgresql91-doc
システム起動時にデーモンとして起動するように設定します。
$ sudo port load postgresql91-server
確認します。
$ sudo launchctl list | grep macports
941 - org.macports.postgresql91-server
...
設定を解除します。
$ sudo port unload postgresql91-server
領域確保と初期化
ディレクトリを作成します。postgresユーザーはインストール中に作られています。
$ sudo mkdir -p /opt/local/var/db/postgresql91/defaultdb
$ sudo chown postgres:postgres /opt/local/var/db/postgresql91/defaultdb
データベースを初期化します。デフォルトエンコードはUTF-8です。
$ sudo su postgres -c '/opt/local/lib/postgresql91/bin/initdb -D /opt/local/var/db/postgresql91/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 ja_JP.UTF-8.
The default database encoding has accordingly been set to UTF8.
initdb: could not find suitable text search configuration for locale ja_JP.UTF-8
The default text search configuration will be set to "simple".
fixing permissions on existing directory /opt/local/var/db/postgresql91/defaultdb ... ok
creating subdirectories ... ok
selecting default max_connections ... 20
selecting default shared_buffers ... 1600kB
creating configuration files ... ok
creating template1 database in /opt/local/var/db/postgresql91/defaultdb/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating collations ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.
Success. You can now start the database server using:
/opt/local/lib/postgresql91/bin/postgres -D /opt/local/var/db/postgresql91/defaultdb
or
/opt/local/lib/postgresql91/bin/pg_ctl -D /opt/local/var/db/postgresql91/defaultdb -l logfile start
サービスの起動と停止
サービスを起動する前にログディレクトリを作成しておきます。
$ sudo mkdir /var/log/postgresql91
$ sudo chown postgres:postgres /var/log/postgresql91
サービスを起動します。
$ sudo su postgres -c '/opt/local/lib/postgresql91/bin/pg_ctl -D /opt/local/var/db/postgresql91/defaultdb -l /var/log/postgresql91/logfile start'
サービスを停止します。
$ sudo su postgres -c '/opt/local/lib/postgresql91/bin/pg_ctl -D /opt/local/var/db/postgresql91/defaultdb stop'
pg_ctlを使わずに起動すると、フォアグラウンドで動作します。
$ sudo su postgres -c '/opt/local/lib/postgresql91/bin/postgres -D /opt/local/var/db/postgresql91/defaultdb'
バイナリファイルへのシンボリックリンクをパスが通っているディレクトリに作成します。
$ sudo ln -s /opt/local/lib/postgresql91/bin/postgres /opt/local/bin/
$ sudo ln -s /opt/local/lib/postgresql91/bin/pg_ctl /opt/local/bin/
postgresユーザーの確認
postgresユーザーを確認しておきましょう。
$ dscl . -read /Users/postgres
AppleMetaNodeLocation: /Local/Default
GeneratedUID: A0F6BFB6-4559-452A-B385-A1B9675DAB99
NFSHomeDirectory: /usr/local/pgsql/
Password: *
PrimaryGroupID: 216
RealName:
PostgreSQL Server
RecordName: _postgres postgres
RecordType: dsRecTypeStandard:Users
UniqueID: 216
$ dscl . -read /Groups/postgres
AppleMetaNodeLocation: /Local/Default
GeneratedUID: 33DE2566-C779-415B-937F-BFF389504D7C
PrimaryGroupID: 113
RealName:
PostgreSQL Users
RecordName: _postgres postgres
RecordType: dsRecTypeStandard:Groups