2015-10-14 60 views
2

我目前有一个Rails应用程序,它使用Postgres并将其所有表格存储在默认的public模式下。Postgres + Rails - 将所有表格从一个模式迁移到另一个模式的正确方法

我正在建立更多的多租户体系结构,因此我想将所有这些表从public移到另一个模式foo

我用下面的Rails迁移完成此 -

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什么影响(我不太清楚这是什么会那样做)

谢谢!

回答

1

这种迁移的影响超出了Rails的范围。它取决于Rails用来连接数据库的数据库用户(postgres角色)以及用户在公共模式中拥有/缺少的权限。您需要确保在重命名模式和数据库所有权之后将保留权限。我还没有测试过这种迁移,但我认为它应该从Rails的应用程序数据库用户的角度来正常工作。如果您有其他pg用户依赖公共架构,则可能会干扰他们的连接和权限。

重命名postgres模式,特别是默认模式,可能不应该在Rails迁移中完成,除非特定的postgres安装专用于Rails应用程序。

尽管我的意见,Postgres的文档不建议任何这应该是关于迁移的关注:http://www.postgresql.org/docs/9.4/static/sql-alterschema.html

+0

你说得对。我一直在尝试它,并遇到非常微妙的问题,这让我很头疼。感谢您的意见。 – user2490003

+0

没问题;祝你好运! –