【发布时间】:2011-05-30 09:19:21
【问题描述】:
例如,当我生成事件模型时,表会自动设置为公共模式。如何指定它以设置为不同的架构?
此外,您如何更改现有表的架构?也许将其移至不同的架构?
谢谢!
【问题讨论】:
标签: ruby-on-rails postgresql schema
例如,当我生成事件模型时,表会自动设置为公共模式。如何指定它以设置为不同的架构?
此外,您如何更改现有表的架构?也许将其移至不同的架构?
谢谢!
【问题讨论】:
标签: ruby-on-rails postgresql schema
免责声明:我不了解 Rails,所以我将在这里给出非常面向 postgresql 的答案。对于您问题的第一部分,很可能有更好的方法来做到这一点,即在创建表时让 rails 指定架构。
在 PostgreSQL 中,根据 search_path 设置在模式中搜索表。默认设置为"$user",public。表是在存在的搜索路径中找到的第一个模式中创建的。因此,如果您以“my_user”身份连接,它将尝试在“my_user”中创建表,如果“my_user”不存在,则回退到在“public”中创建它们。
因此,一种方法是更新用于连接到数据库的用户的“search_path”设置以进行架构更改。例如,您可以说ALTER USER my_user SET search_path = my_app, public。如果您随后创建“my_app”架构,那么“my_user”执行的后续CREATE TABLE foo(...) 命令会将新表放入“my_app”中。
您可以使用ALTER TABLE foo SET SCHEMA my_app 更改表的架构。
【讨论】:
创建迁移以生成新架构。 ActiveRecord 不能更新你的模式,它是模式系统。如果您想从代码中更新架构,可以尝试使用 sequel 或 DataMapper。
【讨论】: