【问题标题】:Postgres + Rails - Correct way to migrate all tables from one schema to anotherPostgres + Rails - 将所有表从一个模式迁移到另一个模式的正确方法
【发布时间】:2016-01-12 00:07:17
【问题描述】:

我目前有一个 Rails 应用程序,它使用 Postgres 并将它的所有表存储在默认的 public 架构下。

我正在建立一个更多的多租户架构,所以我想将所有这些表从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 产生什么影响(我也不太确定这样做有什么作用)

谢谢!

【问题讨论】:

    标签: ruby-on-rails postgresql schema rails-migrations


    【解决方案1】:

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

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

    尽管有我的意见,但 postgres 的文档并没有提出任何关于您的迁移应该关注的问题:http://www.postgresql.org/docs/9.4/static/sql-alterschema.html

    【讨论】:

    • 你是对的。我一直在尝试,但遇到了令人头疼的非常微妙的问题。感谢您的意见。
    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 2018-08-08
    • 2022-07-26
    • 2018-02-16
    • 2020-05-19
    • 1970-01-01
    • 2021-12-29
    • 2021-01-13
    相关资源
    最近更新 更多