在 tarantool 中获取 box.sequence 的当前值

get curren value of box.sequence in tarantool

我得到序列电流值3

localhost:3401> box.sequence.S:next()
---
- 3
...

我在对象中找不到当前值

localhost:3401> box.sequence.S
---
- step: 1
  id: 1
  min: 1
  cache: 0
  uid: 1
  max: 9223372036854775807
  cycle: false
  name: S
  start: 1
...

如何获取当前值?在文档中找不到任何方法。

如您所见,您的序列 Sid=1

有一个系统space box.space._sequence_data,它有所有序列的当前值。您需要做的只是 select 来自 space 的序列 ID:box.space._sequence_data:select(1).

例如,my_seq 是我数据库中的第 4 个序列。

tarantool> my_seq = box.schema.sequence.create('MySeq', {start=111})
---
...

tarantool> box.space._sequence_data:select(my_seq.id)
---
- []
...

tarantool> my_seq:next()
---
- 111
...

tarantool> box.space._sequence_data:select(my_seq.id)
---
- - [4, 111]

如您所见,在创建后 _sequence_data 没有任何关于新序列的详细信息,直到第一次使用 my_seq:next() 初始化序列。

如您所见,box.space._sequence_data:select(my_seq.id) returns 包含序列号和当前值的元组。

请注意此方法缺乏保证。复制存在一些问题。

在2.4.1 sequence:currval()中引入:https://github.com/tarantool/tarantool/issues/4752