我正在尝试将我的应用程序从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开始编号?
感谢您的帮助,
致以最诚挚的问候,
佛瑞德
答案 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。