酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Mac MountainLion/CentOS 6.4へのPostgreSQL 9.2の導入手順

MySQLと並ぶオープンソースのRDBMS、『PostgreSQL』の導入手順です。海外ではHerokuやEngine Yardが標準のDBをPostgreSQLにしていたりと人気が高いので、使えるようになっておいて、損はないと思います!


CentOSへのインストール

まずは本家のPostgreSQL RPM Repository (with Yum)で自分の環境にマッチしたrpmを探して以下のコマンドを実行。(URLの部分は自分の環境のものに書き換えて下さい)

1
2
wget -P /tmp http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm
sudo rpm -ivh /tmp/pgdg-centos92-9.2-6.noarch.rpm

続いて、postgres9.2をインストール。

1
sudo yum install -y postgresql92-server postgresql92-devel postgresql92-contrib

DBを初期化。

1
sudo /etc/rc.d/init.d/postgresql-9.2 initdb

Postgresを起動。

1
sudo /etc/rc.d/init.d/postgresql-9.2 start

さらにサーバの起動時にPostgresが起動するように設定します。

1
sudo chkconfig postgresql-9.2 on

自動起動の設定が成功したか確認。

1
2
chkconfig --list | grep postgresql-9.2
> postgresql-9.2  0:off   1:off   2:on    3:on    4:on    5:on    6:off #<= となっていれば成功

Postgresqlの設定修正

9.2の初期設定だと、unixのユーザー名がPostgreSQLのユーザー名と一致していないといけないようになっているそうです。 その修正方法です。

1
sudo vi /var/lib/pgsql/9.2/data/pg_hba.conf

上のファイルの中の以下の部分を修正。

1
2
3
local   all             postgres                                peer
# ↓ peer => md5に修正
local   all             postgres                                md5

CentOSへのpgのインストール

CentOSへpgをインストールする場合は、vim ~/.bashrcで事前に以下を追加。

1
export PATH=${PATH}:/usr/pgsql-9.2/bin

続いて、source ~/.bashrcを実行して設定を反映。

pgsql-9.2のところはバージョンによって適宜変更して下さい。

これが完了したらgem install pgでインストールできます。

CentOSでのユーザー作成コマンド

インストールが完了すると、postgresユーザーが追加されます。このユーザーになってから、createuserコマンドを実行するとユーザーが作成されます。 [ユーザー名]には任意のユーザー名を追加してください。

1
2
3
sudo su -
su - postgres
createuser -s [ユーザー名]

Macへのインストール(Homebrew)

Macの『Homebrew』をつかってのインストール手順です。まずはpostgresをインストール。

1
brew install postgresql

続いて、DBを初期化する前に既存のposgreSQL環境を移動。

1
mv /usr/local/var/postgres /usr/local/var/postgres.org

でもってDB初期化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
initdb /usr/local/var/postgres -E utf8

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

> The database cluster will be initialized with locale "ja_JP.UTF-8".
> 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 /usr/local/var/postgres ... ok
> creating subdirectories ... ok
> selecting default max_connections ... 20
> selecting default shared_buffers ... 1600kB
> creating configuration files ... ok
> creating template1 database in /usr/local/var/postgres/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 option -A, or
> --auth-local and --auth-host, the next time you run initdb.
>
> Success. You can now start the database server using:
>
>     postgres -D /usr/local/var/postgres
> or
>     pg_ctl -D /usr/local/var/postgres -l logfile start

Macにプリインストール(?)されているpostgresを見に行かないように設定を修正。(詳細はこちら)

1
2
wget http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh
sh fixBrewLionPostgres.sh
1
2
sudo mkdir /var/pgsql_socket
sudo chmod 777 /var/pgsql_socket

PostgreSQLの起動。

1
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

PostgreSQLの動作確認。

1
2
3
4
5
6
7
8
9
psql -l
                              List of databases
   Name    | Owner | Encoding |   Collate   |    Ctype    | Access privileges
-----------+-------+----------+-------------+-------------+-------------------
 postgres  | komji | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 template0 | komji | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/komji         +
           |       |          |             |             | komji=CTc/komji
 template1 | komji | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/komji         +
           |       |          |             |             | komji=CTc/komji

