我正在尝试将我的应用程序从 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 开始。
查看数据库迁移期间创建的序列,它们都以 10000 (LAST_NUMBER) 开头。
它是 Oracle 方式,还是 activerecord-oracle_enhanced-adapter 做事方式?
为什么要这样设置?
有没有办法从1开始编号?
谢谢你的帮助,
最好的问候,
弗雷德
最佳答案
Is it an Oracle way, or is it an activerecord-oracle_enhanced-adapter way of doing things ?
这是适配器的做事方式。 Oracle 将默认使用创建的序列的最小值(通常为 1)。
从版本 1.6.7
开始,适配器在 oracle_enhanced_adapter.rb
中进行设置:
self.default_sequence_start_value = 10000
Is there a way to start numbering from 1 ?
您可以覆盖它。将 :sequence_start_value
选项传递给 create_table
方法允许您指定自己的值。
在迁移中,这可能看起来像:
create_table :table_name, primary_key_trigger: true, sequence_start_value: 1 do |t|
...
关于ruby-on-rails - Ruby on Rails 和 Oracle 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24891311/