Postgres + Rails - 将所有表从一个模式迁移到另一个模式的正确方法

3

我目前有一个使用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可能产生的影响我并不清楚。

谢谢!

1个回答

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

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

尽管我有我的看法,但postgres的文档并未提到任何关于迁移方面的问题: http://www.postgresql.org/docs/9.4/static/sql-alterschema.html


你说得对。我一直在尝试,但遇到了非常微妙的问题,让我头疼不已。感谢你的建议。 - user2490003

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接