首页 > 解决方案 > 获取 tarantool 中 box.sequence 的当前值

问题描述

我得到了序列当前值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
...

如何获得当前值?在文档中没有找到任何方法。

标签: tarantool

解决方案


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

存在box.space._sequence_data具有所有序列的当前值的系统空间。您需要做的只是从空间中选择您的序列 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),返回带有序列号和当前值的元组。

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

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


推荐阅读