2014-07-22 154 views
1

我正試圖將我的應用程序從Postgres移到Oracle,並且在初始數據播種期間我正面臨Oracle序列管理的一些意外。Ruby on Rails和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-適配器的做事方式?

它爲什麼這樣設置?

有沒有辦法從1開始編號?

感謝您的幫助,

最好的問候,

弗雷德

+0

什麼是「分貝遷移期間創建序列」是什麼意思?您使用什麼工具/實用程序來執行此遷移?Oracle序列完全有可能從1開始(儘管我有興趣理解你爲什麼在乎它是從1還是1萬開始)。但是,如果您正在從一個數據庫遷移到另一個數據庫,通常希望序列從一個大於其所在位置的值開始,以免重新使用關鍵值。 –

回答

2

遞增它是一個Oracle的方式附加鍵,或者是它是一個activerecord-oracle_enhanced-adapter 的做事方式?

這是適配器的做事方式。 Oracle將默認使用創建序列的最小值(通常爲1)。

適配器,作爲1.6.7版本,在oracle_enhanced_adapter.rb設置此:

self.default_sequence_start_value = 10000 

有沒有開始從1開始編號的方式?

您可以覆蓋此內容。將:sequence_start_value選項傳遞給create_table方法允許您指定自己的方法。

在遷移,這可能是這樣的:

create_table :table_name, primary_key_trigger: true, sequence_start_value: 1 do |t| 
    ... 
0

的ID應該沒有商業價值。我會改變你的方法,這樣你就不會在意dbms使用什麼。

我會考慮加入由觸發手動填充和/或存儲的填充場程序,起始於一個由1

+1

實際上,這不是關於ID的業務價值,而只是種植一致的層次結構... – user1185081