可以将oracle数据库包转储到db schema(ruby on rails)吗?

时间:2014-07-17 12:43:48

标签: sql ruby-on-rails oracle unit-testing

我尝试测试我的rails应用程序。在生产中,它适用于现有的只读oracle数据库。我的问题是在原始数据库中有一个oracle包,其中包含一些复杂生成的sql语句中的函数。我使用sql语句从数据库中获取一些特殊数据。

pa包含某些函数的定义,如A,并在sql语句中引用,例如

 SELECT pa.A(SUM(W1),'F',SUM(W2),'F') AS F1, W3 AS F2
 FROM  table1;

是否有可能将包包含在模式文件或其他文件中,以便在使用rake构建数据库时加载它:test?

1 个答案:

答案 0 :(得分:1)

简短的回答是否。至少在Schema.rb文件中没有。但是,您可以使用数据库的特定转储实用程序并将其输出放入Structure.rb文件中,在Structure.rb中执行此操作

取自http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you

  

但是需要权衡:db / schema.rb不能表达数据库特定的项,例如外键约束,触发器或存储过程。在迁移中,您可以执行自定义SQL语句,但架构转储程序无法从数据库重新构建这些语句。如果您使用这样的功能,那么您应该将架构格式设置为:sql。

     

不使用Active Record的架构转储器,而是使用特定于数据库的工具(通过db:structure:dump Rake任务)将数据库的结构转储到db / structure.sql中。例如,对于PostgreSQL,使用pg_dump实用程序。对于MySQL,此文件将包含各种表的SHOW CREATE TABLE的输出。

     

加载这些模式只是执行它们包含的SQL语句的问题。根据定义,这将创建数据库结构的完美副本。但是,使用:sql架构格式会阻止将架构加载到用于创建架构之外的RDBMS中。