RailsでPostgreSQLを使う

Posted by Tatsuyano on Mon, Mar 9, 2015
In
Tags ruby, heroku, rails, postgresql

アプリをHerokuにdeployしたらSQLエラーが出てしまったので、 ローカルでの開発もPostgreSQLを使ってみようと思います。

PostgreSQLのインストール

ちなみにインストール先のOSはamazon-linuxです。

$ sudo yum -y install postgresql93
$ sudo yum -y install postgresql93-devel
$ sudo yum -y install postgresql93-server

$ psql –version psql (PostgreSQL) 9.3.6

データベースの初期化

$ sudo /etc/init.d/postgresql93 initdb

データベースの起動

$ sudo /etc/init.d/postgresql93 start

サーバー起動時にpostgresの起動設定

$ sudo chkconfig postgresql93 on


PostgreSQLアカウントの設定

まずは PostgreSQL にスーパーユーザ(postgres)で接続し、パスワードを設定します。

$ sudo -u postgres psql
postgres=# alter role postgres with password ‘hogehoge’;  # alter role [user_name] with password ‘[password]‘;

データベースの作成

わかりやすいようにデータベース名とRailsのアプリ名(myapp)を同じにします。 ついでにテスト(RSpec)用のデータベースも作成しておきます。

postgres=# create database myapp owner postgres; # create database [database_name] owner [user_name];
postgres=# create database myapp_test owner postgres;

アクセス権限の設定

Rails から PostgreSQL に接続するために、pg_hba.confの設定を変更します。

/var/lib/pgsql93/data/pg_hba.conf

# TYPE  DATABASE  USER  ADDRESS   METHOD
#local   all       all             peer  <= コメントアウト
local   all       all             md5   <= コメントイン
変更後は、PostreSQL と Nginx を再起動
$ sudo /etc/init.d/postgresql93 restart
$ sudo /etc/init.d/nginx restart

Rails側の設定

アプリを作成する前に、PostgreSQL を初めて使う場合は、先にpg gemをインストールしておきます。

$ gem install pg

アプリの作成

-dパラメータでDBでPostgreSQLに指定する

$ rails new myapp -T -d postgresql

接続先情報の設定

先ほど作成したデータベースとアカウントの情報を設定します。

config/database.yml

 default: &default
   adapter: postgresql
   encoding: unicode
   pool: 5

development: <<: *default database: myapp username: postgres password: hogehoge

test: <<: *default database: myapp_test username: postgres password: hogehoge


###(おまけ) PostgeSQLのコマンド

  • データベース一覧を取得する … \l
  • データベースを選択する … \c [データベース名]
  • テーブル一覧を取得する … \z
  • テーブルスキーマを取得する … \d [テーブル名]
  • ユーザ(Role)の一覧 … \du
  • パスワードの変更 … alter role [ロール名] with password ‘[新しいパスワード]‘;
  • データベースの作成 … create database [データベース名] owner [ロール名];
  • データベースの削除 … drop database [データベース名];

参考サイト