Ruby on Rails和Oracle序列

时间:2014-07-22 15:19:33

标签: ruby-on-rails oracle

我正在尝试将我的应用程序从Postgres移到Oracle,在初始化数据播种过程中,我面临着Oracle序列管理方面的一些惊喜。

=>目标是在各种数据库(PostGres,Oracle,MSSQL)上运行相同的应用程序,并且这个初始数据(管理员用户,参数...)应该具有特定的id,从1开始,分配有关创建的顺序。当然,出于这个特定目的,我可以对id进行硬编码。

=>

完成迁移和播种
rake db:migrate RAILS_ENV=ORACLE 
rake db:seed RAILS_ENV=ORACLE

环境没有什么特别的,但相关的ActiveRecord适配器。 对于Oracle,种子数据ID不会按预期从1开始(Postgres或MS SQL中的行为),但它们以10000开头。

查看在db迁移期间创建的序列,它们都以10000(LAST_NUMBER)开头。

它是Oracle方式,还是activerecord-oracle_enhanced-adapter方式?

为什么这样设置?

有没有办法从1开始编号?

感谢您的帮助,

致以最诚挚的问候,

佛瑞德

2 个答案:

答案 0 :(得分:3)

  

它是Oracle方式,还是activerecord-oracle_enhanced-adapter   做事的方式?

这是适配器的处理方式。默认情况下,Oracle将使用创建的序列的最小值(通常为1)。

适配器(版本function getCookie(someParams) { return connect(someParams) .then(function(response){ return response.cookie; }); } function App() {} function getApp() { var app = new App(); return getCookie(params) .then(function (cookie) { app.cookie = cookie; return app; }); } // Usage getApp().then(function(app) { // use app }); )在1.6.7

中进行设置
oracle_enhanced_adapter.rb
  

有没有办法从1开始编号?

您可以覆盖此内容。将self.default_sequence_start_value = 10000 选项传递给:sequence_start_value方法可以指定自己的选项。

在迁移中,这可能如下所示:

create_table

答案 1 :(得分:0)

ID不具有商业价值。我会改变你的方法,以便你不关心dbms使用的是什么。

我会考虑添加一个额外的密钥,该密钥由填充字段的触发器和/或存储过程手动填充,从1开始并递增1。