我有一个基于 Rails 3.2 多租户子域的应用程序,我正在尝试迁移到 PostgreSQL 的模式(每个帐户都有自己的模式——现在所有帐户都使用相同的表)。
所以,我想我需要:
- 创建一个新的数据库
- 为每个帐户(其 id)及其下的表创建一个模式
- 获取属于每个帐户的所有数据,并将其插入到该帐户架构下的新数据库中
这听起来正确吗?如果是这样,这样做的好方法是什么?我是否应该编写一个使用 ActiveRecord 的 ruby 脚本,提取数据,然后将其插入(效率很低,但应该完成工作)到新数据库中?或者 Postgres 是否提供了很好的工具来做这样的事情?
编辑:
正如 Craig 建议的那样,我在现有数据库中创建了模式。然后,我在 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