【问题标题】:Advance / Increment Sequence in sqlite3sqlite3中的高级/增量序列
【发布时间】:2011-05-12 23:05:29
【问题描述】:

我正在尝试在 sqlite3 中增加一个序列。

基本上,我将序列用作另一个系统的键,并且我有多个正在产生冲突的数据库。

即我有 2 个数据库都创建具有相同序列号的条目。他们都创建了一个 15,我将其用作另一个系统的密钥。

我想将 DB 的一个序列推进 10 000,这样我就不会再遇到冲突了。

免责声明:在你开始对我大发雷霆之前,我知道这不是一个好的设计,它只用于早期原型设计。我计划将来“升级”以使用从序列和时间戳生成的 UUID 作为我的密钥。但是,在我退出“演示模式”之前,如果可以的话,我只想用一行 SQL 来解决我的问题。

我已经尝试过update sqlite_sequence set seq = 2000 where name = 'XXXX'; ,但它似乎没有奏效。我是 sqlite3 的新手,也许是别的东西?

【问题讨论】:

  • @MPelletier 我认为这是一种有效的方法,但似乎比我想象的要复杂一些。由于我只担心冲突,我认为我只需要更改其中的一个数据库——另一个可以从它所在的位置继续计数。我真的只是想要一种方法来告诉序列“从 10000 开始计数”。

标签: sql ruby-on-rails sqlite sequence


【解决方案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 

【讨论】:

【解决方案2】:

让我说清楚(不,我不是在评判)。这将是您的事件序列:

  1. 连接到 DB1
  2. 连接到(或附加)DB2
  3. 手动强制 DB1 中 sqlite_sequence 中的 seq 为某个新值(您知道这是唯一的)
  4. 对 DB2 中的 sqlite_sequence 执行相同操作
  5. 在 DB1 的自动增量表中插入
  6. 在 DB2 的自动增量表中插入

如果我弄错了,请告诉我,我会从那里开始工作。

【讨论】:

    【解决方案3】:

    所以,我不确定我之前做错了什么,但我最初在我的问题中输入的代码现在对我有用。

    update sqlite_sequence set seq = 2000 where name = 'XXXX';
    

    【讨论】:

      【解决方案4】:
      Alter sequence sqlite_sequence
      increment by 10000;
      

      【讨论】:

        猜你喜欢
        • 2015-11-30
        • 2016-11-06
        • 2019-11-08
        • 2018-10-23
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多