となっていれば成功。もしエラーが発生するようなら、対策を下の方のおまけに書いたのでやってみて下さい。

次に、PostgreSQLを自動起動するように設定。

1
2
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

MacでのGem pgのインストール

もし既にpgをインストール済なら一度削除(gem uninstall pg)して下さい。

ではいよいよインストールですが、gem install pgではNGらしいです。詳しくは以下のコマンドを実行。

1
2
3
4
brew info postgresql

> If you want to install the postgres gem, including ARCHFLAGS is recommended:
> env ARCHFLAGS="-arch x86_64" gem install pg

ということで以下のコマンドを実行してpgをインストール。

1
env ARCHFLAGS="-arch x86_64" gem install pg

コンソールからのPostgreSQLの操作

コマンドラインからのpostgresへの操作です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# ユーザーの作成(DBの作成権限のあるユーザー) パスワード省略
createuser -s [ユーザー名]

# ユーザーの作成(DBの作成権限のあるユーザー) パスワード付き
createuser -s [ユーザー名] -P
新しいロールのためのパスワード: <= パスワード入力
もう一度入力してください: <= パスワード入力

# ユーザーの削除
dropuser [ユーザー名]

# データベースの作成(superuserではない)
createdb [データベース名] -O [ユーザー名]

# データベースの作成(superuser)
createdb [データベース名] -O [ユーザー名] -s

# データベースの削除
dropdb [データベース名]

# データベース一覧の表示
psql -l

PostgreSQLのコマンドラインツールpsqlの主要コマンド一覧です。
MySQLのmysqlに近いツールのようです。

1
2
3
4
5
6
7
8
9
10
11
# PostgreSQLの再起動
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log restart

# psql の起動
psql [データベース名]

# psql の終了
\q

# psqlで使えるコマンド一覧
\?

おまけ:[エラー] connections on Unix domain socket “/var/pgsql_socket/.s.PGSQL.5432”? の対策

次のようなエラーメッセージが出た場合の対策です。

psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket “/var/pgsql_socket/.s.PGSQL.5432”?

(1) プリインストールのPostgreSQLとバッティングしている場合

対策用のシェルスクリプトを実行。

1
2
3
4
5
6
7
8
# シェルスクリプトの取得
curl -o fixBrewLionPostgresql.sh http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh

# シェルスクリプトの実行権限を追加
chmod a+x fixBrewLionPostgresql.sh

# シェルスクリプトの実行
./fixBrewLionPostgresql.sh

これでpsql -lでエラーが発生しなくなれば成功です。

(2) 過去にPostgreSQLをインストールしたことがある場合

以下のコマンドを実行してフォルダを初期化。

1
2
3
4
5
# フォルダの削除
rm -rf /usr/local/var/postgres

# 初期化
initdb /usr/local/var/postgres

Special Thanks

CentOS 6.3にPostgreSQL9.2をインストール - 迷い家の白猫 技術部

PostgreSQLデータベースのコマンド

Instalando PostgreSQL no Mac OS X (10.8)Blog do Kraudio | Blog do Kraudio

MacBook AirにPostgreSQLをbrewでインストールした - ありの日記

Mac+HomeBrew+Postgresql+pg - NowTomの日記

PostgreSQLとMySQLはどちらかに明確な優位性がありますか? - QA@IT

postgresql - gem install pg –with-pg-config works, bundle fails - Stack Overflow

ALTER ROLE

Mac(MTLion)にHomebrewでPostgresqlを入れる

Homebrewを使ったPostgreSQLのインストール(Mac OS Lion)

psqlがPeer authentication failedというエラーで起動できない - QA@IT

変更来歴

(2013/09/25 05:25) Mac Mountain Lionでのトラブルシューティングを追加
(2013/09/25 05:50) CentOS 6.4対応
(2014/09/23 19:30) createuserのパラメータ修正
(2014/11/02 12:20) CentOSでのユーザー作成の手順を追加
(2015-01-18 11:30) 記述ミスを修正

おすすめの書籍