关于Ruby on Rails迁移:Ruby on Rails迁移-创建新的数据库架构

关于Ruby on Rails迁移:Ruby on Rails迁移-创建新的数据库架构

Ruby on Rails Migration - Create New Database Schema

我有一个运行SQL脚本的迁移,以创建新的Postgres模式。 默认情况下,在Postgres中创建新数据库时,它将创建一个名为" public"的架构,这是我们使用的主要架构。 迁移以创建新的数据库模式似乎运行良好,但是该问题在迁移运行后发生,当Rails尝试更新其依赖的'schema_info'表时,该表表明该表不存在,就好像它是 在新的数据库模式中查找它,而不是在表实际所在的默认"公共"模式中查找。

有人知道如何告诉Rails查看此表的"公共"模式吗?

正在执行的SQL示例:?

1
2
3
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

抛出错误:?

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

谢谢你的帮助

克里斯·奈特


好吧,这取决于您的迁移情况,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-或此http://rails.lighthouseapp.com/projects/8994/tickets/918-postgresql-tables-not-generating-correct-schema-list或postgresql_adapter.rb中的此列表

1
2
3
4
5
6
7
  # Drops a PostgreSQL database
  #
  # Example:
  #   drop_database 'matt_development'
  def drop_database(name) #:nodoc:
    execute"DROP DATABASE IF EXISTS #{name}"
  end

(是的,如果您为开发和测试使用相同数据库且具有不同架构的数据库,那么这是错误的,每次运行单元测试时,这两个数据库都将被删除!)

我实际上开始写补丁。第一个是用于适配器中的索引方法的,它并不关心search_path在某些情况下最终以重复的索引结尾,然后我开始受到其余部分的伤害,并最终放弃了使用模式的想法:我想我的应用程序完成了,我没有多余的时间来解决使用模式时遇到的问题。


您可以使用pg_power。它不仅提供了用于迁移的其他DSL以创建PostgreSQL模式。


我不确定我确切地理解您的要求,但是,瑞克将期望将Rails架构的版本更新到schema_info表中。检查您的database.yml配置文件,这是rake想要查找要更新的表的地方。

您是否有可能正在迁移到新的Postgres模式,而rake仍然指向旧的模式?那时我不确定是否需要标准的Rails迁移。最好是创建自己的rake任务。

编辑:如果要引用两个不同的数据库或Postgres模式,Rails在标准迁移中不支持此功能。 Rails假定使用一个数据库,因此通常无法从一个数据库迁移到另一个数据库。当您运行" rake db:migrate"时,它实际上会查看RAILS_ENV环境变量以在database.yml中找到正确的条目。如果rake通过从database.yml查看"开发"环境和数据库配置开始迁移,则它将在迁移结束时更新到该环境。

因此,您可能需要在Rails堆栈外部执行此操作,因为您无法在Rails中同时引用两个数据库。尝试使用插件来允许此操作,但是它们主要是hacky,无法正常工作。


推荐阅读

    linux运行图形界命令?

    linux运行图形界命令?,系统,密码,地址,电脑,图形界面,地方,工具,界面,终端,

    linux怎样运行命令?

    linux怎样运行命令?,系统,工作,信息,基础,地址,命令,目录,工具,密码,一致,Lin

    linux操作数据库命令?

    linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参

    linux编译完运行命令?

    linux编译完运行命令?,系统,代码,环境,工具,信息,命令,文件,程序,终端,编辑,

    linux命令程序运行?

    linux命令程序运行?,状态,系统,服务,情况,命令,进程,软件,数据,发行,时间,Lin

    linux运行脚本命令?

    linux运行脚本命令?,系统,代码,服务,文件,工具,平台,网站,脚本,命令,方法,Lin

    linux命令后加运行?

    linux命令后加运行?,状态,暂停,工具,单位,进程,环境,网络,系统,权威,第一,mv

    ssh运行linux命令?

    ssh运行linux命令?,地址,服务,系统,软件,工具,电脑,网络,密码,名称,命令,在li

    linux脚本命令修改?

    linux脚本命令修改?,密码,系统,文件,资料,工具,软件,基础,地址,标准,命令,lin

    linux命令行模式网络?

    linux命令行模式网络?,网络,基础,系统,服务,管理,工作,命令,信息,中级,设备,l

    linux运行多个命令?

    linux运行多个命令?,环境,软件,系统,工作,服务,连续,命令,指令,分号,冲突,lin

    linux数据库升级命令?

    linux数据库升级命令?,系统,信息,时间,最新,网络,名字,地址,管理,简介,传播,l

    linux运行命令查看?

    linux运行命令查看?,系统,信息,状态,命令,名称,情况,地址,软件,进程,第一,lin

    linux脚本命令教学?

    linux脚本命令教学?,标准,数据,系统,脚本,代码,流程,官网,底部,命令,变量,lin

    linux中命令运行软件?

    linux中命令运行软件?,软件,系统,名称,工具,电脑,位置,环境,中心,在线,初级,

    linux命令行模式登录?

    linux命令行模式登录?,系统,密码,信息,状态,情况,终端,环境,管理,电脑,位置,l

    linux退出命令模式?

    linux退出命令模式?,状态,档案,命令,环境,密码,终端,文件,模式,编辑,端口,lin

    linux命令注释脚本?

    linux命令注释脚本?,代码,工具,名称,工作,脚本,发行,服务,环境,数据,基础,lin

    脚本linux上运行命令?

    脚本linux上运行命令?,工具,代码,时间,密码,系统,环境,名字,位置,第三,下来,t

    linux命令模式加行?

    linux命令模式加行?,工作,地址,系统,命令,工具,正规,信息,时间,第一,模式,Lin