【问题标题】:Oracle sequence not updated when using rails seeds file使用 rails 种子文件时 Oracle 序列未更新
【发布时间】:2015-02-13 04:10:35
【问题描述】:

这是我拥有的种子文件的一部分

   Country.create(id: 1, name: 'Turkey', 'description' : 'Gobble gobble')
   Country.create(id: 2, name: 'Hungary', 'description' : 'Blah blah blah')

运行后,国家/地区表中有两条记录。

所以现在我通过 Web 界面或 API 尝试创建一个新国家/地区,但我从 Oracle 收到以下错误:

OCIError: ORA-00001: unique constraint

约束在主键上。播种后,它会尝试使用 id 的 1、2 创建接下来的两条记录,但它们已经存在。

我不明白为什么在通过 API 或 Web 界面使用与控制器/模型中相同的代码播种来创建 Country 时,我会得到不同的结果。

如果我通过 SQLDeveloper 使用以下 sn-p 更改序列,一切正常:

ALTER SEQUENCE countries_seq INCREMENT BY 100;
select countries_seq from dual;
ALTER SEQUENCE countries_seq INCREMENT BY 1;

请注意,所有型号都会发生这种情况,我只是以Country 为例。

我正在使用

Ruby 2.1.0
Rails 4.0.5
oracle-enhanced 1.5.5 gem
ruby-oci8 2.1.7 gem

编辑

如果我不将 id 放在创建参数中,一切正常。

   Country.create(name: 'Turkey', 'description' : 'Gobble gobble')
   Country.create(name: 'Hungary', 'description' : 'Blah blah blah')

很高兴知道为什么...

【问题讨论】:

  • 我不知道 Country.create 做了什么,很可能:如果您自己不分配 id,它将由 create 函数或数据库端的触发器设置。您可以检查 tabledefinition 是否有触发器。
  • 对不起,如果我错过了,但你在哪里打电话给countries_seq.nextval
  • @evilive 我认为你是对的。当我提供 id 时,序列不会增加。如果你把它作为答案,我会接受。感谢您的帮助
  • @JamesZaghini 完成 ;)

标签: ruby-on-rails oracle oci8


【解决方案1】:

我不知道 Country.create 做了什么,很可能:如果您自己不分配 id,它将由 create 函数或数据库端的触发器设置。您可以检查 tabledefinition 是否有触发器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多