Install PostgreSQL
開発環境で使っている DB を SQLite から PostgreSQL に変えることにした。
理由は、SQLite だと実行できる SQL でも、PostgreSQL だとエラーになることがある。Heroku は PostgreSQL なので、開発環境で問題なく動いていても、Heroku にデプロイしたとたんに動かなくなるということが結構あるので。
まぁ、自分の SQL の組み立て方が悪いだけなんだけど。
環境
- Ubuntu 10.10 (サーバ、クライアント共に)
- PostgreSQL 8.4
- Ruby 1.9.2
- Sequel 3.28.0
手順 (サーバ側)
PostgreSQLのインストール
sudo apt-get install postgresql
データベースの作成
インストール時に postgres というユーザーが(Ubuntuと, PostgreSQL 両方に)作成される。このユーザが MySQL でいうところの root にあたるので、そのユーザで DB を作成。
% sudo -u postgres createdb mydb
ロールの作成
% sudo -u postgres psql mydb mydb=# create role username with login; mydb=# ALTER USER username PASSWORD 'password';
設定ファイルの編集
別のホストから PostgreSQL にログインする場合にのみ必要。
/etc/postgresql/8.4/main/pg_hba.conf に以下の行を追加。
# TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 192.168.0.0/24 password
/etc/postgresql/8.4/main/postgresql.conf の listen_addresses という値を * に変更。
listen_addresses = '*' # what IP address(es) to listen on;
サーバ再起動
% sudo service postgresql restart
手順 (クライアント側)
ライブラリのインストール
入れないと gem pg のインストールが失敗する。
% sudo apt-get install libpq-dev
gem pg のインストール
bundler を使っているので、Gemfile に次の行を追加。
gem 'pg'
続けてインストール。
% bundle install
プログラム中のDBへの接続箇所を修正
Sequel.connect("postgres://username:password@192.168.0.100/mydb")
Heroku で使うことが前提なら以下のようにした方が楽。
Sequel.connect(ENV['DATABASE_URL'] || "開発環境での接続設定")
以上。