ruby-on-rails - Ruby on Rails 和 Oracle 序列

标签 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 开始。

查看数据库迁移期间创建的序列,它们都以 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/

相关文章:

ruby-on-rails - 在另一个 Controller 中渲染一个 Action

java - 验证数据库是否符合您的预期

java - Oracle 和 Jdbc 以及 OraclePreparedStatement#setPlsqlIndexTable 和 java.util.Date

sql - 可嵌入与一对多

mysql - 详细的 RoR 应用程序...带有 MySQL 的 XML 或仅 MySQL

ruby-on-rails - 使用 Rails 3 link_to 执行 ajax 回调的正确方法是什么

ruby-on-rails - 带方向的 Rails distance_of_time_in_words

ruby-on-rails - 连接到 127.0.0.1 上的 Redis 时出错 :6379(ECONNREFUSED) on rails application

oracle - 为什么 Oracle SELECT INTO 语句会抛出错误?

oracle - 当其他人然后异常处理