我目前有一个使用Postgres的Rails应用程序,并将其所有表存储在默认的public
架构下。
我正在设置更多的多租户架构,因此我想将所有这些表从public
移到另一个架构foo
。
我正在使用以下Rails Migration来完成此任务 -
class MovePublicToFoo < ActiveRecord::Migration
def up
[
"ALTER SCHEMA public RENAME TO foo;",
"CREATE SCHEMA public;"
].each { |s| ActiveRecord::Base.connection.execute(s) }
end
def down
[
"DROP SCHEMA public;",
"ALTER SCHEMA foo RENAME TO public;"
].each { |s| ActiveRecord::Base.connection.execute(s) }
end
end
这是在Postgres中解决这个问题的正确方法吗?
我不知道盲目移动默认架构的危险是什么,以及可能对search_path
产生什么影响(我不太确定它是什么)
谢谢!
答案 0 :(得分:2)
此类迁移的影响超出了Rails的范围。它取决于Rails用于连接数据库的数据库用户(postgres角色)以及用户在公共模式中具有/缺少的权限。您将确保在重命名架构以及数据库所有权后保留权限。我还没有测试过这种迁移,但我认为从Rails的角度看它应该可以正常工作。 app db用户。如果您有其他pg用户依赖公共架构,则可能会干扰其连接和权限。
重命名postgres架构,特别是默认架构,可能不应该在Rails迁移中完成,除非特定的postgres安装专用于Rails应用程序。
尽管我的意见,postgres&#39;文档没有提出与迁移有关的任何内容:http://www.postgresql.org/docs/9.4/static/sql-alterschema.html