Rails 3.2 のマルチテナント サブドメイン ベースのアプリを PostgreSQL のスキーマに移行しようとしています (各アカウントは独自のスキーマを取得しています。現在、すべてのアカウントが同じテーブルを使用しています)。
だから、私は私がする必要があると考えています:
- 新しい DB を作成する
- 各アカウント (その ID) とその下のテーブルのスキーマを作成します
- 各アカウントに属するすべてのデータを取得し、そのアカウントのスキーマの下にある新しい DB に挿入します
その音は正しいですか?もしそうなら、それを行う良い方法は何ですか?ActiveRecord を使用してデータを取り出し、それを新しい DB に挿入する Ruby スクリプトを作成する必要がありますか? それとも、Postgres はそのようなことを行うための優れたツールを提供していますか?
編集:
Craig が勧めたように、既存の DB にスキーマを作成しました。次に、Rake タスクのすべてのアカウントをループして、次のようなデータをコピーします。
Account.all.each do |account|
PgTools.set_search_path account.id, false
sql = %{INSERT INTO tags SELECT DISTINCT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."tagger_id" = #{admin.id} AND "taggings"."tagger_type" = 'User'}
ActiveRecord::Base.connection.execute sql
#more such commands
end