ポイントは2点
Rails で PostgreSQL を用いる際の設定でのポイントは以下の2点です。
1. pg の gem を入れる
PostgreSQL を扱うための gem である pg をインストールする必要があります。Gemfile
に gem 'pg'
と書いて bundle install
します。
MySQL の場合は mysql2
という gem をインストールしていたところです。
2. データベース設定ファイルの adapter に postgresql を指定する
config/database.yml
に adapter
として postgresql
を指定します。
MySQL の場合は adapter: mysql2
と指定していた場所です。
development: adapter: postgresql (以下略)
(参考)任意のスキーマを使用するように設定する方法
PostgreSQL の場合はデータベースの構造が「データベース→スキーマ→テーブル群」となっています。MySQL では「データベース→テーブル群」となっている部分です。
PostgreSQL では MySQL と比較して「スキーマ」の部分が追加されています。どのスキーマを使うかを明示的に指定するには、データベース設定ファイルの中に以下のように記述します。
development: database: foobar schema_search_path: hogefuga (以下略)
これで、foobar というデータベースの hogefuga というスキーマが操作対象になります。テーブルを削除したり追加したりする際にはこのスキーマの配下で行われます。
しかしながら public
ではないスキーマを用いていると、db:reset
や db:migrate:reset
などを実行した際にエラーが出ます。同コマンドがスキーマまでは自動作成してくれない(はず)だからです。
$ rails db:migrate:reset (省略) rails aborted! ActiveRecord::StatementInvalid: PG::InvalidSchemaName: ERROR: 作成先のスキーマが選択されていません LINE 1: CREATE TABLE "schema_migrations" ("version" character varyin...
したがって同コマンドを実行する場合は手動でスキーマを作り直す必要があります。あるいは Rake タスクを追加するとかでしょうか*1。
もろもろ考えると、規約から外れるような作りにするよりかは、素直に public
スキーマを使うべきだと思います。
*1:試していないので断定できませんが……