我正在尝试在sqlite3中增加一个序列。
基本上,我正在使用序列作为另一个系统的密钥,而且我有多个DB会产生冲突。
即。我有2个DB都创建具有相同序列号的条目。它们都创建了一个15,我用它作为另一个系统的关键。
我想推进其中一个DB的序列,例如10 000,这样我就不会再发生冲突了。
免责声明:在你开始跳过我之前,我知道这不是一个好的设计,它只用于早期原型设计。我打算'升级'使用序列和时间戳生成的UUID作为我未来的密钥。但是,在我退出“演示模式”之前,我只想用一行SQL解决问题,如果可以的话。
我已经尝试了update sqlite_sequence set seq = 2000 where name = 'XXXX';
,但它似乎没有做到这一点。我是sqlite3的新手,也许是别的什么?
答案 0 :(得分:1)
这个问题似乎引起了很多关注,所以我想我会发布我正在使用的实际代码,只需要进行最小的擦除。这是在我的seeds.rb文件中。
min_sequence = 1000
case ActiveRecord::Base.connection.adapter_name
when 'SQLite'
select_current_sequence_number_sql = "select seq from sqlite_sequence where name = 'businesses';"
set_min_sequence_to_ten_sql = "update sqlite_sequence set seq = #{min_sequence} where name = 'businesses';"
result = ActiveRecord::Base.connection.execute(select_current_sequence_number_sql)
result.nil? || result.empty? ? current_sequence_number = 0 : current_sequence_number = result[0]['seq'].to_i
if current_sequence_number < min_sequence
ActiveRecord::Base.connection.execute(set_min_sequence_to_ten_sql)
end
when 'PostgreSQL'
...
else
raise "Task not implemented for this DB adapter"
end
答案 1 :(得分:0)
让我直截了当(不,我不是在判断)。这将是您的事件序列:
如果我弄错了,请告诉我,我会在那里工作。
答案 2 :(得分:0)
所以,不确定之前我做错了什么,但我最初在我的问题中提出的代码现在正在为我工作。
update sqlite_sequence set seq = 2000 where name = 'XXXX';
答案 3 :(得分:0)
Alter sequence sqlite_sequence
increment by 10000;