当前位置:  开发笔记 > 后端 > 正文

Ruby on Rails迁移 - 创建新的数据库模式

如何解决《RubyonRails迁移-创建新的数据库模式》经验,为你挑选了1个好方法。

我有一个运行SQL脚本的迁移来创建一个新的Postgres模式.默认情况下,在Postgres中创建新数据库时,会创建一个名为"public"的模式,这是我们使用的主模式.创建新数据库模式的迁移似乎工作正常,但是在迁移运行后,当rails尝试更新它所依赖的'schema_info'表时,会出现问题,表示它不存在,就像它是在新的数据库模式中查找它,而不是表实际所在的默认"公共"模式.

有谁知道我怎么能告诉rails看这个表的'public'架构?

正在执行的SQL示例:〜

CREATE SCHEMA new_schema;
COMMENT ON SCHEMA new_schema IS 'this is the new Postgres database schema to sit along side the "public" schema';
-- various tables, triggers and functions created in new_schema

抛出错误:〜

RuntimeError: ERROR C42P01  Mrelation "schema_info" does not exist
L221    RRangeVarGetRelid: UPDATE schema_info SET version = ??

谢谢你的帮助

克里斯奈特



1> Jean..:

那么这取决于你的迁移是什么样的,你的database.yml看起来是什么以及你想要尝试什么.无论如何,如果必须更新名称,请更改名称,并发布示例database.yml和迁移.迁移是否会更改适配器的search_path?

但是要知道一般来说rails和postgresql模式不能很好地协同工作(但是?).

有几个地方有问题.尝试和构建和应用程序只使用一个pg数据库和2个非默认模式一个用于开发,一个用于测试并告诉我它.(从下面我已经可以告诉你,你会被烧掉)

也许它是自我上次玩它以后修复但是当我看到http://rails.lighthouseapp.com/projects/8994/tickets/390-postgres-adapter-quotes-table-name-breaks-when-non- default-schema-is-used或者这个http://rails.lighthouseapp.com/projects/8994/tickets/918-postgresql-tables-not-generating-correct-schema-list或者这个在postgresql_adapter.rb中

  # Drops a PostgreSQL database
  #
  # Example:
  #   drop_database 'matt_development'
  def drop_database(name) #:nodoc:
    execute "DROP DATABASE IF EXISTS #{name}"
  end

(是的,如果对dev和test使用不同模式的相同数据库,这是错误的,每次运行单元测试时都会丢弃两个数据库!)

我实际上开始编写补丁.第一个是适配器中的索引方法,它不关心search_path在某些条件下以重复索引结束,然后我开始受到其他人的伤害,最后放弃了使用模式的想法:我想得到我的应用程序完成了,我没有额外的时间来解决我使用模式的问题.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有