使用 rails 种子文件时 Oracle 序列未更新
Oracle sequence not updated when using rails seeds file
这是我的种子文件的一部分
Country.create(id: 1, name: 'Turkey', 'description' : 'Gobble gobble')
Country.create(id: 2, name: 'Hungary', 'description' : 'Blah blah blah')
在 table 国家/地区中有两个记录 运行。
所以现在通过 Web 界面或通过 API 我尝试创建一个新国家,但我从 Oracle 收到以下错误:
OCIError: ORA-00001: unique constraint
约束在主键上。播种后,它会尝试创建 ID 为 1、2 的下两条记录,但它们已经存在。
我不明白为什么在通过 API 或 Web 界面使用与 controller/model 中相同的代码播种来创建 Country
时,我会得到不同的结果。
如果我使用以下代码片段通过 SQLDeveloper 更改序列,一切正常:
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,它将由触发器的创建函数或数据库端设置。您可以检查触发器的表定义。
这是我的种子文件的一部分
Country.create(id: 1, name: 'Turkey', 'description' : 'Gobble gobble')
Country.create(id: 2, name: 'Hungary', 'description' : 'Blah blah blah')
在 table 国家/地区中有两个记录 运行。
所以现在通过 Web 界面或通过 API 我尝试创建一个新国家,但我从 Oracle 收到以下错误:
OCIError: ORA-00001: unique constraint
约束在主键上。播种后,它会尝试创建 ID 为 1、2 的下两条记录,但它们已经存在。
我不明白为什么在通过 API 或 Web 界面使用与 controller/model 中相同的代码播种来创建 Country
时,我会得到不同的结果。
如果我使用以下代码片段通过 SQLDeveloper 更改序列,一切正常:
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,它将由触发器的创建函数或数据库端设置。您可以检查触发器的表定义。